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, 例如:
|
1 2 3 4 5 6 |
<virtualhost> ServerName www.yourdomain.com DocumentRoot /var/www/yourdomain.com SecRuleRemoveById 980130 </virtualhost> |
修改后同样需要重新启动 HTTPD 才会生效.