Как защитить сервер от DDoS-атак: базовые настройки и практические рекомендации

За первый квартал 2025 года Cloudflare отразила 20,5 млн DDoS-атак, больше, чем за весь 2024-й. Под удар попадают не только банки и маркетплейсы: небольшой интернет-магазин или сервис, где работает аренда сервера с gpu под нейросети, ложится от той же ботнет-волны, что и крупный портал. Разница лишь в том, что у портала есть штат инженеров, а у вас один админ и ночной звонок от клиента. Хорошая новость: большая часть типовых атак гасится правильной настройкой сервера и одним внешним фильтром.

Что такое DDoS-атака и почему сервер «из коробки» её не переживёт

DDoS-атака – это поток мусорных запросов с тысяч заражённых устройств, который исчерпывает ресурсы сервера или канала, и живые пользователи перестают получать ответ. Защита строится в три слоя: параметры ОС и сети, ограничения веб-сервера и внешняя фильтрация трафика. Ни один слой сам по себе не спасает, работает только связка.

Атаки делят по уровням модели OSI. Объёмные (L3/L4) забивают канал: UDP-флуд, SYN-флуд, амплификация через DNS или NTP. Прикладные (L7) бьют по логике сайта: тысячи обращений к поиску, корзине или API, каждое похоже на обычного посетителя. Первые ловятся на границе сети, вторые требуют анализа поведения.

Рекорд мощности обновляется каждый год. В мае 2025-го Cloudflare погасила атаку в 7,3 Тбит/с, а средний ботнет на базе Mirai-подобных прошивок собирает десятки тысяч IoT-камер и роутеров. Гигабитный порт против такого бесполезен, канальную часть отдают провайдеру очистки.

Зато L7-атаки обычно скромнее по трафику и упираются в CPU и память приложения. Их реально сдержать своими силами: лимитами, кешем, отсечением ботов по поведению. Ниже разберём, что крутить на сервере и когда звать внешний сервис.

Схема трёх слоёв защиты сервера от DDoS

Как настроить сетевой стек и файрвол против флуда

Начните с параметров ядра Linux в /etc/sysctl.conf: они гасят SYN-флуд и мелкий мусор ещё до того, как пакеты дойдут до приложения. Дефолты рассчитаны на честный трафик, а не на 200 тысяч полуоткрытых соединений за секунду. Минимальный набор параметров выглядит так:

  • net.ipv4.tcp_syncookies = 1: сервер отвечает на SYN без выделения памяти под соединение;
  • net.ipv4.tcp_max_syn_backlog = 4096 и tcp_synack_retries = 2: очередь больше, ретраев меньше;
  • net.ipv4.icmp_echo_ignore_broadcasts = 1 и rp_filter = 1: отсекают smurf-атаки и подделанные адреса;
  • net.core.somaxconn = 65535, чтобы очередь accept не переполнялась.

Следующий слой – файрвол. В nftables или iptables добавьте лимит новых подключений с одного IP: например, не больше 30 в секунду с burst 60, остальное в DROP. Модуль connlimit режет адреса со свыше 50 одновременных сессий. Закройте лишнее: SSH с доверенных подсетей, базы и панели только по VPN.

Пример из практики: у интернет-магазина на nginx сервер падал каждую пятницу вечером. Оказалось, конкурент запускал SYN-флуд на 40 Мбит/с, смешной по объёму. Syncookies и connlimit решили проблему за десять минут и ноль рублей.

Фрагмент конфига nginx

Что ограничить в nginx и как отсечь ботов

Веб-сервер должен сам отбрасывать лишние запросы, не передавая их в PHP, Node или Python. Nginx делает это через limit_req и limit_conn, пять строк конфига.

Зона limit_req_zone с ключом $binary_remote_addr и параметром rate=10r/s ограничит один IP десятью запросами в секунду, а burst=20 nodelay даст запас для нормальных всплесков. Для тяжёлых страниц вроде поиска или оформления заказа заведите отдельную зону строже, 2r/s. limit_conn на 20 соединений с адреса пригодится для статики. Таймауты client_body_timeout и client_header_timeout сократите до 10 секунд против Slowloris.

Кеш снимает половину нагрузки. Proxy_cache для страниц каталога на 60 секунд превращает тысячу запросов бота в один поход к бэкенду. Проверьте, что 404 тоже кешируются: боты любят стучать по несуществующим адресам.

Затем подключите fail2ban с фильтром на nginx-логи: адрес, получивший 50 ответов 429 или 503 за минуту, уходит в бан на час. Для API требуйте токен, а формы прикройте невидимой капчей вроде Turnstile. Хотите увидеть, как лимиты ведут себя под нагрузкой? Инженеры МЛ Клауд гоняют нагрузочный тест на копии сервера и отдают отчёт с узкими местами.

Когда нужна внешняя фильтрация и какой сервис выбрать

Внешний фильтр обязателен, если атака шире вашего канала или бьёт по L7 умнее статических лимитов. Сервер с портом 1 Гбит физически не отбросит 100 Гбит/с мусора.

DNS сайта указывает на сеть провайдера, трафик чистится на его узлах, и к вам приходит только полезная часть. Cloudflare даёт базовую L3/L4-защиту бесплатно, а платные тарифы добавляют WAF и bot management. Российские Qrator Labs и DDoS-Guard держат узлы внутри страны, поэтому задержка для пользователей из РФ ниже. Выбирайте по трём критериям:

  1. Ёмкость сети очистки. У серьёзных игроков это десятки терабит, больше любого рекорда.
  2. Время реакции на новую атаку. Хорошие сервисы гасят её за 3-10 секунд автоматически, без тикета в поддержку.
  3. Умение отличать бота от человека на L7: JS-челлендж, отпечаток браузера, история поведения.

Частая ошибка: сайт спрятан за защитой, а прямой IP виден через старые DNS-записи, почтовый сервер или SSL-сертификат. Атакующий находит его за минуту и бьёт мимо фильтра. После подключения смените адрес и разрешите входящие только с подсетей сервиса.

График всплеска входящих соединений на сервере

Как заметить атаку раньше клиентов и что делать в первые минуты

Мониторинг и заранее написанный план сокращают простой с часов до минут. Атаку нужно увидеть по метрикам, а не по звонку разъярённого заказчика.

Соберите в Grafana или Zabbix четыре графика: число новых подключений за секунду, доля ответов 5xx, загрузка CPU и входящий трафик на интерфейсе. Пороги алертов ставьте от нормы: если обычно 200 сессий в секунду, тревога на 1500. Netscout насчитал порядка 8 млн атак за полугодие 2024 года, средняя длилась меньше часа, так что тянуть некогда.

Пропишите порядок действий на одной странице: кто получает алерт, какая команда включает строгий режим лимитов, где лежат контакты сервиса защиты и как переключить DNS. Отрепетируйте сценарий один раз. В спокойной обстановке ошибки находятся легко, а в три ночи нет.

Отдельно позаботьтесь о запасе ресурсов. Сервер, работающий на 90% CPU в норме, ляжет от первого же всплеска, а с загрузкой 40% переживёт умеренную L7-атаку и даст время подключить фильтр. В МЛ Клауд ресурсы виртуального сервера масштабируются за минуты, поэтому на время атаки можно добавить ядер и памяти, а после вернуть прежний тариф.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *