Якщо ви закрили сайт клієнта за 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 на місяць.