跳到主要內容

發表文章

目前顯示的是 2020的文章

Apache 防止 bot 的設定

1、  Options All -Indexes RewriteEngine on # Block Bad Bots & Scrapers SetEnvIfNoCase User-Agent "Aboundex" bad_bot SetEnvIfNoCase User-Agent "80legs" bad_bot SetEnvIfNoCase User-Agent "360Spider" bad_bot SetEnvIfNoCase User-Agent "^Java" bad_bot SetEnvIfNoCase User-Agent "^Cogentbot" bad_bot SetEnvIfNoCase User-Agent "^Alexibot" bad_bot SetEnvIfNoCase User-Agent "^asterias" bad_bot SetEnvIfNoCase User-Agent "^attach" bad_bot SetEnvIfNoCase User-Agent "^BackDoorBot" bad_bot SetEnvIfNoCase User-Agent "^BackWeb" bad_bot SetEnvIfNoCase User-Agent "Bandit" bad_bot SetEnvIfNoCase User-Agent "^BatchFTP" bad_bot SetEnvIfNoCase User-Agent "^Bigfoot" bad_bot SetEnvIfNoCase User-Agent "^Black.Hole" bad_bot SetEnvIfNoCase User-Agent "^BlackWidow" bad_bot SetEnvIfNoCase User-Agent "^BlowFish" bad_bot SetEnvIfNoCase User-Agent "^BotA

Arudino 教學(五):開關 + 數位輸入 + IF 語法

