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

0 Comments
nginx-logo

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 секундам

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

Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо!!!

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

Получаем сертификаты Let’s Encrypt для домена.
lets-encrypt

Сегодня в статье разберем установку SSL сертификата от Let's Encrypt для домена, при помощи cerbot на Ubuntu\Debian системы.

Пинг сервисы обновления wordpress 2020
wordpress-logo

Составил и отсортировал повторяющиеся пинг сервисы для блогов WordPress в 2020 году. Копируйте и пользуйтесь моим списком пинг сервисов.

Как можно отобразить дату последнего изменения поста на WordPress?
wordpress-logo

Сегодня в статье разберемся как можно отобразить дату последнего изменения поста на CMS WordPress. Есть веб-сайты которые регулярно обновляют свои Читать

Использование сервиса «Оригинальные тексты» от Яндекса
webmaster.yandex-logo

Сегодня расскажу как добавить ваш текс в «Оригинальные тексты» от Яндекс.Вебмастер. Если вы пишите только оригинальные тексты на своем сайте, Читать

5 2 голоса
Рейтинг статьи

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

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

1 Комментарий
новее
старее большинство голосов
Inline Feedbacks
Просмотреть все комментарии
Oleggio
Oleggio
05.05.2020 04:44

Человечище! Спасибо! … не только за эту статью!

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

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

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов cookie) с использованием трекеров "Google Analytics" и "Yandex.Metrics". Порядок обработки Ваших персональных данных, а также реализуемые требования к их защите, содержатся в Политике конфиденциальности.
Принять