avatar
Артём Шумейко
@artemshumeiko
07.04.2026 06:55
Как мы защищались от реальной DDoS-атаки

Несколько месяцев назад я выпустил пост про защиту от DoS-атак, где разбирал теорию и базовые подходы. И видимо, кто-то из читателей решил по фану устроить мне реальную проверку, потому что буквально после этого начались регулярные DDoS-атаки — примерно каждые 2-3 дня.

Если кто подзабыл разницу: DoS — это когда условно один компьютер пытается завалить твой сервис запросами, а DDoS — когда это делает целая толпа машин с разных IP-адресов, и блокировать их по одному становится тяжело. Кстати, атаки шли не с российских IP-адресов, а с иностранных, что добавляло ситуации какой-то особой пикантности.

Меня, честно говоря, очень повеселил тайминг этих атак — они приходили в первом часу ночи. В это время сайтом вообще почти никто не пользуется, на графиках в Grafana в эти часы обычно ноль активности. На скриншоте прикрепил одну из атак в 01:40 ночи :) Я до сих пор не понимаю, почему именно ночью — то ли у хакеров такой рабочий график, то ли они специально выбирали время, когда пользователей меньше. Если второе, то даже как-то благодарен им за такую заботу, что не стали ддосить днём, когда на платформе занимаются реальные пользователи.

В моменте было около 15 тысяч активных TCP-соединений — это в сотни раз больше обычной нагрузки, которую Nginx видит в нормальной жизни. Причём атака шла именно на фронтенд, а не на бэкенд-ручки.

Нам нужно было решение, которое будет автоматически блокировать подозрительные IP-адреса без ручного вмешательства, поэтому мы поставили fail2ban — это такой софт, который банит IP на уровне iptables. Если что, iptables — это встроенный в Linux инструмент для управления сетевым трафиком, по сути фаервол на уровне ядра ОС, который позволяет фильтровать пакеты по разным правилам. Вручную банить айпишники хакеров в iptables каждый раз — удовольствие сомнительное, а fail2ban работает как умная прослойка: он смотрит логи Nginx, и если какой-то IP-адрес за условные 10 минут получает несколько 503 или 429 ошибок, то сразу выписывается бан на сутки. Причём блокировка происходит на уровне ОС, т.е. запрос даже не доходит до nginx или веб-сервера, IP отсекается заранее.

Ещё в процессе мы признали косяк с кэшированием — в момент атак выяснилось, что у нас не было нормально настроено кэширование статики на уровне Nginx во фронтенде, и это было реально сильное упущение, которое мы потом пофиксили. Учитывая, что атака била именно по фронту, отсутствие кэша било особенно больно.

За последние несколько месяцев fail2ban отлично справляется — у нас не было ни одного всплеска активности и проблем с доступностью. Возможно, атаки и продолжаются, но я об этом просто не знаю, потому что до веб-сервера они уже не долетают emoji

В целом это был любопытный опыт и неплохая проверка на стрессоустойчивость — и для сервера, и для меня.

Кто как справляется с нежелательным трафиком?
👍 115
emoji 35
🔥 19
12
6
😁 4
10 66 12.6K

Обсуждение 10

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram