DataLife Engine / Защита от DDoS атак с помощью NGINX и Fail2Ban

Защита от DDoS атак с помощью NGINX и Fail2Ban


Любой ресурс, доступный в интернете, может рано или поздно подвергнуться различным сетевым атакам. В этой статье мы рассмотрим, как противостоять этим угрозам с акцентом на DDoS.

Что такое DDoS атака?

DDoS атака — это попытка перегрузить сервер или сайт, отправляя множество запросов от разных источников, чтобы сделать его недоступным для пользователей.
Защита от DDoS атак с помощью NGINX и Fail2Ban
Рис. 1 Как работает DDoS атака

Защита сайта

Для защиты мы будем использовать модуль NGINX для лимитирования запросов (ngx_http_limit_req_module) и систему обнаружения и предотвращения вторжений (IDS/IPS) Fail2Ban.

Принцип работы:

Модуль лимитирования запросов ограничивает количество запросов от пользователей и записывает события в error.log.
Fail2Ban парсит данные из лог-файла с использованием фильтров и блокирует IP-адреса, производящие подозрительные запросы.

Предполагается, что у вас уже установлен:

Итак, приступим.

Подключаем модуль лимитера запросов в NGINX

В основном конфигурационном файле /etc/nginx/nginx.conf добавьте следующее:
http {
    limit_req_zone $binary_remote_addr zone=example:100m rate=30r/m;
    ...
}

Команда limit_req_zone $binary_remote_addr zone=example:100m rate=30r/m; создает зону лимитирования, которая:

Далее необходимо применить зону для одного из location:
location = /admin {
    limit_req zone=example burst=1 nodelay;
    ...
}

nodelay гарантирует, что, как только лимит запросов будет превышен, будет возвращен код статуса HTTP 503 (Service Unavailable).

Подключаем фильтр nginx-limit-req в Fail2Ban

Создадим новый jail.local командой:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Отредактируем /etc/fail2ban/jail.local и приведем содержимое фильтра nginx-limit-req к следующему виду:
[nginx-limit-req]
enabled = true
port    = http,https
logpath = %(nginx_error_log)s

По умолчанию в Fail2Ban при срабатывании определенного условия (например, обнаружении 5 совпадений) активируется правило, которое блокирует IP-адрес злоумышленника на 10 минут. Эти значения можно изменить в конфигурации jail.local, подправив параметры maxretry (максимальное количество попыток) и bantime (время блокировки).
27-10-2024, 20:20
Вернуться назад