Установка ModSecurity 3 и интеграция с Nginx на Ubuntu 22.04

ModSecurity 3 — это свободный WAF, который защищает веб-приложения от XSS, SQL-инъекций и RCE. В этой инструкции показано, как собрать ModSecurity из исходников, подключить его к Nginx и настроить OWASP CRS на Ubuntu 22.04. В конце — тесты, чеклисты и советы по безопасности.
Важно: перед началом создайте резервные копии конфигураций и убедитесь, что у вас есть доступ к консоли сервера в случае проблем.
О чём эта инструкция
- Установка зависимостей и сборка ModSecurity 3
- Сборка и подключение модуля ModSecurity-nginx к Nginx
- Настройка конфигурации Nginx и включение правила OWASP CRS
- Создание systemd-сервиса для управления Nginx
- Проверка работы и базовые тесты
Предусловия
- Сервер с Ubuntu 22.04.
- Установлен root-пароль или доступ по sudo.
Начальная подготовка пакетов
Рекомендуется сначала обновить систему и установить все нужные пакеты:
apt update -y
apt upgrade -yУстановите набор зависимостей для сборки ModSecurity и Nginx:
apt install g++ flex bison curl apache2-dev doxygen libyajl-dev ssdeep liblua5.2-dev libgeoip-dev libtool dh-autoreconf libcurl4-gnutls-dev libxml2 libpcre++-dev libxml2-dev git liblmdb-dev libpkgconf3 lmdb-doc pkgconf zlib1g-dev libssl-dev -yПосле установки зависимостей можно переходить к сборке.
Установка ModSecurity 3
ModSecurity 3 обычно не доступен в стандартных репозиториях Ubuntu в актуальной версии, поэтому его собирают из исходников.
Скачайте релиз (пример v3.0.8):
wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.8/modsecurity-v3.0.8.tar.gzРаспакуйте архив:
tar -xvzf modsecurity-v3.0.8.tar.gzСконфигурируйте и соберите модуль:
cd modsecurity-v3.0.8
./build.sh
./configureУстановите собранные артефакты:
make
make installПримечание: вывод сборки может содержать предупреждения. Если компиляция завершилась с ошибкой, проверьте установленные пакеты разработки (dev) и версии инструментов сборки.
Установка Nginx с поддержкой ModSecurity 3
Скачать коннектор ModSecurity-nginx:
cd ~
git clone https://github.com/SpiderLabs/ModSecurity-nginx.gitСкачать исходники Nginx (пример 1.20.2):
wget https://nginx.org/download/nginx-1.20.2.tar.gzРаспакуйте и подготовьтесь к конфигурации:
tar xzf nginx-1.20.2.tar.gzСоздайте системного пользователя для Nginx:
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginxСоберите Nginx с подключением динамического модуля ModSecurity:
cd nginx-1.20.2
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-compat --with-http_ssl_module --with-http_realip_module --add-dynamic-module=/root/ModSecurity-nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.logСоберите и установите модули:
make
make modules
make installСоздайте ссылку для удобного запуска:
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/Проверьте версию Nginx и параметры сборки:
nginx -VВы увидите строку конфигурации с аргументом –add-dynamic-module, подтверждающую, что модуль подключён.
Конфигурация Nginx для работы с ModSecurity
Скопируйте рекомендованный конфиг ModSecurity и таблицу Unicode:
cp ~/modsecurity-v3.0.8/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp ~/modsecurity-v3.0.8/unicode.mapping /usr/local/nginx/conf/Создайте резервную копию основного конфига Nginx и откройте его для редактирования:
cp /usr/local/nginx/conf/nginx.conf{,.bak}
nano /usr/local/nginx/conf/nginx.confЗамените/добавьте в файл следующие строки (пример минимальной конфигурации):
load_module modules/ngx_http_modsecurity_module.so;
user nginx;
worker_processes 1;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name nginx.example.com;
modsecurity on;
modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;
access_log /var/log/nginx/access_example.log;
error_log /var/log/nginx/error_example.log;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}Сохраните файл и включите режим блокировки SecRuleEngine:
sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.confВажно: перед переводом в режим On протестируйте правила в режиме DetectionOnly, чтобы снизить риск ложных срабатываний.
Установка набора правил ModSecurity (OWASP CRS)
OWASP ModSecurity CRS — это набор готовых правил для детектирования распространённых атак.
Склонируйте репозиторий CRS в директорию конфигурации:
cd
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crsПереименуйте пример конфигурации:
cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}Добавьте включение CRS в modsecurity.conf:
echo -e "Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.confПроверьте конфигурацию Nginx:
nginx -tЕсли ошибок нет, конфигурация корректна.
Создание systemd сервиса для Nginx
Создайте файл unit для управления установкой Nginx:
nano /etc/systemd/system/nginx.serviceВставьте следующий unit-файл:
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.targetПримените изменения и включите сервис:
systemctl daemon-reload
systemctl start nginx
systemctl enable nginxПроверьте статус:
systemctl status nginxПроверка работы ModSecurity
Простой тест на RCE-паттерн:
curl localhost?doc=/bin/lsОжидаемый результат — 403 Forbidden и запись в лог аудита ModSecurity.
Проверка аудита ModSecurity:
tail /var/log/modsec_audit.logПример логов покажет, какие правила сработали и почему был возвращён код 403.
Тесты и критерии приёмки
Критерии приёмки:
- Nginx запускается и обслуживает HTTP-запросы.
- ModSecurity подключён как модуль (nginx -V показывает ngx_http_modsecurity_module).
- В режиме DetectionOnly — нет блокировок; в режиме On — тестовый RCE возвращает 403.
- OWASP CRS загружен и правила включены в конфигурацию modsecurity.conf.
Минимальные тесты:
- curl localhost?doc=/bin/ls — должен давать 403 при включённом CRS.
- curl “‘ or 1=1 –“ — должен детектироваться как SQL-инъекция в логах.
- Проверить access_log и modsec_audit.log на соответствующие записи.
Режимы использования и когда ModSecurity даёт ограниченную защиту
Когда ModSecurity помогает:
- Детектирование и блокировка известных сигнатур XSS, SQLi, RCE и др.
- Быстрая защита при внедрении CRS и базовой конфигурации.
Ограничения и когда не сработает:
- Не заменяет необходимость безопасного кода и валидации на сервере.
- Тяжёлые DDoS‑атаки на сетевом уровне нужно отражать с помощью WAF на уровне сети/CDN или DDoS-решений.
- Возможны ложные срабатывания; CRS требует тюнинга под приложение.
Альтернативные подходы
- Использовать поставляемые пакеты (apt) с модулем ModSecurity в дистрибутивах, если не требуется кастомная сборка Nginx.
- Использовать коммерческие/облачные WAF (Cloudflare, AWS WAF) для упрощённого управления и защиты от DDoS.
- Применять nginx-ingress с ModSecurity в Kubernetes для контейнерных сред.
Советы по безопасности и жёсткая конфигурация
- Переведите ModSecurity в режим DetectionOnly перед включением в production и тщательной проверкой логов.
- Ограничьте права файлов и владельца конфигураций (root:root, 600 для конфиденциальных файлов).
- Настройте ротацию логов и мониторинг модулей (logrotate для /var/log/modsec_audit.log).
- Обновляйте CRS и ModSecurity регулярно, следите за CVE и релизами.
Чеклист ролей (администратор, разработчик, секьюрити)
Администратор:
- Установить зависимости и собрать ModSecurity.
- Настроить systemd unit и права доступа.
- Настроить ротацию логов и мониторинг.
Разработчик:
- Тестировать приложение на ложные срабатывания.
- Подготавливать исключения для легитимного трафика.
Команда безопасности:
- Настроить CRS и поддерживать актуальность правил.
- Выполнять аудит срабатываний и обновлять сигнатуры.
Совместимость и заметки по миграции
- Версии Nginx и ModSecurity должны быть совместимы: для ModSecurity-nginx требуется, чтобы Nginx собирался с поддержкой динамических модулей и опцией –with-compat.
- При обновлении Nginx пересобирайте модуль ModSecurity-nginx против новой версии исходников.
Краткий глоссарий
- ModSecurity — модуль Web Application Firewall (WAF).
- OWASP CRS — набор правил ModSecurity для защиты от OWASP Top 10.
- DetectionOnly — режим, в котором правила логируют, но не блокируют.
Частые ошибки и отладка
- Ошибка: модуль не загружается — проверьте путь к modules/ngx_http_modsecurity_module.so и наличие файла.
- Ошибка конфигурации nginx -t — изучите строку ошибки и верните временно предыдущую конфигурацию из nginx.conf.bak.
- Ложные срабатывания — временно переводите в DetectionOnly и добавляйте исключения строго для конкретных правил.
Заключение
Поздравляю — вы установили ModSecurity 3 и интегрировали его с Nginx на Ubuntu 22.04. Это даёт дополнительный уровень защиты веб‑приложений, но не заменяет надёжную разработку и сетевые средства защиты. Тестируйте CRS в режиме DetectionOnly, постепенно переводите в режим блокировки и отслеживайте логи.
Эксперт по безопасности: “ModSecurity — эффективный инструмент для многослойной защиты, если его комбинировать с корректной архитектурой приложения и мониторингом”.
Если хотите, могу помочь с конкретной настройкой CRS под ваше приложение или подготовить playbook автоматизации сборки и деплоя.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента