8.2.9 Установка ModSecurity WAF для Nginx
WAF ModSecurity — это открытый веб-фаервол (Web Application Firewall), который обеспечивает защиту веб-сайтов и веб-приложений от атак и уязвимостей. ModSecurity анализирует HTTP-трафик, блокирует вредоносные запросы, предотвращает SQL-инъекции, XSS, брутфорс, сканирование и другие распространённые угрозы. Работает как модуль для Apache, Nginx и IIS, поддерживает гибкую настройку правил (включая готовые политики OWASP CRS) и ведёт подробные журналы безопасности.
Системные требования
- Виртуальный сервер или Выделенный сервер
- Ubuntu 22.04 LTS или Ubuntu 24.04 LTS
- CPU: минимум 2 ядра;
- RAM: минимум 1 ГБ;
- SSD: минимум 5 ГБ свободного места;
- Доступ root или sudo.
Безопасность
Перед началом убедитесь, что включены правила UFW или iptables, доступ по SSH ограничен ключами, а все обновления безопасности установлены.
Подготовка сервера
Сначала обновим пакеты и установим зависимости:
sudo apt update && sudo apt install -y \
git build-essential autoconf automake libtool pkg-config \
libpcre3 libpcre3-dev libpcre2-dev libxml2 libxml2-dev libyajl-dev \
zlib1g zlib1g-dev curl wget
- git — для клонирования репозиториев ModSecurity и ModSecurity-nginx;
- build-essential, autoconf и т.д. — инструменты для сборки из исходников;
- libpcre3, libpcre3-dev, libpcre2-dev — библиотеки поддержки регулярных выражений (используются ModSecurity и Nginx);
- libxml2, libxml2-dev — XML-парсер (необходим ModSecurity);
- libyajl-dev — JSON-парсер (ModSecurity);
- zlib1g, zlib1g-dev — сжатие (ModSecurity, Nginx);
- curl — утилита загрузки файлов (понадобится на следующих этапах).
Создаём рабочий каталог:
sudo mkdir -p /usr/local/src && cd /usr/local/src
Клонируем репозиторий ModSecurity, инициализируем подмодули, собираем библиотеку:
git clone --depth 1 -b v3/master https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule update --init
./build.sh
./configure
make
sudo make install
Клонируем коннектор для Nginx:
cd ..
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
Скачиваем исходники Nginx и собираем его с подключением коннектора:
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --add-module=../ModSecurity-nginx
make
sudo make install
Файлы Nginx по умолчанию будут установлены в /usr/local/nginx
. Чтобы использовать стандартные пути вроде /etc/nginx
, /var/log/nginx
и /usr/sbin/nginx
, добавьте к команде ./configure
параметр --prefix
и укажите вручную нужные директории.
Конфигурация
Создаём каталог конфигурации:
sudo mkdir -p /etc/nginx/modsec
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf
Добавляем OWASP CRS:
OWASP Core Rule Set (CRS) — это набор типовых правил для ModSecurity, которые защищают веб-приложения от наиболее распространённых атак, таких как SQL-инъекции, XSS, CSRF, Local File Inclusion (LFI), Remote File Inclusion (RFI) и др. Это проект с открытым кодом, поддерживаемый сообществом OWASP.
Устанавливаем CRS и копируем правила:
sudo apt install modsecurity-crs -y
cd /etc/nginx/modsec
sudo git clone https://github.com/coreruleset/coreruleset.git
sudo cp coreruleset/crs-setup.conf.example crs-setup.conf
sudo cp -r coreruleset/rules .
sudo cp -r /usr/share/modsecurity-crs/rules /etc/nginx/modsec/
Подключение правил в nginx.conf
В секции http файла nginx.conf
добавьте следующие директивы, например сразу после default_type application/octet-stream; или перед блоком server {:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
Создайте конфигурационный файл:
nano /etc/nginx/modsec/main.conf
И добавьте следующее содержимое:
Include /etc/nginx/modsec/modsecurity.conf
Include /etc/nginx/modsec/crs-setup.conf
Include /etc/nginx/modsec/rules/*.conf
Логирование атак
Создаём директорию для логов и задаём права:
sudo mkdir /var/log/modsecurity
sudo chown www-data: /var/log/modsecurity
В modsecurity.conf
пропишите путь к файлу аудита:
SecAuditLog /var/log/modsecurity/audit.log
Проверка конфигурации и запуск:
/usr/local/nginx/sbin/nginx -t && sudo /usr/local/nginx/sbin/nginx -s reload
Проверка WAF
Для проверки работы WAF имитируем атаку. Самый простой вариант — выполнить SQL-инъекцию через URL в браузере или с помощью curl. WAF должен обнаружить угрозу и вернуть ошибку 403 Forbidden. Попробуйте:
http://your-domain.com/?id=1' OR '1'='1
В браузере должно появиться 403 Forbidden. Проверка лога:
tail -f /var/log/modsecurity/audit.log
Типовые проблемы и их решения
Проблема | Решение |
---|---|
WAF ничего не блокирует | Убедитесь, что SecRuleEngine On и активны правила CRS |
Логи пусты | Проверьте права и свободное место на диске |
403 на своих формах | Включите DetectionOnly, найдите RuleID и добавьте исключение |
Ошибка CRS 901001 | «CRS is deployed without configuration» — отсутствует crs-setup.conf . Скопируйте его и перезапустите nginx |
Ошибка сборки Nginx | Если ./configure не видит PCRE или Zlib, установите libpcre2-dev и zlib1g-dev , затем пересоберите |
Официальная документация и полезные ссылки