8.2.9 Установка ModSecurity WAF для Nginx

TheHost Banner WAF

WAF ModSecurity — это открытый веб-фаервол (Web Application Firewall), который обеспечивает защиту веб-сайтов и веб-приложений от атак и уязвимостей. ModSecurity анализирует HTTP-трафик, блокирует вредоносные запросы, предотвращает SQL-инъекции, XSS, брутфорс, сканирование и другие распространённые угрозы. Работает как модуль для Apache, Nginx и IIS, поддерживает гибкую настройку правил (включая готовые политики OWASP CRS) и ведёт подробные журналы безопасности.

Системные требования

Безопасность

Перед началом убедитесь, что включены правила 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 и укажите вручную нужные директории.

configure_nginx

make_install

Конфигурация

Создаём каталог конфигурации:

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/

git_submodule_update_full

Подключение правил в nginx.conf

В секции http файла nginx.conf добавьте следующие директивы, например сразу после default_type application/octet-stream; или перед блоком server {:

/usr/local/src/nginx-1.24.0/conf/nginx.conf
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;

nginx_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 пропишите путь к файлу аудита:

/etc/nginx/modsec/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, затем пересоберите

Официальная документация и полезные ссылки