Cloudflare — самый популярный сервис защиты от DDoS в мире. Бесплатный план закрывает 90% потребностей малого и среднего бизнеса. В этом гайде разберём всё: от первичной настройки до продвинутых правил WAF.
Почему именно Cloudflare?
Прежде чем погружаться в настройки, давайте разберёмся, почему Cloudflare стал стандартом де-факто для защиты сайтов. Во-первых, это глобальная сеть — более 300 дата-центров по всему миру. Трафик фильтруется максимально близко к источнику атаки, что минимизирует задержки для легитимных пользователей.
Во-вторых, бесплатный план включает базовую защиту от DDoS, SSL-сертификаты, CDN для ускорения загрузки. Для большинства небольших и средних сайтов этого более чем достаточно. В-третьих, простота настройки — это DNS-based protection, не нужно менять инфраструктуру сервера. Просто меняете NS-записи, и всё работает.
Cloudflare видит около 20% всего интернет-трафика. Это даёт им уникальную возможность быстро обнаруживать новые типы атак и обновлять правила защиты. Когда появляется новая уязвимость или паттерн атаки — Cloudflare часто первым добавляет защиту.
Альтернативы
Конечно, есть альтернативы: Fastly предлагает мощный VCL для кастомизации, Akamai — enterprise-решение с максимальными возможностями, AWS CloudFront + Shield — хороший выбор если вы уже в экосистеме AWS. Но по соотношению цена/качество/простота Cloudflare вне конкуренции для большинства проектов. Подробнее о выборе провайдера — в статье как выбрать защиту от DDoS.
flowchart LR
subgraph Internet
User[Пользователь]
Attacker[Атакующий]
end
subgraph CF["Cloudflare Edge"]
DNS[DNS] --> Edge[Edge]
Edge --> WAF2[WAF]
WAF2 --> Cache[Cache]
WAF2 --> Bot[Bot Mgmt]
end
subgraph Origin["Origin"]
Server[Сервер]
end
User --> DNS
Attacker --> DNS
Cache --> |"OK"| User
Bot --> |"Block"| Attacker
Edge --> Server
Регистрация и добавление сайта
Начнём с нуля. Если у вас уже есть аккаунт Cloudflare — переходите к следующей секции.
Создание аккаунта
Перейдите на страницу регистрации Cloudflare и зарегистрируйтесь. Используйте рабочую почту — на неё будут приходить важные уведомления о безопасности и статусе домена. Обязательно включите двухфакторную аутентификацию (2FA) сразу после регистрации через приложение-аутентификатор (Google Authenticator, Authy, 1Password). Аккаунт Cloudflare — это ключ ко всей вашей инфраструктуре, его взлом может привести к полной потере контроля над сайтом.
Добавление домена
После регистрации нажмите «Add a Site» и введите ваш домен (например, example.com — без www и без https). Cloudflare автоматически просканирует текущие DNS-записи через публичные DNS-серверы. Это занимает около минуты.
Внимательно проверьте, что все записи импортировались корректно — особенно A-записи (указывают на IP сервера), AAAA (IPv6), CNAME (алиасы), MX-записи (почта) и TXT-записи (SPF, DKIM для почты). Если чего-то не хватает — добавьте вручную. Ошибка в DNS-записях может сделать сайт или почту недоступными.
Для начала выберите Free план — он включает всё необходимое для базовой защиты. Вы всегда можете обновиться позже без даунтайма. Free план включает: защиту от DDoS на L3/L4, бесплатный SSL-сертификат, CDN с кэшированием статики, базовые Page Rules (3 штуки), базовую аналитику трафика.
Cloudflare покажет два nameserver-а (например, anna.ns.cloudflare.com и bob.ns.cloudflare.com). Зайдите в панель вашего регистратора домена (Namecheap, GoDaddy, REG.RU, Beget и т.д.) и замените текущие NS-записи на указанные Cloudflare. Удалите старые NS-записи полностью. Пропагация DNS может занять до 24-48 часов, но обычно происходит за 1-4 часа.
Cloudflare отправит email когда домен будет активирован. После этого весь трафик начнёт проходить через сеть Cloudflare. Статус домена в дашборде изменится на Active. Обязательно проверьте работу сайта после активации — откройте в браузере, проверьте все основные страницы, формы, функционал.
Перейдите в SSL/TLS и проверьте режим шифрования. Рекомендуется Full (strict) если у вас есть валидный SSL-сертификат на origin-сервере. Если сертификата нет — используйте Full или Flexible, но лучше установите бесплатный сертификат через Let's Encrypt. Режим Off категорически не рекомендуется.
Базовые настройки безопасности
После активации домена настройте базовую защиту. Все эти настройки бесплатны и значительно повышают безопасность вашего сайта.
SSL/TLS настройки
Перейдите в раздел SSL/TLS → Overview и Edge Certificates:
- Encryption mode — выберите Full (strict) если на сервере установлен валидный SSL-сертификат. Это обеспечит сквозное шифрование: посетитель → Cloudflare → ваш сервер.
- Always Use HTTPS — обязательно включите. Все HTTP-запросы будут автоматически перенаправляться на HTTPS через 301-редирект.
- Minimum TLS Version — установите TLS 1.2. Версии 1.0 и 1.1 содержат известные уязвимости и не должны использоваться.
- TLS 1.3 — включите. Это самая быстрая и безопасная версия протокола, поддерживается всеми современными браузерами.
- Automatic HTTPS Rewrites — включите. Cloudflare автоматически изменит HTTP-ссылки на HTTPS в HTML-коде страниц, предотвращая mixed content warnings.
- Certificate Transparency Monitoring — включите для мониторинга выпуска сертификатов на ваш домен.
Настройки безопасности
Перейдите в раздел Security → Settings:
- Security Level — начните с Medium. Этот уровень применяет проверки к посетителям с подозрительной репутацией IP-адреса. Если много ложных срабатываний (жалобы от пользователей на CAPTCHA) — понизьте до Low. При атаке — повышайте до High или I'm Under Attack.
- Challenge Passage — оставьте 30 минут. Это время, на которое посетитель «запоминается» после успешного прохождения проверки. Слишком короткое время раздражает пользователей, слишком длинное — снижает защиту.
- Browser Integrity Check — включите. Эта функция проверяет HTTP-заголовки и блокирует запросы с заголовками, характерными для ботов и автоматизированных скриптов.
- Privacy Pass Support — включите для улучшения UX пользователей Tor и VPN.
Rate Limiting и защита от брутфорса
Rate Limiting — критически важная настройка для защиты от брутфорса паролей, парсинга контента и простых L7 DDoS-атак. Суть проста: ограничиваем количество запросов с одного IP-адреса за определённый период времени. Базовые принципы rate-limit также можно реализовать на уровне nginx.
Где настраивать
Перейдите в Security → WAF → Rate limiting rules (или Custom rules в новом интерфейсе). На Free плане доступно ограниченное количество правил, на Pro и выше — больше возможностей.
Какие endpoint'ы защищать
В первую очередь настройте лимиты для:
- Страницы логина — /login, /wp-login.php, /admin/login, /user/login. Это главная цель брутфорс-атак.
- API-endpoint'ы — особенно публичные API без аутентификации. Парсеры и боты могут генерировать огромное количество запросов.
- Страницы поиска — /search, /?s=. Тяжёлые для базы данных запросы, часто используются для L7 DDoS.
- Формы регистрации — /register, /signup. Защита от массовой регистрации ботов.
- Формы обратной связи — /contact, /feedback. Защита от спама.
Rule name: Protect Login Page
If incoming requests match...
URI Path equals "/wp-login.php"
OR URI Path equals "/login"
OR URI Path equals "/admin"
OR URI Path starts with "/wp-admin"
When rate exceeds...
5 requests per 10 seconds
Then...
Action: Block
Duration: 1 hour
Response: Default Cloudflare rate limit page
Rule name: API Rate Limit
If incoming requests match...
URI Path starts with "/api/"
AND Request Method is not "OPTIONS"
Counting expression (advanced):
Count requests per: IP Address + URI Path
When rate exceeds...
100 requests per 1 minute
Then...
Action: Block
Duration: 10 minutes
With response type: Custom JSON
Response body: {"error": "rate_limit", "retry_after": 600}
Custom Firewall Rules
Custom Rules (в старом интерфейсе — Firewall Rules) позволяют создавать сложные правила фильтрации на основе множества параметров запроса. Это мощный инструмент для точечной защиты.
Доступные поля для правил
В выражениях можно использовать:
- ip.src — IP-адрес посетителя
- ip.geoip.country — страна по IP (двухбуквенный код: RU, US, CN)
- ip.geoip.asnum — номер автономной системы (AS)
- http.request.uri.path — путь URL
- http.request.uri.query — query string
- http.user_agent — User-Agent браузера
- http.referer — заголовок Referer
- http.request.method — метод (GET, POST, etc.)
- cf.threat_score — оценка угрозы IP (0-100)
- cf.bot_management.score — оценка «человечности» (требует Enterprise)
Примеры полезных правил
# Блокировать трафик из определённых стран
# Используйте осторожно — можете заблокировать клиентов
(ip.geoip.country in {"CN" "RU" "KP" "IR"})
Action: Block
# Или наоборот — разрешить только определённые страны
(not ip.geoip.country in {"RU" "UA" "BY" "KZ"})
Action: Block
# Блокировать пустой User-Agent
(http.user_agent eq "")
Action: Block
# Блокировать известные инструменты парсинга
(http.user_agent contains "python") or
(http.user_agent contains "curl") or
(http.user_agent contains "wget") or
(http.user_agent contains "scrapy") or
(http.user_agent contains "httpclient") or
(http.user_agent contains "Go-http-client")
Action: Block
# Но! Добавьте исключения для своих скриптов по IP
(http.user_agent contains "python") and
(not ip.src in {1.2.3.4 5.6.7.8})
Action: Block
# Доступ к админке только с определённых IP
(http.request.uri.path contains "/wp-admin" or
http.request.uri.path contains "/admin" or
http.request.uri.path eq "/wp-login.php") and
(not ip.src in {1.2.3.4 5.6.7.8 10.0.0.0/8})
Action: Block
# Или мягче — показывать CAPTCHA вместо блокировки
Action: Managed Challenge
Режим Under Attack и экстренные меры
I'm Under Attack Mode — экстренный режим защиты для ситуаций, когда сайт находится под активной DDoS-атакой. При его включении все посетители должны пройти JavaScript-challenge (интерстициальную страницу проверки) перед доступом к сайту.
Как это работает
Когда посетитель заходит на сайт в режиме Under Attack:
- Cloudflare показывает страницу «Checking your browser...» на 5-10 секунд
- В это время выполняется JavaScript-проверка, которую не могут пройти простые боты
- После успешной проверки посетитель получает cookie и может пользоваться сайтом
- Cookie действует указанное в Challenge Passage время (по умолчанию 30 минут)
Когда включать Under Attack Mode
- Сайт недоступен или сильно тормозит из-за перегрузки
- В логах или аналитике видны тысячи запросов в секунду
- Обычные rate-limit правила не справляются с объёмом атаки
- Нужно срочно стабилизировать сайт, пока разбираетесь с причиной
Способы включения
Способ 1 (самый быстрый): На главной странице домена в дашборде Cloudflare есть большой переключатель «Under Attack Mode» — просто нажмите на него.
Способ 2 (через настройки): Security → Settings → Security Level → I'm Under Attack.
Способ 3 (через API): Для автоматизации можно использовать Cloudflare API. Это полезно для автоматического включения при обнаружении аномалий системой мониторинга.
# Включить Under Attack Mode
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/settings/security_level" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"value":"under_attack"}'
# Вернуть в обычный режим (Medium)
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/settings/security_level" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"value":"medium"}'
# Проверить текущий статус
curl -X GET "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/settings/security_level" \
-H "Authorization: Bearer YOUR_API_TOKEN"
# YOUR_ZONE_ID — найдите в Overview вашего домена (справа внизу)
# YOUR_API_TOKEN — создайте в My Profile → API Tokens
Кэширование и оптимизация
Правильно настроенное кэширование не только ускоряет сайт, но и служит дополнительным уровнем защиты. Когда контент отдаётся из кэша Cloudflare, запросы не доходят до вашего сервера — он не нагружается.
Уровни кэширования
- Standard — кэшируется только статика (CSS, JS, изображения, шрифты)
- Cache Everything — кэшируется вообще всё, включая HTML. Используйте осторожно!
- Bypass — кэширование отключено полностью
Рекомендации по кэшированию
Статические файлы (CSS, JS, изображения): Кэшируйте агрессивно. Edge Cache TTL = 1 месяц, Browser Cache TTL = 1 год. Используйте версионирование файлов (style.css?v=1.2.3) для инвалидации.
HTML-страницы: Для динамических сайтов (WordPress, интернет-магазины) НЕ кэшируйте HTML — иначе все пользователи увидят одинаковый контент, включая корзину и профиль. Для статических сайтов или лендингов можно кэшировать HTML с коротким TTL (1-5 минут).
API: Обычно не кэшируется, но для read-only публичных endpoint'ов можно включить кэширование с коротким TTL.
Cache Rules (новый способ)
Cloudflare переходит от Page Rules к Cache Rules. Они дают более гибкий контроль:
- Разные правила для разных URL-паттернов
- Кэширование с учётом cookie (bypass для залогиненных)
- Кэширование с учётом query string
- Разные TTL для разных типов контента
Перейдите в Caching → Configuration → Purge Cache. Можно очистить весь кэш (Purge Everything) или только конкретные URL (Custom Purge). При деплое рекомендуется очищать кэш автоматически через API. Также есть опция Purge by prefix и Purge by tag (на платных планах).
Скорее всего контент закэширован. Попробуйте: 1) Очистить кэш Cloudflare; 2) Открыть сайт в режиме инкогнито; 3) Добавить ?nocache к URL для тестирования. Если после этого изменения видны — проблема в кэшировании. Настройте правильные Cache-Control заголовки на сервере.
Можно, но с осторожностью. Используйте плагин типа WP Super Cache или W3 Total Cache на сервере, а Cloudflare настройте на Respect Origin Cache-Control. Или используйте APO (Automatic Platform Optimization) для WordPress — это платная функция Cloudflare ($5/мес), которая корректно кэширует WordPress с учётом залогиненных пользователей и динамического контента.
Мониторинг и аналитика
Cloudflare предоставляет детальную аналитику трафика и событий безопасности. Регулярный мониторинг поможет обнаружить атаку на ранней стадии и оптимизировать защиту.
Security Events
Security → Events — главный инструмент для анализа безопасности. Здесь видно:
- Все срабатывания правил (WAF, Rate Limiting, Custom Rules)
- IP-адреса заблокированных или challenged посетителей
- Страны происхождения подозрительного трафика
- User-Agent и другие заголовки
- URI, на которые были направлены запросы
- Временная шкала событий
Рекомендуем проверять Security Events минимум раз в день, а при подозрении на атаку — в реальном времени.
Traffic Analytics
Analytics → Traffic показывает общую картину:
- Количество запросов (total, cached, uncached)
- Bandwidth (total, saved — экономия благодаря CDN)
- Уникальные посетители
- Географическое распределение
- Статус-коды ответов (200, 404, 500, etc.)
- Threats stopped
Настройка уведомлений
Обязательно настройте алерты в Notifications → Create:
- DDoS Attack Alerts — уведомление при обнаружении и митигации DDoS-атаки
- WAF Alerts — при массовых срабатываниях WAF-правил
- Health Check Alerts — если origin-сервер недоступен
- Passive Origin Monitoring — при увеличении 5xx ошибок
- Certificate Expiration — за 30 дней до истечения SSL