為了說明mod_reqtimeout模塊的用途,需要先說明一下背景。
【背景】
客戶端發送請求頭(或者body)到web服務器,web服務器一直等待,直到它收到一個完整的請求頭(或者body)。
客戶端繼續發送新的請求,打開新的連接再次發送不完整的請求頭(或者body)。
這樣可能導致大量的進程/線程等待客戶端的數據,耗光了web服務器的資源,導致了正常請求無法得到處理。
這個漏洞在Apache 1.x、 2.x都存在,其他的服務器nginx、dhttpd、 GoAhead WebServer、IIS6.0、 IIS7.0、lighttpd我沒有確認。
【解決方法】
apache這個漏洞,會導致拒絕服務攻擊(DoS攻擊),請大家注意啦。
可以通過HTTP DoS的工具“OWASP HTTP POST Tool”或者“Slowloris”來發起攻擊,檢查一下是否網站是否存在這個漏洞。
apache發生問題時,從servser-status的狀態看,下面的進程/線程都正在讀取請求,
----------------------------------------------------
64 requests currently being processed, 0 idle workers
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRWR
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
----------------------------------------------------
apache的mod_reqtimeout模塊就是為了避免這個問題的出現。
【設定方法】
httpd.conf
LoadModule reqtimeout_module modules/mod_reqtimeout.so
<IfModule reqtimeout_module>
RequestReadTimeout header=5-40,MinRate=500 body=20,MinRate=500
</IfModule>
※header, body 單位:秒、Rate單位:Byte/秒。
附
相應的工具)
OWASP HTTP POST Tool
http://www.owasp.org/index.php/OWASP_HTTP_Post_Tool
Slowloris
http://ha.ckers.org/slowloris/
參考鏈接 http://httpd.apache.org/docs/2.2/en/mod/mod_reqtimeout.html