Linux 技术手札

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 才会生效.

Exit mobile version