Защита WordPress от DDoS: GRE‑туннель Cloudflare в 7 шагах
Введение: почему WordPress нуждается в GRE‑туннеле
WordPress‑сайты часто становятся мишенью DDoS‑атак, особенно если их IP‑адрес открыт в публичных DNS‑записях. Политика паролей WordPress помогает против атак на учетные записи, но не защищает от перегрузки сети. GRE‑туннель (Generic Routing Encapsulation) в связке с Cloudflare позволяет полностью маскировать реальный IP, направлять весь трафик через сеть Cloudflare и использовать её фильтры DDoS‑защиты. В этой статье мы подробно разберём настройку туннеля, интеграцию с WordPress и дополнительные меры фильтрации.
Что такое GRE‑туннель и как работает Cloudflare
GRE‑туннель — это протокол уровня 3, который инкапсулирует любой IP‑трафик в новый IP‑заголовок. Cloudflare предлагает профилирование производительности через свой сервис Argo Tunnel, но для полного сокрытия IP лучше использовать собственный GRE‑туннель между сервером и сетью Cloudflare.
Плюсы использования GRE‑туннеля
- Полное сокрытие реального IP‑адреса.
- Снижение латентности за счёт оптимизированных маршрутов Cloudflare.
- Возможность применения кастомных правил firewall на уровне Cloudflare.
Шаг 1: Создание GRE‑туннеля в Cloudflare
Для начала необходимо включить Cloudflare Magic Transit (доступно в планах Enterprise). После активации создаём туннель через панель управления:
- Перейдите в раздел Network > GRE Tunnels.
- Нажмите «Create Tunnel», задайте имя, например
wp‑site‑tunnel. - Сохраните Remote Endpoint IP (это IP‑адрес Cloudflare) и Shared Secret — он понадобится на сервере.
Скопируйте полученные параметры, они понадобятся в следующем разделе.
Шаг 2: Настройка сервера WordPress для работы через GRE
На сервере (Ubuntu 22.04) установим необходимые пакеты и сконфигурируем туннель.
# Установка пакетов sudo apt update && sudo apt install -y iproute2 net-tools # Создание конфигурационного файла /etc/network/interfaces.d/gre0.cfg cat > /etc/network/interfaces.d/gre0.cfg <<EOF auto gre0 iface gre0 inet static address 10.0.0.2/30 pointopoint 10.0.0.1 tunnel gre remote ${CLOUDFLARE_ENDPOINT} local $(hostname -I | awk '{print $1}') ttl 255 tunnel key 0x${GRE_SHARED_SECRET} up iptables -t mangle -A PREROUTING -i gre0 -j MARK --set-mark 1 down iptables -t mangle -D PREROUTING -i gre0 -j MARK --set-mark 1 EOF # Перезапуск сети sudo ifdown gre0 && sudo ifup gre0 В этом примере мы использовали переменные ${CLOUDFLARE_ENDPOINT} и ${GRE_SHARED_SECRET}, подставьте реальные значения из панели Cloudflare.
Обновление конфигурации WordPress
После создания туннеля необходимо изменить WP_HOME и WP_SITEURL в wp-config.php, чтобы они использовали домен, обслуживаемый Cloudflare:
define('WP_HOME', 'https://example.com'); define('WP_SITEURL', 'https://example.com'); Это гарантирует, что все запросы будут проходить через туннель.
Шаг 3: Фильтрация трафика и защита от DDoS
Cloudflare предоставляет мощные правила firewall. Добавим несколько базовых, которые помогут блокировать типичные DDoS‑векторы.
- Создайте правило IP Access Rules – разрешить только IP‑адреса Cloudflare (CIDR‑блок
173.245.48.0/20и др.). - Включите Rate Limiting для эндпоинтов
/wp-login.phpи/xmlrpc.php– 10 запросов в минуту. - Настройте Bot Fight Mode – автоматически блокирует подозрительные боты.
Для более тонкой настройки используем проверенные методы защиты платежей – в частности, отклоняем запросы без заголовка CF-Connecting-IP, который добавляется Cloudflare.
add_action('init', function() { if (empty($_SERVER['HTTP_CF_CONNECTING_IP'])) { wp_die('Access denied', 'Forbidden', array('response' => 403)); } }); Черные дыры (sinkholes) для атакующего трафика
Если обнаружен IP‑адрес, генерирующий аномальный трафик, его можно отправить в «черную дыру» – отдельный маршрут, который просто отбрасывает пакеты.
# Добавляем правило в iptables на сервере iptables -A INPUT -s 203.0.113.0/24 -j DROP Эти IP‑адреса могут быть получены из логов Cloudflare в разделе Security Events.
Шаг 4: Тестирование и мониторинг
После настройки важно убедиться, что сайт доступен только через Cloudflare и что туннель работает без потерь.
- Проверьте IP‑адрес сайта с помощью
dig +short example.com– должен возвращать IP Cloudflare. - Запустите нагрузочный тест с
ab -n 1000 -c 50 https://example.com/и наблюдайте за метриками в Cloudflare Analytics. - Используйте пошаговое руководство по ошибке 500 для отладки, если возникнут проблемы с PHP‑процессами.
При необходимости включите автоматическое уведомление в Telegram через Telegram‑бота WordPress, чтобы получать сигналы о повышенной нагрузке.
Заключение: устойчивость к DDoS с GRE‑туннелем
Настройка GRE‑туннеля в связке с Cloudflare позволяет полностью скрыть реальный IP‑адрес WordPress‑сайта, использовать продвинутые firewall‑правила и быстро реагировать на атаки. При правильной конфигурации вы получаете:
- Нулевую видимость IP‑адреса для злоумышленников.
- Автоматическую фильтрацию трафика на уровне сети.
- Гибкую систему черных дыр и rate‑лимитов.
Внедрив эти шаги, вы существенно повысите устойчивость вашего сайта к DDoS‑угрозам и сможете сосредоточиться на развитии контента, а не на постоянных битвах с ботами.
📚 Читайте также:
❓ Часто задаваемые вопросы
Что происходит, если туннель GRE прерывается?
Трафик перестаёт проходить через Cloudflare, и реальный IP‑адрес сайта становится видимым. Поэтому рекомендуется настроить мониторинг статуса туннеля и автоматический перезапуск.
Можно ли использовать GRE‑туннель без Enterprise‑плана Cloudflare?
Нет, GRE‑туннель доступен только в рамках Magic Transit, который входит в Enterprise‑подписку. Для небольших проектов используйте Argo Tunnel.
Как проверить, что запросы действительно идут через Cloudflare?
Посмотрите заголовок CF-Ray в ответе сервера или выполните curl -I https://example.com – в списке будет Server: cloudflare.
Влияет ли GRE‑туннель на SEO‑показатели сайта?
Нет, трафик всё равно обслуживается тем же доменом и сертификатом SSL, а ускоренные маршруты Cloudflare могут даже улучшить скорость загрузки, что положительно сказывается на SEO.