ДДос атака на 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 строк! очень мощно
что посоветуете сделать?
  • Вопрос задан
  • 6771 просмотр
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
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. Что с количеством процессов как они загружены сколько потребляют памяти и чего ждут. Атака это хороший случай чтобы над тем где бутылочное горло.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Да просто баньте айпишники в фаеволе с такими запросами
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы