我全新安装了 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 的日志文件中也没有错误。
答案1
我只是省略了 Apache httpd.conf 中的 conf.d 目录。这就是 ModSecurity 引擎可以启动但无法读取任何规则的原因。
我添加了行
IncludeOptional /etc/httpd/conf.d/*.conf
在 httpd.conf 中,一切都按预期运行。