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, automake, libtool, pkg-config: інструменти для збірки з вихідних кодів;
  • 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/

Підключення правил у 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;

Виконайте команду для створення конфігураційного файлу:

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 Якщо ./configure не бачить PCRE або Zlib, встановіть libpcre2-dev і zlib1g-dev, потім повторіть збірку.

Офіційна документація та корисні посилання