@SVINTUS2000

ДДос атака на nginx пакетами 1 байт?

Здравствуйте дамы и господи!
На меня совершают попытку ддоса пакетами 1 байт:
189.122.179.187 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
179.218.210.189 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
83.209.48.26 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
92.249.111.231 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
179.218.185.114 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
201.81.106.183 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
179.235.253.60 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
81.190.16.114 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
31.45.118.108 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
189.120.223.34 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-" 
66.63.169.209 - - [11/Nov/2017:16:40:00 +0100] "0xF" 400 166 "-" "-" "-"

(лог программы NGINX)
и в секунду так 500 строк! очень мощно
что посоветуете сделать?
  • Вопрос задан
  • 3125 просмотров
Решения вопроса 1
  • TheDeadOne
    @TheDeadOne
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 2
  • @younghacker
    Главная проблема в том что Ваш адрес уже засвечен и чтобы уйти под CDN нужно сразу сменить IP для бэкэнда, а старый, владельцу атономки, лучше отправить в blackhole.

    Если канал не забит (ssh нормально отвечает) пробуйте блокировать прямо в iptables регионами.
    А если nginx успевает отвечать таймаутом бэкэнда (узкое место движок сайта) - то можно блокировать в nginx.

    Первый шаг - хостер / датацентр. Спросите чем могут помочь, им по сути тоже нет резона держать хост под атакой.

    Затем вытяните из логов все запросы за время атаки отсортируйте по количеству и составьте список 100-300 самых активных и вычислите их сети автономки и регион. Если это одна страна и она не ваша целевая - блокируйте на время всю страну автономки и так далее. Для начала можете заблокировать просто около 300 конкретных хостов.
    Если сайт начнёт работать, контролируйте что происходит дальше. Атака может смещаться на другие IP.

    Если это не поможет переходите под защиту CDN с защитой от DoS.
    Сразу после этого меняйте IP так как этот уже спален.
    Кроме этого пропишите в iptables правила которые режут трафик отовсюду за исключением сетей CDN.
    Не отрежьте случайно свой ssh.

    CloudFlare имеет бесплатный вариант эккаунта. Но отмечу что нам заваливали 3 сайта которые находились на платном эккаунте. Атака велась из Вьетнама Кореи, Бразилии и Украины. Пытались блокировать по сетям прямо в CDN, но пакеты из заблокированных сетей всё равно долетали до наших серверов где мы их уже блокировали.

    По остальному смотрите что с бэкэнтом который готовит страници для nginx. Что с количеством процессов как они загружены сколько потребляют памяти и чего ждут. Атака это хороший случай чтобы над тем где бутылочное горло.
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы