關於Apache HTTPD 2.2.15的部分漏洞修復建議
修復Apache HTTP Server畸形Range和Range-Request選項處理遠程拒絕服務漏洞
該漏洞有如下幾種修補方法
方式1:
升級Apache httpd至2.2.21及以上版本
方式2:
可以從官網下載補丁包,重新打包編譯Apache。
方式3:
修改httpd.conf文件(一般位於/usr/local/apache2/conf/httpd.conf,具體視安裝Apache時的配置而定),相關配置參考Apache官方關於該漏洞的修復建議,(綠盟也有對官方建議的中文翻譯 ,不過翻譯並不准確,不建議參考),這里使用官方建議的修復方式2
Step1. 引入mod_rewrite和mod_headers模塊,這里去掉兩個模塊的默認的注釋即可

Step2. 在正文部分引入如下配置(配置說明:Range:標頭中超過5個范圍時即拒絕請求,並且總是丟棄Request-Range,因為是舊版的)
<IfModule rewrite_module> <IfModule mod_headers> # Reject request when more than 5 ranges in the Range: header. # CVE-2011-3192 # RewriteEngine on RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$) [NC] RewriteRule .* - [F] # We always drop Request-Range; as this is a legacy # dating back to MSIE3 and Netscape 2 and 3. # RequestHeader unset Request-Range </IfModule> </IfModule>
Step3: 重啟Apache httpd
修復目錄遍歷漏洞
通過修改conf目錄下的httpd.conf文件來禁止使用目錄索引。(參考自知乎專欄《目錄遍歷漏洞》 )
Step1: 打開httpd.conf文件(一般位於/usr/local/apache2/conf/httpd.conf,具體視安裝Apache時的配置而定)
Step2: 將Options Indexes FollowSymLinks中的Indexes刪除更改為Options FollowSymLinks,這樣web目錄下的所有目錄都不再生成索引。
Step3: 重啟Apache httpd
修復HTTP慢連接拒絕服務攻擊漏洞
建議使用mod_reqtimeout和mod_qos兩個模塊相互配合來防護。這部分通過修改httpd.conf完成(一般位於/usr/local/apache2/conf/httpd.conf,具體視安裝Apache時的配置而定)。參考自《緩慢的http拒絕服務攻擊》
Step1: mod_reqtimeout用於控制每個連接上請求發送的速率。配置如下:
Step1.1 首先去掉引入默認注釋的mod_reqtimeout

Step1.2 在代碼正文開始或者結束部分加入如下代碼。(代碼說明:請求頭部分,設置超時時間初始為20秒,並在收到客戶端發送的數據后,每接收到500字節數據就將超時時間延長1秒,但最長不超過40秒。可以防護slowloris型的慢速攻擊。請求正文部分,設置超時時間初始為10秒,並在收到客戶端發送的數據后,每接收到500字節數據就將超時時間延長1秒,但最長不超過40秒。可以防護slow message body型的慢速攻擊。需注意,對於HTTPS站點,需要把初始超時時間上調,比如調整到20秒。)
<IfModule reqtimeout_module> RequestReadTimeout header=20-40,MinRate=500 RequestReadTimeout body=10-40,minrate=500 </IfModule>
Step2: mod_qos用於控制並發連接數。配置如下:
Step2.1 首先檢查modules目錄下,是否有mod_qos.so文件,如果有,則去掉httpd.conf中對LoadModule qos_module modules/mod_qos.so行的注釋,引入該模塊,並且跳過Step2.2進入Step2.3。
Step2.2 如果modules目錄下沒有mod_qos.so文件,則需要手動引入,指令如下(Linux環境下),參考《Apache mod_qos模塊安裝與配置》 。
# 1.下載qos模塊(該指令中模塊版本為文檔撰寫時的最新版本,實際操作可以稍作修改) wget http://jaist.dl.sourceforge.net/project/mod-qos/mod_qos-11.45.tar.gz # 2.解壓 tar -zxvf mod_qos-11.45.tar.gz # 3.安裝 cd mod_qos-11.45 cd apache2/ /usr/local/apache2/bin/apxs -i -c mod_qos.c #編譯指令,將.c文件編譯成.so文件,具體文件路徑請按照系統實際路徑修改 # 4.檢查/usr/local/apache2/modules目錄下面是否多了mod-qos.so文件 # 5.回到apache2/conf修改httpd.conf,頭文件中增加如下一行 LoadModule qos_module modules/mod_qos.so 引入qos_module模塊。
Step2.3 在httpd.conf正文中添加一行,引入qos配置文件。
Include conf/extra/qos.conf
Step2.4 進入apache2/conf/extra,新建qos.conf文件,輸入以下配置信息。
# maximum number of active TCP connections is limited to 896 (limited # by the available memory, adjust the settings according to the used # hardware): MaxClients 400 # idle timeout: Timeout 20 # keep alive (for up to 85% of all connections): KeepAlive on MaxKeepAliveRequests 60 KeepAliveTimeout 3 QS_SrvMaxConnClose 85% # name of the HTTP response header which marks preferred clients (this # may be used to let the application decide which clients are "good" and # have higher privileges, e.g. authenticated users. you may also use # the QS_VipUser directive when using an Apache authentication module such # as mod_auth_basic or mod_auth_oid): QS_VipIPHeaderName mod-qos-login # enables the known client prefer mode (server allows new TCP connections # from known/good clients only when is has more than 716 open TCP connections): QS_ClientPrefer 80 # minimum request/response speed (deny slow clients blocking the server, # e.g. defending slowloris) if the server has 500 or more open connections: QS_SrvMinDataRate 120 1500 500 # and limit request line, header and body: LimitRequestLine 7168 LimitRequestFields 30 QS_LimitRequestBody 102400 # don't allow more than 30 TCP connections per client source address if # 500 connections are open to the server: QS_SrvMaxConnPerIP 30 500 # block clients violating some basic rules frequently (don't allows more than 20 # violations within 5 minutes): QS_ClientEventBlockCount 20 300 QS_SetEnvIfStatus 400 QS_Block QS_SetEnvIfStatus 401 QS_Block QS_SetEnvIfStatus 403 QS_Block QS_SetEnvIfStatus 404 QS_Block QS_SetEnvIfStatus 405 QS_Block QS_SetEnvIfStatus 406 QS_Block QS_SetEnvIfStatus 408 QS_Block QS_SetEnvIfStatus 411 QS_Block QS_SetEnvIfStatus 413 QS_Block QS_SetEnvIfStatus 414 QS_Block QS_SetEnvIfStatus 417 QS_Block QS_SetEnvIfStatus 500 QS_Block QS_SetEnvIfStatus 503 QS_Block QS_SetEnvIfStatus 505 QS_Block #QS_SetEnvIfStatus QS_SrvMinDataRate QS_Block QS_SetEnvIfStatus NullConnection QS_Block
Step3: 重啟Apache httpd
