Установка 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/