ModSecurity 停用個別規則


ModSecurity 可以阻擋多種針對網站的攻擊, 但有些網頁應用程式會跟 ModSecurity 互相沖突, 如果為了個別幾個規則便把 ModSecurity 停用, 給 VirtualHost 設定 “SecRuleEngine Off”, 這樣十分不必要。較好的做法是找出與網頁程式互相沖突的規則, 然後在個別目錄或 VirtualHost 停用。

以下會假設已經安裝及設定好 ModSecurity, 然後找出有問題的規則, 並用 SecRuleRemoveById 把有問題的規則停用。

例如 HTTPD 的錯誤檔在 /var/log/httpd/error.log, 執行以下指令可以找出 ModSecurity 阻擋了的攻擊:

# grep ModSecurity /usr/local/apache/logs/error.log

如果知道受應享的應用程式檔名, 例如 “/admin/post.php”, 可以用 grep 把輸出結果範圍收窄:

# grep ModSecurity /usr/local/apache/logs/error.log | grep ‘/admin/post.php’

然後會輸出 ModSecurity 的過濾紀錄, 其中一個名為 id, 例如:

[id “980130”]

這個 980130 就是需要停用的規則編號, 如果想對整台主機停用 980130 規則, 可以用以下指令:

echo “SecRuleRemoveById 980130” >> /etc/httpd/conf/httpd.conf

然後重新啟動 HTTPD 便完成了。

如果只想對個別 VirtualHost 停用, 可以編輯 段落加入 SecRuleRemoveById, 例如:

修改後同樣需要重新啟動 HTTPD 才會生效.

Leave a Reply