Ubuntu 18.04. Apache2. Установка ModSecurity (mod_security2)

Установка ModSecurity (WAF)

apt install libapache2-mod-security2

Включаем модуль

a2enmod security2

Проверяем

apachectl -M | grep security

Если ответ содержит security2_module (shared), то всё ок.

Копируем конфиг

cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Изменяем конфиг /etc/modsecurity/modsecurity.conf

SecRuleEngine On
SecResponseBodyAccess Off
SecAuditLogType concurrent
SecAuditLogStorageDir /opt/modsecurity/var/audit/

на каталог /opt/modsecurity/var/audit/ нужны права для www-data на запись.
Логи будут рассортированы по каталогам датам-минутам.

Обновление правил

Переименовываем каталог с правилами

mv /usr/share/modsecurity-crs /usr/share/modsecurity-crs.bk

Скачиваем новые через git

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/share/modsecurity-crs

Переименовываем setup скрипт

cp /usr/share/modsecurity-crs/crs-setup.conf.example /usr/share/modsecurity-crs/crs-setup.conf

Переименовываем файлы правил с исключениями

mv /usr/share/modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /usr/share/modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv /usr/share/modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example  /usr/share/modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

В этих файлах прописываются исключения правил, если оно не нужно.

Добавляем в /etc/apache2/mods-enabled/security2.conf

IncludeOptional /usr/share/modsecurity-crs/*.conf
IncludeOptional /usr/share/modsecurity-crs/rules/*.conf

Проверяем и перезагружаем правила apache2

apachectl configtest
service apache2 restart

Тестирование ModSecurity

Открываем url вида:

http://127.0.0.1/index.html?exec=/bin/bash

и видим 403 ошибку

Если какое то правило срабатывает и мешает нормальному функционированию сайта, то необходимо сработанное правило добавить в исключение в файл RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf, через SecRuleRemoveById, например:

SecRuleRemoveById 12345

после чего перезапустить сервис apache.

https://hostadvice.com/how-to/how-to-setup-modsecurity-for-apache-on-ubuntu-18-04/
https://modsecurity.org/crs/