本次實作將使用 開關元件 ,並運用 Arduino 的 數位輸入 功能偵測信號,依照輸入信號執行 LED 燈號程序。內容比較複雜,將分次分階段進行。 本次實作每個同學需要抄寫「實作目的」、「線路說明」、「程式說明」與「進階」作為實作報告。 實作目的: 正確使用開關元件,並架構電位測量電路 正確使用 Arduino 數位輸入電路 使用 IF 語法,偵測數位輸入信號進行 LED 程序 階段一:認識開關元件 零件包內附的開關是4支腳位,分成兩組,從背面觀察(上圖下),從條紋來辨識,左邊2支腳位是互通的,右邊2支也是;而必須按下開關,左右兩邊才會連通。 階段二:Arduino 數位輸入與電位測量電路 Arduino 數位輸入是電位訊號而非電流,所以 不可以直接將電流直接導入 Arduino 腳位 。必須架構電位測量電路來達成數位訊號輸入。 本階段使用 Arduino UNO 的 6 號腳位 作為數位輸入,按下開關之後控制 內建 LED 。 digitalRead(6) :讀取 6 號腳位的訊號,高電位 HIGH,低電位 LOW 階段三:由開關控制 LED 程序 現在開始要結合前兩階段以及上個實作,由開關來啟動 LED 閃動程序。由 6 號腳位 接受數位輸入訊號。利用 IF 語法控制 LED 程序。LED 電路和程序和上一個實作相同。 電路圖: 線路說明: 8、10、12號腳位組成共陰極 LED 線路 6 號腳位連接由開關元件所組成的電位測量線路,作為數位輸入端 程式截圖: 程式說明: int var = 0; 表示宣告一個變數 var 作為後續讀取輸入訊號用 在 setup 區塊設定 6 號腳位為數位輸入端,8號、10號、12號腳位為數位輸出端 在 loop 區塊中,利用 var = digitalRead(6); 讀取 6 號腳位訊號到變數 var 中 利用 IF 語法,判斷變數 var 是否為 HIGH (高電位)。若是則開始執行 LED 程序 進階: 變更間隔時間與次數 增加 LED 或 燈號變化 使用雙分支結構增加變化 補充說明:IF 語法 if (判斷式){     …     (成立時執行的程序)     … }  雙分支結構 if (判斷式){     …     (成立時執行的程序)     … } else {     …     (不成立執行的程序)  

DNS 新增 CAA 紀錄

學校的網頁伺服器採用 HTTPS 模式時,均使用 Let's Encyrpt 認證服務。大多數的伺服器都依 Let's Encrypt 官網的說明,使用 Certbot 用戶端自動於過期前更新。 今天遇到 6/16 到期的 radius.tsh.tp.edu.tw 出現久違的 https 警告,發現該主機的 Certbot 並沒有自動更新。查詢相關資料後,用 sudo certbot renew 手動指令更新,出現下列的錯誤: 發現是 DNS CAA 錯誤問題。 摘錄「 https://ezbox.idv.tw/112/dns-caa-protec-ssl-tls-certificate/ 」說明: 目前全球簽發 SSL/TLS 憑證的機構已超過百個 要避免這些機構在某些情況下錯誤簽發憑證 (WoSign曾發生過) 就需要在簽發憑證前做一些檢查動作 在 RFC 6844 中定義了 DNS CAA Record 透過 DNS 的 CAA 紀錄,申明網域授權哪些機構可以簽發該網域的憑證 如果沒有設定 CAA 紀錄,則代表任何機構都可以簽發該網域的憑證 2013年1月 CA可以決定是否檢查該記錄,非強制性 2017年3月 CA/Browser 論壇決議 2017年9月起強制所有憑證發行機構在簽發憑證前必須檢查 DNS CAA 紀錄 如果是代管 DNS,則現行多數的DNS代管單位都可以直接設定 CAA 紀錄 若無法新增 CAA 紀錄,只能聯繫代管服務商要求提供協助設定 如果是自行管理DNS,則需要在自己的 DNS Server 上自行設定 解決方式只要用 SSLMate 提供的 CAA Record Helper 來協助產生紀錄,再輸入 BIND9 設定檔中即可。

新技能習得:Proxmox VE

伺服器開箱喔

學校採購一台機架型伺服器,主要作未來虛擬化主機使用。這是生平第一次全新的伺服器可以拆箱的。 開箱文 PO 到 FB 後,還被學生子澄發現記憶體沒有插滿。唉!不足記憶體沒滿,兩個 CPU 插槽也只有插一顆 CPU,我也很想都都插滿,但是沒有經費啊。     

Arudino 教學(四):迴圈

本次實作將練習 Arduino 程式中的重覆語法(迴圈),利用 for 迴圈來簡化重覆程式結構。 另外, 本次實作每個同學需要抄寫「實作目的」、「線路說明」、「程式說明」與「進階」作為實作報告。 實作目的: 熟悉 Arduino 重覆語法:for 迴圈的使用 利用 for 迴圈控制 LED 燈閃爍 電路圖: 線路說明: 選用紅色、黃色、綠色 LED,正極分別串接一個220Ω電阻後,連接至 Arduino 的12、10、8號腳位。 LED 負極共接後,連接至 Arduino GND 腳位 程式截圖: 程式說明: 在 setup 區塊中,設定第 8、10、12號腳位為輸出功能 在 loop 區塊中,先使 8 腳位點亮一秒 利用 for 迴圈使 10 腳位每隔 0.2 秒閃動十次 12腳位亮一秒後,使用 for 迴圈每隔 0.2 秒閃動五次 For 迴圈特別說明: for 迴圈語法是用在已知次數的重覆執行的情景下。   語法結構: for(int 變數起始值 ; 執行條件 ; 變數增減式 ){ … … }   進階: 變更間隔時間與次數 增加 LED 或 燈號變化

生平第一張 cisco 認證

CISCO IT Essentials

Arudino 教學(三):多顆 LEDs

本次實作將加深 LED 電路,練習多顆 LEDs 與共地線電路,並使用 Arduino Uno 進行控制。另外, 本次實作每個同學需要抄寫「實作目的」、「線路說明」、「程式說明」與「進階」作為實作報告。 實作目的: 熟悉多顆 LEDs 與共地線電路接線 使用 Arduino 程式進行多顆 LEDs 控制 電路圖: 線路說明: LEDs 負極(短腳)共同連接在一起,再接至 Arduino GND(接地)腳位 LEDs 正極(長腳)先連接一220Ω 電阻之後,再分別連接至 Arduino 10 號與 11號腳位 程式截圖: 程式說明: 在 setup 區塊中,利用 pinMode 設定 10 腳位為輸出用途,設定 11 腳位為輸出用途 在 loop 區域中,利用 digitalWrite 送出 HIGH 點亮  LED,LOW 關閉 LED 燈,其中 10 號腳位 HIGH 時,11號腳位則為 LOW,反之亦然 delay(1000) 延遲一秒 進階: 改變延遲時間 增加閃動變化 增加 LED 的數量

MySQL 字串取代 UPDATE … REPLACE

學校的網頁由 http 改成 https 後,原本的內容是後台中,利用線上編輯 ckeditor 和 ckfinder 製作,圖片的連結已經是用 http:// 的網址方式寫入資料庫了。改換成 https 後會變成網頁中有 https 和 http 兩種連線的內容。在瀏覽器中還是會被辨識為「不安全」,看起來有點礙眼! 重新逐一修改網頁內的圖片不切實際,反正相關的網址都是儲存在 MySQL(MariaDB)資料庫中,所以一次用 REPLACE 字串取代的方式搞定。 SQL 語法: Update activity Set cover = Replace( cover, "http://www.tsh.tp.edu.tw", "https://www.tsh.tp.edu.tw") Where cover Like "http://www.tsh.tp.edu.tw%" 在資料表 activity 中,將 cover 欄位以 http://www.tsh.tp.edu.tw 開頭的內容,以 https://www.tsh.tp.edu.tw 取代 http://www.tsh.tp.edu.tw。其實這個 SQL  可以再簡化一點,不過,已經完成就算了。   

Ubuntu Apache 啟用 http/2

何謂 http/2 (摘錄自「你的網站升級到 HTTP/2 了嗎?」) 隨著網頁內容越來越複雜,造成了要完成一個網頁載入(Page Load)的動作,除了要下載 HTML 之外,還需要下載 CSS 檔案、JavaScript 檔案、各種圖片檔案,零零總總加起來需要已經多達上百個對伺服器的 Request 請求資源,大大影響了網頁載入的速度。在這一秒鐘幾十萬上下的時代,Amazon 的網頁載入時間每多一秒,該公司的年度營收就減少 16 億美元、Google 的搜尋時間每多 0.4 秒,每天的搜尋次數就會減少 8 百萬網頁、KISSmetric 分析報告指出等待時間超過 4 秒,Bounce Rate 就會增加 25%。人的思緒在等 1 秒後就開始飄移,如果需要等 10 秒,就會感覺這東西是不是壞了。 這個問題的最大原因在於, HTTP/1.1 有一個非常大的缺陷是每個對伺服器的 Request 資源請求,都必須佔用一個網路連線(TCP connection),傳完一個檔案才能再傳下一個,瀏覽器無法同時下載。因此在 HTTP/1.1 時代,瀏覽器為了加速下載的時間,只好同時允許六個網路連線(TCP connection)併發去連接伺服器,好可以達成同時下載六個資源。但是極限也是如此了,並不是說無限制增加網路連線就可以解決這個瓶頸,因為每一次的網路連線,都必須經過三次握手的初始網路連線程序,而且每次初始連線因為流量控制的關係,一開始的網路封包會傳輸比較慢,後來才逐漸加快。 那麼,HTTP/2 是如何改良的呢?它採用的解法包括: 只需要單一網路連線(Single TCP connection),就可以連接網站伺服器,下載所有需要的資源。大大節省 HTTP/1.1 需要一直建立多個網路連線時的啟動時間浪費。 連線多工(Multiplexing),在單一網路連線上,就可以同時傳輸多個 HTTP Request 和 Response,併發請求 CSS/JS/Images 等等資源。它的原理是將 Requests/Responses 都拆碎成小 frames 進行傳輸,而這些 frames 是可以交錯的,因此檔案再多也不怕,不會發生佔用網路連線(TCP connection)的情況。這就是為什麼在圖檔多的情況下,HTTP/2 特別有優勢。 優先權設計(

Hyper-V 安裝 Ubuntu 20.04 Desktop

參考資料: https://medium.com/@labappengineering/ubuntu-20-04-on-hyper-v-8888fe3ced64

Window10 利用 wsl 加裝 linux 實作與一些應用

Windows 10 內建 WSL 模式可以執行 linux 套件已經不是新聞了,最近因為在 Windows Store 看到 linux 套件,來測試和研究看看。 部份網路上的資料是用 PowerShell 以指令去開啟 wsl 功能。後來查到不用指令,直接用 GUI 介面操作的步驗: 開啟開發人員模式 安裝 wsl 子系統 重新開機之後,就可以到 Microsoft Store 上下載安裝自己想要的 Linux 套件 在實際安裝試用之後,有點不清楚這樣的方式有什麼好處?原本以為這樣的安裝方式可以省下從 Hyper-V 或 VM 上面執行 Linux,結果安裝發現執行效能有差! 在 wsl 子系統上面安裝 Nginx + PHP-FPM,結果跑不太動! 參考資料: https://blog.miniasp.com/post/2019/02/01/Useful-tool-WSL-Windows-Subsystem-for-Linux

Arudino 教學(二):點亮 LED

本次實作將利用 LED 燈及麵包板構成簡易電路,並使用 Arduino Uno 進行控制。另外, 本次實作每個同學需要抄寫「實作目的」、「線路說明」、「程式說明」與「進階」作為實作報告。 實作目的: 熟悉簡易 LED 與麵包板線路接線 使用 Arduino 程式進行 LED 控制 接線圖: 線路說明: LED 負極(短腳)藉由麵包板連接至 Arduino GND(接地)腳位 LED 正極(長腳)先連接一220Ω 電阻之後,再連接至 Arduino 10 號腳位 程式截圖: 程式說明: 在 setup 區塊中,利用 pinMode 設定 10 腳位為輸出用途 在 loop 區域中,利用 digitalWrite 送出 HIGH 點亮 LED,LOW 關閉 LED 燈 delay(1000) 延遲一秒 進階: 改變延遲時間 增加閃動變化 增加 LED 的數量

Arduino教學(一)

官網: https://www.arduino.cc/ 軟體下載: arduino-1.8.12-windows.exe 實作一: 本實作內容無需額外接線,只需單獨 Arduino 板即可。程式內容取用 IDE 提供的範例。 目的: 認識 Arduino IDE 操作 藉由 Blink 範例練習程式上傳過程 修改 Blink 範例 Blink 程式 本次實作是使用 Arduino 版內置的 LED,所以在 setup() 區塊中設定 pinMode(LED_BUILTIN, OUTPUT) 在程式主體 loop() 區塊中,使用 digitalWrite 輸出 HIGH 來點亮 LED 燈,LOW 關閉 LED。delay(1000) 為延遲一秒。 進階: 可以在延遲時間上作變化 增加閃動的程序,使其呈現更多變化

IPv6 系列(五):KEA DHCP SERVER

學校在純 IPv4 的環境時,採用 ISC-DHCP Server 來發放教學區域的私有 IP(10.10.xxx.xxx),並使用閘道 Fortigate 作 NAT 連接到 Internet。 採用 IPv6 後,原本是要使用 ISC-DHCPv6 來作為 IPv6 發放,結果 ISC-DHCPv6 架不起來。不過在查詢 DHCPv6 的過程中,發現 ISC(Internet System Consortium)已開發出下一代的 DHCP Server:Kea Dhcp Server。 Kea Dhcp Server 官網: https://www.isc.org/kea/ 摘錄  https://www.itread01.com/content/1548712273.html  對 Kea DHCP Server 的介紹: Kea DHCP Server 由 Internet Systems Consortium(ISC) 開發的開源 DHCPv4/DHCPv6 伺服器。Kea DHCP Server 是一個高效能的,可擴充套件的DHCP伺服器引擎。通過hooks library可以很容易的修改和擴充套件。 Kea包含的功能元件 keactrl — kea伺服器啟動,停止,配置重置和狀態查詢元件 kea-dhcp4 — DHCPv4伺服器程式,用於響應客戶端的DHCPv4查詢。 kea-dhcp6 — DHCPv6伺服器程式,用於響應客戶端的DHCPv6查詢。 kea-dhcp-ddns — DHCP動態DNS程式.這個程式在DHCP伺服器和DNS伺服器之間扮演者調解者。它接收來自DHCP伺服器域名更新請求和傳送DNS更新訊息給DNS伺服器。也就是說DDNS捕獲使用者每次變化的IP地址,然後將其與域名相對應,這樣其他上網使用者就可以通過域名來進行交流。而最終客戶所要記憶的全部,就是記住動態域名商給予的域名即可,而不用去管他們是如何實現的。 軟體執行環境 加密庫Botan或者OpenSSL log4cplus 1.0.3+ 如果有需要mysql,需要MySQL headers and libraries。可選(postgresql、cassandra類同) 選用 Kea DHCP Server 的原因,第一,提供 DHC

IPv6 系列(四):安全公用 DNS

繼學校開始採用 IPv6 後,在 Fortigate 防火牆除了原有的 IPv4 規則外,還要針對 IPv6 作設定。因為學校的資安策略除了會管制外部對內往伺服器的連線外,還會針對內部對外的不當連線,加上惡意網域日新月異,防不勝防,如此一來會增加人員與設備的負擔。 在 IPv4 環境中,學校內行政辦公室電腦採用固定 IP,其他教學部份均為 DHCP 動態發放 IP。而在 IPv6 的環境下,不管是 Stateless 或 Stateful 設定 IPv6,都會用到 DHCPv6 來設定 DNS 資訊。一般上網的動作一定會有 DNS 查詢的動作,所以可以把 DNS 查詢當作資安的防護層,也就是採用具有過瀘功能的公用 DNS 伺服器(Public DNS servers)。 提到 public dns server,一般都會想到的是 Google public dns 服務(8.8.8.8、8.4.4.8),但查詢 Google 的說明似乎沒有看到 Google 會特別針對資安防護的功能,所以改採用 cloudflare dns。 cloudflare dns 可以設定不同安全等級的 dns 位址: 一般使用 1.1.1.1  1.0.0.1 2606:4700:4700::1111  2606:4700:4700::1001 Malware Blocking Only 1.1.1.2 1.0.0.2 2606:4700:4700::1112 2606:4700:4700::1002 Malware and Adult Content 1.1.1.3 1.0.0.3 2606:4700:4700::1113 2606:4700:4700::1003 而且從 cloudflare dns 的官網說明上看,它還有隱私、安全的功能,速度也比較快。 除了 cloudflare dns 外,還有 opendns、comodo sercure dns 也有提供安全等級的選擇,但速度比較慢。 參考資料: https://blog.cloudflare.com/introducing-1-1-1-1-for-families/ https://developers.cloudflare.com

修正 pfsense 更新至 2.4.5 後,captive portal 資料庫錯誤

學校架設兩台 pfsense 作為無線網路管理伺服器,因為 pfsense 可以提供無線認證網頁(Captive Portal),並後端使用 Radius 作使用者認證。 其中一台更新至 2.4.5 版之後,認證服務正常工作,但是會發生錯誤,使得認證的 session 無法正常停止。 查詢 log 紀錄發現上面的錯誤訊息,看起來是因為 Captive Portal 紀錄的資料表“captiveportal”少了“traffic_quota”欄位。 從 pfsense 的資料說明知道使用 SQLite3 的資料庫系統,再從 github 查到 pfsense 處理 Captive Portal 資料庫相關的原始碼。 從程式碼的片斷有資料表的欄位結構。 使用 SSH 連上 pfsense 選擇8 切換到 shell 環境,並切換到 /var/db,確定資料庫檔案名稱:captiveportalv600.db 執行 sqlite3 進入 SQLite3 工作環境 .open 開啟資料庫,用 alter table add column 插入所需要的欄位與格式 .schema 查詢資料表的結構

IPv6系統(三):伺服器手動設定 & Fortigate SLAAC 設定

一、伺服器手動設定 機房的伺服分為 Ubuntu 及 Windows Server 系列兩種。Windows Server 具有圖形介面(GUI),且與 Win7、Win10 作業系統操作相似,相當容易設定。只要把 IP 相關資訊輸入即可。 Ubuntu linux 系統需要修改系統設定檔(/etc/network/interface) 二、Fortigate SLAAC 設定 以學校中 vlan192 為例,IPv6區段為 2001:288:102b:a5::/64 最主要是 config ipv6 之後的區段,set ip6-address 設定本機作為這個 vlan 的 IPv6 的 IP,set ip6-send-adv、set ip6-other-flag 開啟RA功能,並設定成 DHCP+SLAAC 動態 IPv6 環境。 因為採用 DHCP+SLAAC 的緣故,必須要有 DHCPv6 來發放 DNS 資訊,否則要每一台手動設定才能正確連接網路。 除此之外,Fortigate 上還需要針對 IPv6 做 Routing table 和 IPv6 Firewall Rule 的設定。

IPv6 系列(二):學校網路架構規劃

學校的 IPv6 網段是: 2001:288:102b::/48 ,依照校內現行的網路架構,每個 vlan 區域分配的 IPv6 網段為 2001:288:102b:xxxx::/64 ,其中 xxxx 部份,依照任務與地理位置來編號,以方便辨識與記憶: 0 表伺服器群組 a4 表綜合大樓 vlan1 辦公室區域,a440 表綜合大樓 vlan400 教室區域,a410 綜合大樓 vlan410 A416 偏鄉英文教室,a450 綜合大樓 vlan500 電腦教室區域 a5 為尚志大樓 vlan192 辦公室區域,a510 尚志大樓 vlan100 教室區域(及部份因 IPv4 不足所歸屬的行政電腦) b456 為 B棟 vlan193 辦公室區域,bb20 為 B棟 vlan200 教室區域 現行網路架構為 IPv4 與 IPv6 並存 。伺服器群組部份 關閉 RA 封包 ,以手動設置 IPv6 固定位址。其餘區域設置 SLAAC+DHCPv6 方式配發 IPv6,但其內部重要的骨幹 L3 switches 則手動設定 IPv6 位址。