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 на запись.
Логи будут рассортированы по каталогам датам-минутам.

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

Новые правила будем устанавливать в /etc/modsecurity/coreruleset/

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

git clone https://github.com/coreruleset/coreruleset.git /etc/modsecurity/coreruleset

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

cp /etc/modsecurity/coreruleset/crs-setup.conf.example /etc/modsecurity/coreruleset/crs-setup.conf

Файлы правил с исключениями будем хранить в /etc/modsecurity/crs/, чтобы при обновлении каталога с правилами (/etc/modsecurity/coreruleset/) не приходилось сохранять и обратно перезаливать файл с исключениями.

Удаляем из каталога /etc/modsecurity/crs/ всё, кроме двух файлов:

REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

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

Изменяем файл /etc/apache2/mods-enabled/security2.conf

<ifmodule security2_module>
	SecDataDir /var/cache/modsecurity

	IncludeOptional /etc/modsecurity/*.conf
	IncludeOptional /etc/modsecurity/coreruleset/crs-setup.conf
	IncludeOptional /etc/modsecurity/crs/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
	IncludeOptional /etc/modsecurity/coreruleset/rules/*.conf
	IncludeOptional /etc/modsecurity/crs/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
</ifmodule>

Проверяем и перезагружаем правила 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/