Боролись с DDoS

Dec 25, 2011 13:19

Совместно с камрадом 2heoh боролись против небольшой ddos атаки на один из сайтов.

1. Перенесли сайт на hetzner.de
2. Поставили nginx, повесили апач за него, держит нагрузку до 40-60 рпс
3. Пошел синфлуд, открывается через раз, выставили syncookie и повысили time_wait количество сессий до 720000, стал держать 390 рпс

4. Начали долбить в / большим количеством запросов, умирал апач, кончилось место на диске, nginx выходил до 100% цпу,  -

срезали поток:

- iptables -A INPUT -p tcp --dport 80 -m limit --limit 1/s --limit-burst 3 -j DROP

- добавили лимит nginx: worker_rlimit_nofile 30000;

- включили geoip, оставили только ru и ua

Трафик упал до 2 мегабит

5. Машина висит на ksoftirqd - 30% CPU - много входящих синов на 53 порт tcp. Система просто отвечает RST в больших количествах и этим всё - поднимаем более сложный файрвол, с блокировкой всего что не надо. Вообще, конечно, этот шаг надо было сделать с самого начала.

убрали Украину из разрешенных адресов geo ip.

6. Долбят /, продолжают долбить синами, нагрузка на 53 порт пропала. Cookie в nginx помогают слабо. Появилось большое количество записей о нехваткке  worker connection-ов. Подняли до 102048. Уменьшили время fin_wait до 5.

nginx ест 30% CPU.

7. Хетцнер заблокировал сайт.  
8. Сайт переехал под зашиту спец. хостинга, специализирующегося на анти-ддосе.

Выводы: 
1. Хетцнер не очень-то подходит для хостинга сайтов под ддос-атакой. Мы еще не исчерпали все наши (довольно скудные) ресурсы виртуалки, как нас уже отключили, видимо из-за трафика (хотя он был не таким уж большим, в районе 5 мегабит всего-то). 
2. Файрвол нужно поднимать сразу, а лучше вообще, как только включается сайт. Банальная истина, но это так. 
3. Nginx в целом вещь очень классная, а его geo ip, в данном случае практически спас положение. Остальные способы помогали не так радикально. 
4. Еще одна банальность. Для нормальной работы сервера нужно перенастраивать стек tcp/ip. И это тоже вполне можно сделать заранее, не дожидаясь ddos-а.

ддос, компьютеры

Previous post Next post
Up