WAF для Nginx: Захист від атак за допомогою NAXSI, ModSecurity та Lua WAF

Веб-додатки та сайти постійно стикаються з різноманітними загрозами, такими як DDoS-атаки, SQL-ін’єкції, XSS (Міжсайтовий скриптинг) та інші типи кібернападів. Щоб захистити веб-додатки від подібних загроз, використовують різні рішення безпеки, одним із яких є WAF (Web Application Firewall) — міжмережевий екран для веб-додатків. Він фільтрує та контролює HTTP-запити, забезпечуючи додатковий рівень захисту.

Одним із популярних веб-серверів та зворотних проксі-серверів є Nginx, який може інтегруватися з різними модулями WAF для захисту додатків. У цій статті ми розглянемо, що таке WAF у контексті Nginx, які модулі доступні для цього завдання, а також розберемо їх встановлення та налаштування.

Що таке WAF?

WAF (Web Application Firewall) — це рішення, яке контролює HTTP/HTTPS-трафік між веб-додатком та Інтернетом, аналізуючи його з метою виявлення та блокування небезпечних запитів. WAF діє як фільтр, перехоплюючи потенційно шкідливі запити до того, як вони досягнуть веб-додатку.

Основні функції WAF включають:

  • Захист від SQL-ін’єкцій;
  • Блокування XSS-атак;
  • Фільтрацію атак на основі сигнатур та шаблонів;
  • Обмеження доступу на основі IP-адрес;
  • Захист від ботів та DDoS-атак.

Nginx широко використовується для обробки HTTP-запитів та як зворотний проксі-сервер, що робить його зручним для інтеграції з WAF. Ключові переваги використання WAF з Nginx включають:

  1. Безпека на рівні веб-сервера. За допомогою WAF запити фільтруються на рівні Nginx, до того як вони досягнуть додатку.
  2. Висока продуктивність. Nginx відомий своєю ефективністю в обробці великої кількості запитів, а WAF-модулі можуть підтримувати цю продуктивність при фільтрації даних.
  3. Гнучкість та налаштовуваність. WAF в Nginx можна легко налаштувати під конкретні вимоги та типи загроз.

Популярні модулі WAF для Nginx

Для інтеграції з Nginx існує кілька WAF-рішень, які підтримують різні рівні захисту та мають свої особливості. Розглянемо найпопулярніші з них:

1. NAXSI (Nginx Anti XSS & SQL Injection)

NAXSI — це open-source WAF (сторінка розробки на GitHub), розроблений спеціально для захисту від XSS та SQL-ін’єкцій. Він працює за принципом білого списку та використовує набір сигнатур, щоб блокувати підозрілі запити.

Особливості NAXSI:

  • Легкий та продуктивний;
  • Захищає від поширених загроз (XSS, SQL-ін’єкції);
  • Можливість створення користувацьких правил;
  • Сумісність з Nginx та простота встановлення.

2. ModSecurity

ModSecurity — це одне з найпопулярніших та універсальних WAF-рішень. Спочатку він був розроблений для Apache, але існує версія для Nginx. ModSecurity підтримує величезну кількість сигнатур та правил, а також дозволяє створювати кастомні політики безпеки.

Особливості ModSecurity:

  • Великий набір попередньо налаштованих правил (OWASP Core Rule Set);
  • Захист від широкого спектру атак, включаючи SQL-ін’єкції, XSS, Remote File Inclusion та ін.;
  • Можливість глибокого аналізу трафіку;
  • Гнучкість у налаштуванні та можливість створення користувацьких правил.

3. OpenResty + Lua WAF

OpenResty — це платформа, заснована на Nginx, яка дозволяє запускати Lua-скрипти для розширення функціональності сервера. За допомогою Lua можна створювати кастомні WAF-рішення, такі як Lua WAF. Це надає велику гнучкість для написання власних фільтрів безпеки.

Особливості Lua WAF:

  • Висока гнучкість та можливість кастомізації;
  • Підтримка складних сценаріїв блокування трафіку;
  • Хороша продуктивність завдяки використанню OpenResty.

Встановлення NAXSI в Nginx

Крок 1: Встановлення необхідних пакетів

