Совместно с камрадом
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-а.