О DDOS¶
Немного мыслей и практики противодействия D/DOS атакам.
Вас забанят¶
Нужно понимать, что если вы хоститесь у какого-то мелкого провайдера, скорее всего ваш сервер скинут в блекхол. Его попросту отключат от сети при обнаружении подозрительной сетевой активности, при чем автоматически. И не важно, откуда эта активности была.
Как правило этим занимаются shared-хостинги, у которых на одной ноде не только вы живете.
Если всё таки выжили¶
Нужно понимать, что настоящей DDOS защитой занимаются специальные компании, которые имеют специально настроенные сетевые фильтры и ПО, которые и помогают противодействовать угрозам. Но всё таки стоит попробовать.
Ниже будет несколько советов противодействия атакам.
Смотрим подключения¶
В первую смотрим подключения и IP адреса. Вот небольшой Bash скрипт для этого:
netstat -ntu | awk '{print $5}' | grep -vE "(Address|servers|127.0.0.1)" | cut -d: -f1 | sort | uniq -c | sort -n| sed 's/^[ \t]*//' | awk '{if ($1 > 10 ) print$2}';
Здесь стоит лимит на 10 подключений - как правило этого хватает чтобы понять, что это атакующий.
Отсеиваем¶
Как правило, отсеиваем:
- IP адреса Cloudflare и прочих CDN, если они используются. Посмотреть IP Cloudflare можно тут.
- Бекенд-сервера и просто сервера, которые активно взаимодействуют с атакованным сервером
- Свой IP и IP администраторов. Мы же не хотим остаться без доступов из-за того что кто-то подключался к MySQL?
Баним¶
По IP¶
Первое правило - забываем про iptables в плане бана по айпишникам. Причина проста - после ~10к адресов фаервол начнёт жутко тормозить. Вместо этого используем ipset.
Настраиваем IPSet и ставим правило с блокировкой на самый верх:
Так же есть смысл забанить целую страну, если это не повредит сервису - например вы работаете на рынок СНГ, а запросы идут с Африки.
Веб приложение¶
Как правило, на атакующем хосте может стоять веб-сервер (например nginx). Смотрим и анализуем логи, находим урлы на которые чаще всего стучатся или стучались боты и делаем их временный deny или 403.
Важно
При написании скрипта на парсинг логов и поиск вредителей важно парсить его последние ~100 строк. Может быть так, что при атаке лог начнет быстро расти и просто так отпарсить его не получится - это создаст дополнительную нагрузку на атакуемую систему.
Детектим SYN флуд¶
Суть такой атаки - забить канал связи, и ввести сетевой стек ОС в состояние, когда он не сможет принимать соединения. Суть такой атаки в том, чтобы посылать SYN пакет с несуществующим обратным адресом.
Задетектить SYN флуд легко, это делается через подсчёт полуоткрытых TCP соединений. В обычной ситуации их не должно быть совсем или должно быть небольшое количество.
Как обороняться¶
Увеличиваем очередь полуоткрытых TCP соединений:
Уменьшаем время удержания таких соединений, так как они забивают очередь:
Включаем syncookies:
ICMP-флуд¶
Суть в забивании канала через отправку ping запросов.
Обороняться просто - можно выключить ответ на запросы ICMP ECHO: