Защита от DDOS-атак средствами nginx

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (48 оценок, среднее: 4,92 из 5)
Загрузка...
nginx-logo

Распределенная атака типа «отказ в обслуживании» (DDoS) представляет собой попытку сделать службу, обычно веб‑сайт, недоступным путем бомбардировки его таким количеством трафика с нескольких машин, что сервер, предоставляющий службу, больше не может функционировать правильно из‑за исчерпания ресурсов.

Как правило, злоумышленник пытается насытить систему таким количеством подключений и запросов, что она больше не может принимать новый трафик или становится настолько медленной, что становится практически непригодной для использования.

Использование NGINX для борьбы с DDoS-атаками

NGINX имеет ряд особенностей, которые – в сочетании с характеристиками DDoS-атаки, могут сделать их важной частью решения по смягчению DDoS-атак.

Защита архитектуры NGINX по событиям

NGINX сконструирован так, чтобы он мог быть “амортизатором при ударе” DDOS на ваш сервер.

Новые запросы из сети не отвлекают NGINX от обработки текущих запросов, что означает, что NGINX имеет возможность применять методы, описанные ниже, которые защищают ваш сайт или приложение от атаки.

Ограничение скорости запросов в nginx

Можно ограничить скорость, с которой NGINX принимает входящие запросы, значением, типичным для реальных пользователей. Например: реальный пользователь, обращающийся к странице входа, может делать запрос только каждые 2 секунды. Исходя из этого настроим NGINX так, чтобы разрешить одному IP-адресу клиента пытаться войти в систему только каждые 2 секунды (эквивалентно 30 запросам в минуту):

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;

server {
# ... 
     location /login.html {
         limit_req zone=one;
     }
}
  • limit_req_zone — Директива настраивает вызываемую зону общей памяти для хранения состояния запросов для указанного ключа, в данном случае IP-адреса клиента ( $binary_remote_addr).
  • limit_req — Директива в location блоке для /login.html ссылается на зону общей памяти.

Ограничение количества соединений

Можно ограничить число соединений, которые могут быть открыты одним IP-адресом клиента, снова значением, соответствующим реальным пользователям. Например, можно разрешить каждому IP-адресу клиента открывать не более 10 подключений к области /store вашего веб-сайта:

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {     
# ...     
    location /store/ {         
        limit_conn addr 10;        
    } 
}
  • limit_conn_zone— Директива настраивает зону общей памяти с именем addr для хранения запросов на указанный ключ, в этом случае (как и в предыдущем примере) IP-адрес клиента,$binary_remote_addr
  • limit_conn— Директива в locationблоке for /store ссылается на зону общей памяти и устанавливает максимум 10 соединений от каждого IP-адреса клиента.

Закрытие Медленных Соединений

Вы можете закрыть соединения, которые пишут данные слишком редко, что может представлять собой попытку держать соединения открытыми и таким образом, уменьшить способность сервера принимать новые соединения.

client_header_timeout           30s;
client_body_timeout             30s;

По умолчанию данный параметр равен 60 секундам

Если есть вопросы, то пишем в комментариях и не забываем проголосовать за статью.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (48 оценок, среднее: 4,92 из 5)
Загрузка...

Отправить ответ

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о
Меню

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: