У меня свежая установка CentOS 8. Я установил 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)
Установил основной набор правил из репо:
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.
Я просто пропустил включение каталога conf.d в Apache httpd.conf. Вот почему движок ModSecurity мог запуститься, но правил не читал.
Я добавил строку
IncludeOptional /etc/httpd/conf.d/*.conf
в httpd. conf, и все работает как положено.