Firewall
如何按主機名排除 ModSecurity 規則?
我正在使用OWASP 核心規則集 3.2.0設置ModSecurity 3.0.4和ModSecurity-nginx。
如果我有這樣的規則排除,在
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
:SecRule REQUEST_URI "@beginsWith /api.php" \ "id:1015,\ phase:2,\ pass,\ nolog,\ ctl:ruleRemoveById=941160"
如何將此排除限制為特定主機名?例如,
wiki.example.com
。
使用
REQUEST_HEADERS:Host
chained withREQUEST_URI
可以解決問題,但如果有多個站點需要或不需要排除,則更難維護。因此,另一種解決方案是禁用虛擬主機的 Nginx 配置規則。可以使用
modsecurity_rules
內部特定server
&禁用某些規則location
:server { server_name wiki.example.com; modsecurity on; . . . location /api.php { modsecurity_rules ' SecRuleRemoveById 941160 '; } }
Apache也是如此,因為一些 Apache 使用者稍後可能會根據其標題找到此問題。使用 Apache,您可以使用
SecRuleRemoveById
/modsecurity_rules
指令
- 內部
VirtualHost
和Location
或LocationMatch
:<VirtualHost *:443> ServerName wiki.example.com . . . <LocationMatch "^/api.php"> <IfModule security2_module> SecRuleRemoveById 941160 </IfModule> <IfModule security3_module> modsecurity_rules 'SecRuleRemoveById 941160' </IfModule> </LocationMatch> </VirtualHost>
- 或者,雖然不推薦,但即使使用
.htaccess
:<IfModule security2_module> <If "%{REQUEST_URI} =~ m#^/api.php#"> SecRuleRemoveById 941160 </If> </IfModule> <IfModule security3_module> <If "%{REQUEST_URI} =~ m#^/api.php#"> modsecurity_rules 'SecRuleRemoveById 941160' </If> </IfModule>