为特定目录禁用 modsecurity

为特定目录禁用 modsecurity

如何仅对特定目录禁用 modsecurity。我在 phpMyAdmin 中收到错误,这些错误是由 modsecurity 根据规则触发而导致的。我设​​置了以下文件:

# /etc/httpd/modsecurity.d/modsecurity_crs_15_customrules.conf
<LocationMatch "^/phpMA/">
    SecRuleEngine Off
</LocationMatch>

# /etc/httpd/modsecurity.d/modsecurity_crs_60.custom.conf
<LocationMatch '^/phpMA/*'>
    SecRuleRemoveById 950004
    SecRuleRemoveById 950005
    SecRuleRemoveById 950006
    SecRuleRemoveById 960010
    SecRuleRemoveById 960012
</LocationMatch>

据我所知,第一个文件应该禁用它,但它仍然会跳闸,所以我尝试将跳闸的规则 ID 添加到 60 个文件中,但它仍然会抱怨。

我在 CentOS 5.3 上运行以下软件包:

  • mod_security-2.5.0-jason.2
  • httpd-2.2.8-jason.3
  • mod-php5-apache2-zend-ce-5.2.10-65

答案1

SecRuleEngine Off 必须起作用。您是否尝试过将 SecRuleEngine 放入目录:

<Directory /var/www/site/phpMA>
SecRuleEngine Off
</Directory>

而不是 LocationMatch ?

答案2

一些服务器和网络主机,可以通过禁用 ModSecurity .htaccess,但通过这种方法您只能打开或关闭它,通常无法禁用单个规则。

因此,最好不要让整个网站处于不受保护的状态,而是将其限制在特定的 URL 上。您可以在<If>下面的语句中用正则表达式指定它们...

### DISABLE mod_security firewall
### Some rules are currently too strict and are blocking legitimate users
### We only disable it for URLs that contain the regex below
### The regex below should be placed between "m#" and "#" 
### (this syntax is required when the string contains forward slashes)
<IfModule mod_security.c>
  <If "%{REQUEST_URI} =~ m#/admin/#">
    SecFilterEngine Off
    SecFilterScanPOST Off
  </If>
</IfModule>

答案3

切勿禁用所有规则!!这可能会导致严重的安全问题!

您需要使用以下命令检查 modsecurity 的日志文件

tail -f /var/log/apache2/modsec_audit.log

并逐一排除每个规则,在 phpmyadmin 界面上重现错误。

接下来添加:

<Directory /path/to/phpmyadmin>
    <IfModule security2_module>
        SecRuleRemoveByTag "WEB_ATTACK/SQL_INJECTION"
        {And other rules you need to disable ...}
    </IfModule>
</Directory>

到 /etc/apache2/mods-enabled/modsecurity.conf

您需要删除的标签将位于日志文件中,例如有关删除特定文件夹规则的完整说明,请参阅该项目的 Github wiki

答案4

REQUEST_URI按照建议合并检查西蒙·伊斯特通过标签有针对性地删除特定规则,就像在皮埃尔·C

允许通过反向代理更新 Windows 服务自动发现的 zabbix 监控模板的示例:

<Location /zabbix/>
    ...
    <IfModule security2_module>
        <If "%{REQUEST_URI} =~ m#templates\.php#">
            SecRuleRemoveByTag "attack-generic"
            SecRuleRemoveByTag "application-multi"
            SecRuleRemoveByTag "language-multi"
            SecRuleRemoveByTag "platform-multi"
            SecRuleRemoveByTag "event-correlation"
        </If>
    </IfModule>
    ...
    { ProxyPass + ProxyPassReverse directives }
</Location>

相关内容