Nginx защита от DDoS

Очередная неприятность, на этот раз, как говорят, вызванная DNS Cache Poisoning, от наших китайских друзей:

42.85.85.33 - - [16/Jan/2015:10:05:51 +0400] "GET /announce.php?info_hash=%E2%9B%D7%FAn%3B%E8%E8A%FDP%8E%DB%00%13%9A8U3%EB&peer_id=%2DSD0100%2DsS%B8%88i%A7%BA%DCj6%91%B2&ip=42.85.85.33&port=10148&uploaded=862447643&downloaded=862447643&left=642252800&numwant=200&key=28930&compact=1 HTTP/1.0" 444 0 "-" "Bittorrent"

в купе с активностью других ботнетов заставили написать эту заметку.

При атаке на сетевую инфраструктуру nginx вряд ли поможет. Однако, в случае, когда подозрительный трафик можно определить по заголовкам запросов, а атака направлена на исчерпание ресурсов backend-сервера – nginx может помочь.

В документации nginx указан нестандартный код ответа сервера 444, с помощью которого nginx принудительно закрывает соединение, не возвращая при этом никаких данных заголовков.

В простых случаях достаточно фильтровать по заголовкам Host и User-Agent:

if ($host !~* ^(domain.ru|www.domain.ru)$ ) {
    return 444;
}
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
    return 444;
}

В случае с Host лучше использовать конструкцию:

server {
    listen       80;
    server_name  domain.ru www.domain.ru;
    # Здесь основные настройки сервера
}
server {
    listen  80 default_server;
    server_name "";
        access_log /var/log/nginx/ddos/access_log;
        return 444;
}

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

В контексте оператора if, не находящегося внутри location, нельзя использовать access_log, однако, можно использовать error_page таким образом:

location / {
    error_page 403 = @fallback;
}

location @fallback {
    access_log /var/log/nginx/ddos/access_log;
    return 444;
}

Об интересном решении, которое работает по схожему с CloudFlare принципу можно прочесть на habrhabr.ru или github.

Прочие полезные ссылки:

  • http://www.acloudtree.com/how-to-deny-hosts-using-nginx/
  • https://calomel.org/web_server_abuse_detection.html
  • https://calomel.org/nginx.html

Nginx защита от DDoS: Один комментарий

  1. При удачной настройке iptables nginx попросту блокирует атакующие адреса и они не нагружают системные ресурсы сервера, ну а для решения серьезных проблем нужная хорошая аппаратная защита. Могу порекомендовать ребят из Simplyway. отлично справляются с ддос атаками

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>