Содержание
Введение
В какой-то момент ты понимаешь, что сайт живёт не один. Он не просто существует в интернете, он взаимодействует с ним. И если ты не поставил у ворот охранника с бейсбольной битой, то однажды у тебя начнут стучать толпой — и не всегда с добрыми намерениями.
Именно это произошло с нами летом 2025 года. Один из сайтов внезапно начал вести себя подозрительно:
- страницы начали грузиться медленно;
- сервер отвечал с ошибками 502 и 504;
- время отклика выросло с 300мс до 2–3 секунд;
- в Google Search Console появился всплеск по «недоступности».
И всё бы ничего — но это был не всплеск активности людей. Это была полномасштабная DDoS-атака.
Этап 1: Распознаём врага по лицу
Мы сразу полезли в Cloudflare Firewall Events, выгрузив JSON-логи за последние сутки. И это было зрелище:
- десятки тысяч запросов;
- с IP из Вьетнама, Индии, Бразилии, Малайзии, Пакистана, Южной Кореи;
- одинаковые User-Agent'ы: curl, python-requests, go-http, WinHttp;
- запросы почти все — на /, /admin, .ico, /robots.txt, /wp-login.php.
Мы выгрузили CSV из Cloudflare и сделали базовую агрегацию: country, ASN, userAgent, action.
Топ-10 стран по атакующему трафику:
| Страна | Запросов |
|---|---|
| 🇻🇳 Вьетнам | 12000+ |
| 🇮🇳 Индия | 8900+ |
| 🇧🇷 Бразилия | 7000+ |
| 🇮🇩 Индонезия | 5200+ |
| 🇲🇾 Малайзия | 4100+ |
| 🇵🇭 Филиппины | 3900+ |
| 🇹🇭 Таиланд | 2800+ |
| 🇧🇩 Бангладеш | 2100+ |
| 🇵🇰 Пакистан | 1800+ |
| 🇰🇵 Северная Корея | 900+ |
Топ ASN (автономных систем):
| ASN | Провайдер |
|---|---|
| 24560 | Bharti Airtel (Индия) |
| 45899 | VNPT Corp (Вьетнам) |
| 4766 | Korea Telecom |
| 45102 | Alibaba Vietnam |
| 28329 | Oi S.A. (Бразилия) |
| 13886 | Cloud South (США) |
| 51167 | Contabo GmbH |
| 20473 | Choopa (Vultr) |
| 16276 | OVH SAS |
Этап 2: Настройка боевых фильтров
Cloudflare по умолчанию не фильтрует такие запросы. Даже curl проходит. Так что мы начали действовать:
Правило #1: Отсекание географии
Мы собрали список стран, откуда шёл мусор, и добавили их в фильтр:
ip.geoip.country in {
"VN" "IN" "PK" "BD" "ID" "PH" "MY" "TH" "BR" "CN" "KP"
}
Правило #2: Фильтрация ASN
ASN — это блоки провайдеров. Мы добавили в блок те, кто был замечен в атаках:
ip.geoip.asnum in {
24560 45899 4766 45102 28329 20473 16276 51167 13886
}
Правило #3: Защита от curl, python, go
lower(http.user_agent) contains "curl" or lower(http.user_agent) contains "python" or lower(http.user_agent) contains "go-http" or lower(http.user_agent) contains "winhttp"
Правило #4: Отсекание сканеров на / с query
http.request.uri.path eq "/" and http.request.uri.query ne ""
Всё вместе — итоговый фильтр:
(
not cf.client.bot and
(
ip.geoip.country in {
"CN" "KP" "PK" "BD" "ID" "PH" "VN" "MY" "IN" "BR" "TH"
} or
ip.geoip.asnum in {
45102 63859 136121 20473 16276 210616
14061 9009 21859 35913 49505 4766 51167 210644
24560 28329 45899 13886
} or
(
http.request.uri.path eq "/" and
http.request.uri.query ne ""
) or
(
http.request.uri.path contains ".ico"
) or
(
lower(http.user_agent) contains "curl" or
lower(http.user_agent) contains "go-http" or
lower(http.user_agent) contains "python" or
lower(http.user_agent) contains "httpclient" or
lower(http.user_agent) contains "winhttp" or
lower(http.user_agent) contains "libwww" or
lower(http.user_agent) contains "scan" or
lower(http.user_agent) contains "bot"
)
)
)
Этап 3: Результаты
После активации правил:
- 97% вредоносного трафика блокировалось на уровне Cloudflare.
- Сайт начал летать.
- В логах — только люди и поисковики.
- Число запросов на / с мусорными параметрами упало до нуля.
- Атака продолжалась — но она билась в кирпичную стену.
Параллельный сайт: zhzh.info
Мы взяли логи с другого сайта (zhzh.info) без фильтров. Там:
- curl, python — проходили;
- запросы с Вьетнама — пропускались;
- боты спокойно заходили на /.ico, /admin.php, /login.php.
Вывод: если фильтр не поставлен — Cloudflare сам по себе не помогает.
Дополнительные меры
- Включили rate limiting: 10 запросов в 10 секунд.
- Отключили HTTP/1.0 и 1.1 через firewall headers.
- Настроили geo rate limiting: с Вьетнама — не более 5 в минуту.
- Включили логирование в Telegram (bot → alert).
- Проверили все сайты на аккаунте: добавили фильтр копипастой.
Заключение
Боты никуда не денутся. Но ты можешь сделать так, чтобы они долбились об глухую стену.
Cloudflare — не магия. Это просто мощный инструмент. Настроенный правильно — это как мина с распознаванием лиц. Не настроенный — это просто оранжевая иконка.
Лицензия: CC BY-SA 4.0
Автор: Юрий Герук
Комментарии