Как защитить сайт от DDoS-атак
Практика4 минРедакция Innovialabs
Коротко
Поставьте сайт за сервис фильтрации трафика (например, Cloudflare), скройте реальный IP сервера и разрешите доступ к нему только от этого сервиса, кешируйте всё, что можно, и заранее подготовьте план действий на случай атаки.
Короткий ответ
DDoS — это попытка перегрузить сайт огромным количеством запросов или трафика, чтобы он перестал отвечать настоящим посетителям. Один сервер такую нагрузку не выдержит, поэтому защита строится по принципу «фильтровать до того, как трафик дойдёт до вас»:
- Пропустить трафик через сервис фильтрации (Cloudflare или аналог).
- Скрыть реальный IP сервера и закрыть его для всех, кроме фильтра.
- Кешировать всё, что можно, чтобы атака ударяла в кеш, а не в базу данных.
- Иметь план действий и доступы под рукой до того, как что-то случится.
Какие бывают атаки
- L3/L4 (объёмные) — забивают канал или сетевой стек: UDP-флуд, SYN-флуд, амплификация. Против них бесполезны настройки nginx: канал уже забит.
- L7 (прикладные) — внешне похожи на обычные HTTP-запросы: тысячи обращений к поиску, корзине, странице входа. Каждый запрос дорогой для сервера, поэтому хватает относительно небольшого трафика.
Хорошая защита закрывает оба уровня.
Варианты защиты
| Вариант | Что фильтрует | Плюсы | Минусы |
|---|---|---|---|
| Cloudflare и аналогичные CDN/WAF | L3/L4 и L7 | Быстро подключается через DNS, есть бесплатный тариф, кеш и WAF в одном месте | Весь трафик идёт через стороннюю компанию; тонкие правила L7 бывают на платных тарифах |
| Специализированные scrubbing-сервисы | L3/L4 и L7 | Сильная фильтрация, поддержка во время атаки, могут защищать не только HTTP | Дороже, подключение сложнее |
| Фильтрация у хостинга/облака | Чаще L3/L4 | Ничего не нужно настраивать, часто включена по умолчанию | Против L7 обычно слабая; при большой атаке сервер могут просто отключить от сети |
| Только свой сервер (nginx, firewall) | Мелкие L7-атаки | Полный контроль | Объёмная атака забьёт канал раньше, чем сработают правила |
Для большинства сайтов и интернет-магазинов разумный старт — CDN с защитой от DDoS + базовая фильтрация у хостинга. Scrubbing-сервис имеет смысл, если сайт приносит основные деньги и простой стоит дорого, или если уже были серьёзные атаки.
Скрытие IP сервера
Защита не работает, если атакующий знает настоящий IP и бьёт напрямую в обход фильтра. Проверьте:
- Firewall сервера принимает 80/443 только с IP-диапазонов вашего сервиса защиты. Списки диапазонов провайдеры публикуют официально.
- Нет «серых» поддоменов, указывающих на тот же сервер без проксирования:
mail,ftp,dev,cpanel. - Почта не отправляется с того же IP: заголовки писем раскрывают адрес отправителя. Используйте отдельный сервис рассылок.
- Исходящие запросы (вебхуки, загрузка картинок по ссылке) тоже раскрывают IP.
- Если IP уже «светился» в DNS раньше, его можно найти в истории записей. После подключения защиты смените IP сервера.
Пример для nginx, если прямые запросы всё же доходят до сервера:
# разрешить только диапазоны сервиса защиты (пример, список берите у провайдера)
allow 173.245.48.0/20;
allow 103.21.244.0/22;
deny all;
Надёжнее делать это на уровне firewall или security group облака, чтобы пакеты отбрасывались ещё до nginx.
Кеширование как защита
Чем больше ответов отдаётся из кеша на краю сети, тем меньше запросов доходит до приложения:
- Статику (JS, CSS, изображения) кешируйте надолго.
- Страницы, одинаковые для всех (главная, статьи, каталог), кешируйте хотя бы на короткое время — даже несколько секунд кеша сильно снижают нагрузку при наплыве.
- Дорогие эндпоинты (поиск, фильтры, вход, API) защищайте лимитами запросов и проверкой на бота.
План действий при атаке
- Убедитесь, что это атака, а не сбой или рекламная кампания: посмотрите логи, графики трафика, источники запросов.
- Включите усиленный режим в сервисе защиты (у Cloudflare — Under Attack Mode): посетители получают проверку браузера.
- Добавьте правила: лимиты на атакуемые URL, блокировку по признакам запросов (User-Agent, путь, параметры), временные ограничения по странам или сетям — аккуратно, чтобы не отрезать своих клиентов.
- Напишите провайдеру защиты и хостинга, приложите время начала и примеры запросов.
- Проверьте, не идёт ли трафик в обход фильтра. Если идёт — IP раскрыт, его нужно менять.
- После атаки сохраните логи, разберите, что сработало, и закрепите правила.
Заранее подготовьте: доступы к DNS и панели защиты у двух человек, контакты поддержки, понятную страницу-заглушку.
Частые ошибки
- Подключили Cloudflare, но сервер по-прежнему открыт для всего интернета.
- Кеш выключен «на всякий случай», и каждый запрос идёт в базу.
- Доступ к DNS есть только у одного сотрудника, который в отпуске.
- Блокировка целых стран без анализа — вместе с атакой уходят клиенты.