Loading... > 在当今的网络安全环境中,Web应用程序面临着各种威胁,包括SQL注入、跨站脚本攻击(XSS)和分布式拒绝服务(DDoS)攻击。为了保护Web应用程序免受这些威胁,可以使用Web应用程序防火墙(WAF)。ModSecurity是一个开源的WAF,它可以嵌入到Web服务器中,提供实时的请求监控、过滤和学习功能。 #### ModSecurity模块简介 > ModSecurity是一个功能强大的Web应用程序防火墙,它使用一组预定义的安全规则来保护Web应用程序。它支持多种Web服务器,包括Apache和Nginx。ModSecurity的核心规则集(CRS)是由OWASP(开放式Web应用安全项目)提供的,这是一个是致力于Web 应用程序安全的国际非营利组织,它包含了数千条用于防御常见Web攻击的规则。 https://www.cloudflare-cn.com/learning/security/threats/owasp-top-10/ https://github.com/owasp-modsecurity/ModSecurity #### 在 RHEL 系列操作系统安装 ModSecurity > 在 RHEL 操作系统中安装 ModSecurity 模块相对简单,以下是安装步骤 1、启用 EPEL 仓库 ```bash dnf install epel-release ``` 2、安装 **ModSecurity** 安装 ModSecurity 及其核心规则集 ```bash dnf install mod_security mod_security_crs ``` 3、启用 Apache 服务(如果在安装ModSecurity之前已经启动了Apache服务,请重启以应用更改) ```bash systemctl start httpd # 启动服务 systemctl restart httpd # 重启服务 ``` 4、检查模块 检查模块是否正确加载 ```bash httpd -M | grep security ```  #### 测试 ModSecurity 配置 > 测试是比配置任何设置都重要的部分,可以通过手动添加一个简单的规则进行测试 1、创建或编辑一个规则文件,例如`/etc/httpd/modsecurity.d/local_rules.conf`,并添加以下内容 ```apache SecRuleEngine On SecRule ARGS:args "@contains test" "id:123456,deny,status:403,msg:'Test Ruleset'" ``` **一定要确保 Apache 配置中启用了 ModSecurity 模块,你一般可以在 `/etc/httpd/conf.modules.d/10-mod_security.conf`找到启用模块的指令** 2、保存你的配置文件并重启Apache服务以应用更改 ```bash systemctl restart httpd ``` 3、在浏览器或使用 curl 命令行工具测试你的规则,例如 ```bash curl -l https://www.wanghaoyu.com.cn/?args=test ``` 效果如下图所示,可以看到直接返回了 403,证明规则配置正确,已被触发  查看日志 ```bash tail -f /var/log/httpd/modsec_audit.log ``` 如下图所示  如果测试失败,检查你的规则文件是否正确配置,并确保`SecRuleEngine`设置为`On`。此外,检查是否有其他规则可能与你的测试规则冲突 #### 禁用 ModSecurity 或列入白名单 > 在某些情况下,你可能需要禁用特定虚拟主机的ModSecurity 需要在虚拟主机部分中添加以下内容 ```apache <IfModule security2_module> SecRuleEngine Off </IfModule> ``` ##### 扩展内容 ###### 将特定目录或URL的 ModSecurity 列入白名单 ```apache <Directory "/var/www/html/wp-admin"> <IfModule security2_module> SecRuleEngine Off </IfModule> </Directory> ``` ###### 禁用特定的 ModSecurity 的规则 ID 这里简单说一下,例如规则 ID 666 触发误报,被拦截,用户可以在配置中利用规则 ID 禁用特定规则 ```apache <LocationMatch "/wp-admin/update.php"> <IfModule security2_module> SecRuleRemoveById 666 </IfModule> </LocationMatch> ``` 这篇文章只是一个基本快速部署使用指南,在使用之前一定要制定好相关的规则防止误报保持最佳功能, Enjoy it ~ Last modification:April 25, 2025 © Allow specification reprint Support Appreciate the author Like 如果觉得我的文章对你有用,请随意赞赏