近來Slowris頻頻利用HTTP通訊協定的漏洞進行攻擊,讓網站伺服器因為DoS侵擾而整個停擺。其中一個因應之道是善用開源碼的資源,為Apache伺服器加上防禦模組,好讓危害降低到最低。
以上為設定要求內容必須在時限內完成傳輸,但如有設定MinRate資訊,表示倘若要求內容的傳輸速率高於此設定數值,即可不受限於所設定的時限。
可利用下列設定來啟動mod_reqtimeout模組:(其中#為註解,所設定的數值並無一定的標準,須根據自身的系統而定)
在重新啟動網站伺服器後,就可以利用mod_reqtimeout模組來限制要求(Request)的處理時限。一旦mod_reqtimeout模組偵測到類似的Slowris攻擊,就會回覆HTTP狀態碼408(Request Timeout)的訊息給使用者端,所以在Apache網站伺服器的access_log,將會發現如圖2所示的Log資訊。
|
▲圖2 檢視Log資訊內容。 |
雖然mod_reqtimeout模組能夠有效地防範Slowris的攻擊,但其功能較為陽春,僅能針對控制要求的處理時限。接下來,將再簡介一套功能強大且能有效防範Slowris攻擊的模組,名稱為mod_qos,能夠更全面地掌控網站伺服器的連線控制。
什麼是mod_qos
QoS(Quality of Service)是一種確保服務品質的服務,通常一台伺服器都會運作不同的網路服務(例如網站伺服器、電子郵件伺服器等),而對企業而言,相關服務的重要性可能均不相同,例如電子商務網站可能較依賴網站伺服器的運作,因此網站伺服器的順暢運作可能較其他的網路服務重要,在此情況下可利用QoS服務的設定來確保網站伺服器的服務品質。
而mod_qos模組就是利用控管相關連線的方式來確保網站伺服器運作順暢,它可編譯成Apache網站伺服器的模組,為Apache新增QoS功能。其控管連線方式如圖3所示。
|
▲圖3 mod_qos模組運作示意圖。 |
mod_qos提供三種控制連線的方式,說明如下:
1. 以來源IP控管:設定控制個別來源IP可連線的數目,或設定網站伺服可接受的來源IP數目等相關控制措施。
2. 以連線數控管:設定網站伺服器可處理的連線數,或每秒可處理的連線數等相關控制措施。
3. 以URL控管:設定網站伺服器上個別的URL可接受的連線數目,或是每秒可接受的連線數等相關控制措施。
安裝mod_qos
請至mod_qos官方網站下載最新版的原始碼,本文使用的版本為11.32。解壓縮後,執行如下的指令:
若編譯成功,在Apache安裝目錄下的「module」目錄內將會產生一個名叫「mod_qos.so」的檔案:
完成編譯後,接著說明mod_qos模組的常用組態(由於本文不需使用到Client Level Control的控制,所以就不說明Client Level Control的相關控制組態)。
以URL控管(Request Level Control)
此類組態是以每個URL(PER-URL)做為控制的主體,亦即控管每個URL的連線,例如控制網站伺服器上個別的URL在同時間最大能承受多少個連線數等等的控制,提供的常用組態說明如下:
·QS_LocRequestLimitDefault
預設網站伺服器上的URL,同時間能承受的最大連線數,例如「QS_LocRequestLimitDefault 100」就表示網站伺服器上的URL預設同時間最大只能承受100個連線數。
·QS_LocRequestLimit
設定網站伺服器上的URL同時間能夠承受的最大連線數,例如「QS_LocRequestLimitMatch "/aaa" 100」代表名稱為aaa的URL同時間只能承受100個連線數。
·QS_LocRequestPerSecLimit
設定網站伺服器上的URL每秒鐘能夠承受的連線數,例如「QS_LocRequestPerSecLimit "/aaa" 100」表示名稱為aaa的URL每秒鐘最大只能承受100個連線數。
·QS_LocRequestLimitMatch
設定符合正規表示法(regex)的URL同時間能夠承受的最大連線數,例如「QS_LocRequestLimitMatch "^(/a1/).*$" 100」表示名稱為a1開頭的URL同時間只能承受100個連線數。
·QS_LocRequestPerSecLimitMatch
設定符合正規表示法的URL每秒鐘能夠承受的最大連線數。
·QS_LocKBytesPerSecLimitMatch
設定符合正規表示法的條件式,能夠下載的最大速率(單位為K bytes),例如「QS_LocKBytesPerSecLimitMatch \.iso 1024」代表下載ISO檔時每秒鐘的速率不得超過1M。
·QS_LocKBytesPerSecLimit
設定URL每秒鐘所能下載的最大速率(單位為K bytes),譬如「QS_LocKBytesPerSecLimit /app 1024」是表示在「/app」的網站目錄中下載時,每秒鐘的速率不得超過1M。
以連線數控管(Connection Level Control)
此類組態是以網站伺服器做為控制的主體,也就是控管網站伺服器上的連線數,例如設定網站伺服器在同時間最大能承受的連線數,提供的常用組態說明如下:
·QS_SrvMaxConn
設定同時間網站伺服器可最大承受的TCP連線數量,例如「QS_SrvMaxConn 1000」就表示在同時間內網站伺服器最多僅能承受1,000個的連線數。