Что такое DDoS-атака и как её остановить
Что такое DDoS-атака?
DDoS-атака (Distributed Denial of Service, распределённый отказ в обслуживании) заваливает сервер, сайт или сеть объёмом трафика, который они не в состоянии обработать, пока законные пользователи не теряют доступ. Трафик идёт одновременно из множества источников, часто из тысяч заражённых устройств в ботнете, поэтому в названии есть слово "распределённая". Надёжная DDoS-защита сегодня стала базовым требованием для любого сервиса, который должен оставаться доступным, будь то интернет-магазин, API или игровой сервер.
Основные типы DDoS-атак
- Объёмные (volumetric): UDP, ICMP или DNS-усиление, которые забивают вашу полосу пропускания (измеряются в Гбит/с).
- Протокольные: SYN-флуд и аналоги, истощающие таблицы соединений на межсетевых экранах и балансировщиках (измеряются в пакетах в секунду).
- Прикладного уровня (Layer 7): потоки HTTP-запросов GET/POST, почти неотличимые от реальных пользователей и нацеленные на тяжёлые страницы, поиск или вход.
Как понять, что вас атакуют
Внезапные задержки, тайм-ауты или всплеск трафика без маркетинговой причины являются первыми признаками. На сервере Linux вы можете посмотреть активные соединения:
# количество соединений по IP клиента
ss -ntu state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
# наблюдать за входящим трафиком
watch -n1 'cat /proc/net/dev'
Если один или несколько адресов удерживают сотни соединений либо запросы бьют по одному URL, скорее всего, это атака, а не обычная нагрузка.
Как остановить DDoS-атаку
1. Отфильтруйте явные источники на межсетевом экране
Блокируйте или ограничивайте вредоносные адреса, пока разбираетесь:
# отбросить один вредоносный источник iptables -A INPUT -s 203.0.113.10 -j DROP # ограничить число новых соединений с одного источника на порту 443 iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 -j DROP
2. Ограничьте частоту запросов на веб-сервере
Против атак прикладного уровня nginx может ограничить число запросов от клиента:
limit_req_zone $binary_remote_addr zone=web:10m rate=10r/s;
server {
location / {
limit_req zone=web burst=20 nodelay;
}
}
3. Автоматически банить повторных нарушителей
Fail2ban читает ваши логи и блокирует адреса, превышающие порог, что помогает против медленных атак на приложение, которые остаются ниже обычных лимитов трафика.
4. Перенесите фильтрацию выше по сети
Суровая правда: крупная объёмная атака забивает ваш аплинк ещё до того, как сервер увидит хотя бы один пакет, поэтому локальные правила бессильны. Такой трафик нужно фильтровать до того, как он дойдёт до вас, на границе сети. Именно это делают выделенная DDoS-защита и очистка трафика (scrubbing): чистят трафик выше по сети, пропускают только законные запросы и сохраняют вашу полосу свободной.
Как с DDoS-защитой работает CloudHosting
Сервисы в нашем дата-центре в Риге, а также в Нидерландах и Дубае, находятся за сетевой фильтрацией DDoS с очисткой трафика на базе BGP для объёмных атак. Наша команда работает круглосуточно, следит за трафиком и настраивает защиту под ваше приложение, в рамках требований NIS2 и GDPR и с суверенитетом данных в ЕС.
Практический вывод
Небольшие атаки отражайте сами правилами межсетевого экрана, ограничением частоты в nginx и fail2ban, но не полагайтесь только на сервер. Всё крупное нужно останавливать выше по сети, поэтому ставьте настоящую DDoS-защиту перед любым сервисом, который нельзя терять, и ведите мониторинг, чтобы замечать атаку за минуты, а не часы.
Читайте дальше
Готовы начать?
Запустите за минуты или обсудите с инженером, что подходит вашему проекту.