建站初期,我就使用了Apache的ModSecurity模块,来保证服务器的安全运行。它可以自定义规则,而且可以直接套用owasp-modsecurity-crs现成的规则,来保证WordPress等网站程序的安全运行。内置的规则,支持防止XSS入侵、防止SQL注入、以及一些常用的编程语言的防火墙保护规则,比如php等。
由于ModSecurity规则配置比较麻烦,这里不对其进行赘述,想使用的,可以参考:http://www.modsecurity.cn/。
本文,主要针对Wordpress,告诉你应该设置哪些白名单来防止自己被各种防火墙规则搞得无法进入网站,或者导致无法操作后台等。
本站在使用ModSecurity时,遇到过无法更新文章(古腾堡编辑器需要wp-json来更新,被防火墙规则挡住了)、一些评论无法发出、站点健康无法运行查看。
下面,先给出关于owasp-modsecurity-crs规则以及ModSecurity基础配置的目录结构如下:
./modsecurity.conf ./whitelist.conf ./owasp-modsecurity-crs ./owasp-modsecurity-crs/rules ./owasp-modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf ./owasp-modsecurity-crs/rules/REQUEST-903.9001-DRUPAL-EXCLUSION-RULES.conf ./owasp-modsecurity-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf ./owasp-modsecurity-crs/rules/REQUEST-903.9003-NEXTCLOUD-EXCLUSION-RULES.conf ./owasp-modsecurity-crs/rules/REQUEST-903.9004-DOKUWIKI-EXCLUSION-RULES.conf ./owasp-modsecurity-crs/rules/REQUEST-903.9005-CPANEL-EXCLUSION-RULES.conf ./owasp-modsecurity-crs/rules/REQUEST-903.9006-XENFORO-EXCLUSION-RULES.conf ./owasp-modsecurity-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf ./owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf ./owasp-modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf ./owasp-modsecurity-crs/rules/REQUEST-912-DOS-PROTECTION.conf ./owasp-modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf ./owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf ./owasp-modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf ./owasp-modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf ./owasp-modsecurity-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf ./owasp-modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf ./owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf ./owasp-modsecurity-crs/rules/REQUEST-934-APPLICATION-ATTACK-NODEJS.conf ./owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf ./owasp-modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf ./owasp-modsecurity-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf ./owasp-modsecurity-crs/rules/REQUEST-944-APPLICATION-ATTACK-JAVA.conf ./owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf ./owasp-modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf ./owasp-modsecurity-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf ./owasp-modsecurity-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf ./owasp-modsecurity-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf ./owasp-modsecurity-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf ./owasp-modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf ./owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf ./owasp-modsecurity-crs/crs-setup.conf
上面,只给出了所有用到的防火墙规则配置文件,未列出其他数据支持文件。
- modsecurity.conf表示ModSecurity防火墙的基本规则配置;
- whitelist.conf表示我对ModSecurity防火墙设置的白名单规则;
- owasp-modsecurity-crs/rules目录下的conf文件,表示owasp-modsecurity-crs规则
- owasp-modsecurity-crs/crs-setup.conf表示owasp-modsecurity-crs基础配置文件
这些规则,我需要在apache的配置文件httpd.conf中引入,引入代码如下:
<IfModule security2_module> Include modsecurity.d/modsecurity.conf Include modsecurity.d/whitelist.conf Include modsecurity.d/owasp-modsecurity-crs/crs-setup.conf Include modsecurity.d/owasp-modsecurity-crs/rules/*.conf </IfModule>
如此,就是一套完整的白名单加各种规则的防火墙导入,每条导入必须遵守严格的先后顺序。
<LocationMatch /wp-admin/> SecRuleEngine off </LocationMatch> <LocationMatch /wp-json/> SecRuleEngine off <LocationMatch /wp-comments-post.php> SecRuleEngine off </LocationMatch> SecRule REMOTE_ADDR "@ipMatch 47.115.48.89" "id:1000,phase:1,pass,nolog,ctl:ruleEngine=Off"
以上就是我针对Wordpress设置的ModSecurity白名单,主要包括:后台白名单、wp-json白名单、wp-comments-post.php白名单,以及给服务器ip加了一条白名单。
需要注意的是,每次改完规则都要重启apache,输入如下命令即可:
systemctl restart httpd
如果规则有语法错误,会无法启动apache。所以,一般不建议不懂得人,去使用这个ModSecurity。
一般我们判断ModSecurity生效得方法就是,访问链接:https://iymark.com/<script>,这是有效测试是否可以防止xss入侵得检测方式。只要这个生效了,那说明你得防火墙配置没问题。
最后,如果你有任何关于ModSecurity防火墙不懂得地方,可以向我提问。
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/1969.html