Если вы закрыли сайт клиента за Cloudflare и подключили к нему монитор доступности, то рано или поздно получите оповещение о том, что сайт не работает, хотя на самом деле с ним всё в порядке. Монитор получил ответ 403 от WAF, ответ 503 со страницей Checking your browser или JavaScript-проверку, которую обычный HTTP-клиент пройти не может.
В этом руководстве показано, как пропустить монитор через WAF Cloudflare, то есть добавить его в белый список (allow-list), оставив защиту включённой для всех остальных. Примеры даны для чекера Tenium, но схема правила подойдёт любому монитору, который отправляет постоянный User-Agent и позволяет добавить собственный заголовок.
Почему Cloudflare блокирует мониторы
Bot Fight Mode, Super Bot Fight Mode и управляемые правила WAF оценивают запросы по набору признаков: отпечаток TLS, заголовки, частота запросов. Монитор по своей природе — автоматический клиент, который каждые 30 секунд обращается к одному и тому же адресу с одних и тех же IP. Именно такой трафик эти правила и должны останавливать.
Обычно происходит одно из трёх:
- Managed Challenge (HTTP 403 или 503). Монитор получает HTML-страницу с требованием выполнить JavaScript. Он этого не умеет и сообщает о сбое.
- Ограничение частоты запросов (HTTP 429). Каждый работающий регион, который проверяет раз в 30 секунд, отправляет 2 запроса в минуту. Все наши регионы (2: Амстердам и Лондон) вместе отправляют около 4 запросов в минуту на один адрес. Строгое правило rate limiting может сработать.
- Блокировка по стране или ASN. Если вы закрываете трафик не из вашего рынка, проверка из Нью-Йорка тоже попадёт под блокировку.
Ни один из этих случаев не означает, что сайт не работает. Это значит, что к монитору относятся как к посетителю, а не как к инструменту.
Неверное решение: пропускать только по User-Agent
Очевидное решение — правило WAF с действием Skip, которое проверяет User-Agent. Tenium в каждом запросе отправляет Tenium-Monitor/1.0 (+https://tenium.app/bots). Правило http.user_agent contains "Tenium-Monitor/1.0" с действием Skip пропустит проверки.
Проблема в том, что этот заголовок может отправить кто угодно. Если правило пропускает все компоненты WAF, вы отдали обход защиты каждому скрейперу, который прочитал эту статью. Одного User-Agent недостаточно.
Правильное решение: User-Agent плюс секретный заголовок
На тарифах Pro и выше Tenium позволяет добавить к любому монитору собственные заголовки запроса. Добавьте заголовок x-tenium-secret с длинным случайным значением, а затем создайте правило WAF, которое требует и User-Agent, и секрет.
В панели управления Cloudflare откройте Security → WAF → Custom rules → Create rule, переключитесь в редактор выражений и вставьте:
(http.user_agent contains "Tenium-Monitor/1.0") and (http.request.headers["x-tenium-secret"][0] eq "YOUR_SECRET")
Выберите действие Skip и отметьте компоненты, которые нужно пропускать: как минимум All managed rules и Rate limiting rules. Если ваш тариф показывает Bot Fight Mode, отметьте и его. Оставьте включённым пункт «Log matching requests», чтобы убедиться, что правило срабатывает.
Замените YOUR_SECRET тем же значением, которое вы указали в заголовке монитора. Подойдёт, например, результат команды openssl rand -hex 24. Если есть подозрение, что секрет утёк, смените его: он хранится только в двух местах — в правиле и в заголовке монитора.
Индекс [0] обязателен. Cloudflare отдаёт заголовки запроса в виде массивов, потому что один заголовок может повторяться, а eq сравнивает одну строку.
Если у вас Super Bot Fight Mode на тарифе Pro или Business
В некоторых конфигурациях Super Bot Fight Mode срабатывает раньше пользовательских правил и игнорирует правила Skip для трафика, который Cloudflare считает «definitely automated». Если после добавления правила проверки всё равно падают, откройте Security → Bots и либо установите для «Definitely automated» значение Allow, либо включите Allow verified bots. Tenium нет в списке проверенных ботов Cloudflare, поэтому поможет именно первый вариант.
Не лучше ли добавить в белый список IP-адреса?
Можно и так. Tenium публикует IP-адреса своих чекеров на странице /checker-ips, а также JSON-ленту, которую можно подключить к автоматизации. Правило по IP выглядит так:
(ip.src in {164.92.217.216})
Правила по IP надёжнее заголовка, но устаревают, когда провайдер мониторинга добавляет новый регион. Схема «заголовок + секрет» переживает смену IP, а список IP станет хорошим вторым фактором, если нужны оба. Для самой строгой настройки объедините их через and.
Как проверить, что всё работает
После сохранения правила откройте монитор в Tenium и нажмите Check now. Карточка результата показывает код ответа из каждого региона. Если во всех регионах 200, всё готово. Если один из регионов по-прежнему видит страницу с проверкой, посмотрите, не блокирует ли страну этого региона отдельное правило и не стоит ли блокировка в списке правил выше вашего Skip.
В Cloudflare раздел Security → Events с фильтром по имени правила показывает каждый подошедший запрос и выполненное действие. Вы должны видеть записи «Skip», которые приходят каждые 30 секунд с IP-адресов чекеров.
Как сохранить объективность монитора
Когда вы пропускаете монитор мимо WAF, он видит сайт таким, каким его отдаёт origin-сервер, а не таким, каким видит посетитель с проверкой. Для аптайма это именно то, что нужно. Если вы ещё хотите знать, когда сам Cloudflare проверяет настоящих посетителей, добавьте второй монитор без секретного заголовка и задайте ожидаемый код ответа, отличный от 403 и 503. Когда сработал он, а первый молчит, проблема в Cloudflare, а не в origin.
Подробности, включая аналогичные правила для Wordfence и Sucuri, есть на странице документации о Cloudflare.
Читайте также
Проверки, которые вы пропускаете, описаны в разделах о мониторинге сайта и мониторинге API. Инструмент для HTTP-заголовков покажет, что именно возвращает адрес за Cloudflare, а проверки из нескольких локаций объясняют, почему проверка в одном регионе может выглядеть как сбой. Сравниваете сервисы по тому, как они работают с WAF? Начните с раздела сравнений.
Читайте также
Связанные страницы Tenium
- IP-адреса проверок
- Мониторинг сайта
- Бесплатный инструмент для HTTP-заголовков
- Все материалы блога
- Тарифы
Начните следить за первым сайтом бесплатно
30 мониторов бесплатно, проверки из 2 регионов, без банковской карты. Проверка SSL и срока действия домена — от $7 в месяц.