Перш ніж почати встановлення NAXSI, потрібно переконатися, що у вас встановлені необхідні залежності, такі як Nginx та компілятор для збірки модулів. У більшості дистрибутивів Linux це можна зробити за допомогою наступних команд:

sudo apt update 
sudo apt install nginx libnginx-mod-naxsi

Крок 2: Налаштування Nginx

Після встановлення NAXSI його необхідно інтегрувати в конфігурацію Nginx. Відкрийте файл конфігурації Nginx (зазвичай він знаходиться за шляхом /etc/nginx/nginx.conf) та додайте наступні рядки:

http {
    include /etc/nginx/naxsi_core.rules;

    server {
        listen 80;
        server_name example.com;

        location / {
            # Включаємо фільтрацію NAXSI
            include /etc/nginx/naxsi.rules;

            proxy_pass http://localhost:8080;
        }
    }
}

Крок 3: Створення правил

Файл /etc/nginx/naxsi.rules містить базові правила для захисту. Можна додати користувацькі правила для більш жорсткого фільтрування.


Встановлення та налаштування ModSecurity

Крок 1: Встановлення ModSecurity

Встановити ModSecurity для Nginx можна наступними командами (для Ubuntu):

sudo apt update
sudo apt install libmodsecurity3 libnginx-mod-security

Крок 2: Налаштування Nginx

Після встановлення необхідно активувати модуль ModSecurity в конфігурації Nginx. Відкрийте файл конфігурації вашого сайту та додайте наступні рядки:

server {
    listen 80;
    server_name example.com;

    location / {
        # Включаємо ModSecurity
        ModSecurityEnabled on;
        ModSecurityConfig /etc/nginx/modsec/modsecurity.conf;

        proxy_pass http://localhost:8080;
    }
}

Крок 3: Правила OWASP CRS

Однією з ключових переваг ModSecurity є підтримка набору правил OWASP Core Rule Set (CRS), які забезпечують захист від широкого спектру атак. Для їх активації завантажте та розпакуйте OWASP CRS:

cd /etc/nginx/modsec
git clone https://github.com/coreruleset/coreruleset.git
mv coreruleset/rules/ /etc/nginx/modsec/

І додайте в конфігурацію ModSecurity:

Include /etc/nginx/modsec/rules/*.conf

Lua WAF з OpenResty

Крок 1: Встановлення OpenResty

OpenResty встановлюється на базі Nginx та LuaJIT. Щоб встановити OpenResty, виконайте наступні кроки:

  1. Додайте репозиторій OpenResty:
sudo apt-get update
sudo apt-get install -y openresty
  1. Встановіть OpenResty:
sudo apt-get update
sudo apt-get install -y openresty

Крок 2: Налаштування Lua WAF

Після встановлення OpenResty ви можете написати свої Lua-скрипти для фільтрації трафіку. Наприклад, скрипт для блокування за IP:

local block_ips = { "192.168.1.1", "203.0.113.0" }

local client_ip = ngx.var.remote_addr
for _, ip in ipairs(block_ips) do
    if client_ip == ip then
        ngx.exit(ngx.HTTP_FORBIDDEN)
    end
end

Цей скрипт можна розмістити в конфігурації Nginx:

server {
    listen 80;
    server_name example.com;

    location / {
        access_by_lua_file /path/to/lua_waf.lua;

        proxy_pass http://localhost:8080;
    }
}

 


Висновок

Використання WAF в Nginx надає потужні можливості для захисту веб-додатків від безлічі загроз. Серед найпопулярніших рішень можна виділити NAXSI, ModSecurity та OpenResty з Lua WAF. Кожне з цих рішень має свої переваги та особливості, і вибір залежить від конкретних потреб вашого проекту.

NAXSI — легке рішення, ідеально підходить для базового захисту від XSS та SQL-ін’єкцій. ModSecurity — це потужний та гнучкий інструмент з підтримкою великої кількості правил. Lua WAF на базі OpenResty забезпечує високу гнучкість для кастомних рішень.

Незалежно від того, яке рішення ви оберете, інтеграція WAF з Nginx значно підвищить рівень безпеки вашого веб-додатку, захищаючи його від найпоширеніших атак у мережі.

Оцініть статтю