我全新安装了 CentOS 8。我从 repo 安装了 Apache 2.4.37。然后安装最新的 ModSecurity:
dnf install mod_security -y
检查安装
dnf info mod_security
结果:
Name : mod_security
Version : 2.9.2
所需的 Apache 模块可用/已加载:
apachectl -M | grep security -> security2_module (shared)
apachectl -M | grep unique -> unique_id_module (shared)
从 repo 安装核心规则集:
dnf install mod_security_crs
它会自动将规则链接到 apache 文件夹中
/etc/httpd/modsecurity.d/activated_rules
规则已经检查/到位。
主配置文件
/etc/httpd/conf.d/mod_security.conf
包括必要的进一步配置文件,包括规则配置文件本身:
IncludeOptional /etc/httpd/modsecurity.d/crs-setup.conf
IncludeOptional /etc/httpd/modsecurity.d/activated_rules/*.conf
IncludeOptional /etc/httpd/modsecurity.d/local_rules/*.conf
(路径已经过双重检查)并激活规则引擎:
SecRuleEngine On
规则配置文件modsecurity.d/crs-setup.conf
(包含在 中mod_security.conf
,见上文)提供
SecDefaultAction "phase:1,log,auditlog,deny,status:403"
SecDefaultAction "phase:2,log,auditlog,deny,status:403"
Apache httpd.conf 调用 ModSecurity:
SecStatusEngine On
重新启动 ( apachectl restart
) 表明 ModSecurity 已成功加载:
ModSecurity: StatusEngine call successfully sent. <-- including LUA etc.
使用受操纵的 URL 进行测试,例如脚本插入:
/?q=%22%3E%3Cscript%3Ealert(1)%3C/script%3E%27
在 ModSecurity 方面没有表现出任何反应。ModSecuritie 的审计和调试日志文件中根本没有条目(调试级别设置为 3),Apache 的日志文件中没有错误。