Настройка ModSecurity (WAF) для Apache и Nginx с базовыми правилами OWASP CRS
- Необходимость защиты веб-приложений от веб-уязвимостей Top-10 OWASP (SQL Injections, Cross-Site Scripting, LFI/RFI).
- Логи WAF блокируют легитимных пользователей (False Positives) с кодом ошибки HTTP 403.
- Увеличение задержки обработки запросов из-за неоптимизированных регулярных выражений в движке SecRule.
1. Установка ModSecurity и правил OWASP CRS
# Ubuntu / Debian для Apache
apt-get install -y libapache2-mod-security2 modsecurity-crs
# Для Nginx требуется libmodsecurity3 + ModSecurity-nginx connector2. Базовая конфигурация ModSecurity
Создайте боевой конфигурационный файл из шаблона:
cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.confВключите режим блокировки в /etc/modsecurity/modsecurity.conf:
# Перевод из DetectionOnly в боевой режим On
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess Off
SecAuditEngine RelevantOnly
SecAuditLog /var/log/modsec_audit.log3. Подключение набора правил OWASP CRS
В /etc/apache2/mods-enabled/security2.conf:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs/*.conf
IncludeOptional /usr/share/modsecurity-crs/rules/*.conf
</IfModule>4. Траблшутинг False Positives (Исключение ложных правил)
Найдите ID сработавшего правила в /var/log/modsec_audit.log (например, Rule 942100) и добавьте исключение в /etc/modsecurity/modsecurity_custom_rules.conf:
# Отключение конкретного правила для заданного URL
SecRuleUpdateTargetById 942100 "!REQUEST_COOKIES:session_token"
# Или полное отключение правила
SecRuleRemoveById 9421005. Проверка и перезагрузка
apachectl configtest && systemctl restart apache2 Частые вопросы (FAQ)
Как безопасно ввести ModSecurity в эксплуатацию без блокировки пользователей?
Установите директиву SecRuleEngine DetectionOnly на первые 1-2 недели. WAF будет фиксировать все совпадения с правилами OWASP в аудит-логе, не блокируя трафик (без ответа 403), что позволит выявить и отключить False Positives.
Почему рекомендуется выключать SecResponseBodyAccess?
Анализ ответов бэкенда (Response Body) создает колоссальную нагрузку на CPU и требует буферизации всего контента в памяти, что снижает пропускную способность Nginx/Apache в разы.