Night Watch
Держите свои сайты доступными во время наплыва скраперов: мониторинг доступности, защита на базе бесплатного тарифа Cloudflare и фильтр ботов.
- Linux
- Python 3.10+
- Cloudflare Free plan
- ASGI or WSGI apps

Что он делает
Night Watch открывает каждый ваш сайт так, как это делает посетитель, каждые пять минут, и сообщает вам в тот момент, когда один из них перестаёт открываться, и в тот момент, когда он снова доступен. Когда сайт падает из-за того, что его затапливает скрапер, watch включает правило Cloudflare, которое останавливает поток на границе, и ваше приложение продолжает обслуживать людей, пока это длится.
- Каждый сайт, каждые пять минут. Каждая зона в вашем аккаунте Cloudflare, плюс любая страница, которую вы укажете, опционально с текстом, который страница должна содержать. Одно сообщение, когда сайт падает, одно — когда он возвращается, с указанием времени простоя, и напоминание, пока он остаётся недоступным. По почте, через вебхук чата или обоими способами.
- Защита на бесплатном тарифе. Три пользовательских правила WAF: пользовательский агент Chrome без заголовков, которые отправляет настоящий Chrome, получает проверку; запросы страниц от облаков скраперов получают проверку; а аварийное правило проверяет незнакомцев без cookie и без реферера во время атаки.
- Включается само. Когда сайт падает из-за перегрузки, watch включает аварийное правило и сообщает об этом в оповещении; через несколько часов после восстановления сайта он его отключает. Щит, который вы включили сами, остаётся включённым.
- Фильтр внутри вашего приложения. Один файл без зависимостей, для FastAPI, Starlette, Django, Flask или любого ASGI или WSGI приложения. Он отклоняет поддельные браузеры до запуска вашего кода и удерживает незнакомцев в рамках того, что может обслужить каждый воркер. Люди с cookie или пришедшие по ссылке его не замечают.
- Смотрите, кто вас атакует. Что файрвол Cloudflare проверял в последние минуты, по правилу, сети, стране, пользовательскому агенту и пути, читая из сырых событий, доступных на бесплатном тарифе.
- Отмена изменений встроена. Каждое изменение правил сначала сохраняет правила зоны, ваши собственные правила остаются на месте перед нашими, и одна команда возвращает сохранённый набор.
Проверено на наших собственных сайтах
- Реальная атака, один час: на одном из наших сайтов правило поддельных браузеров отправило на проверку более 10 000 запросов. Те 10 000, которые Cloudflare позволяет нам прочитать, пришли с 9 627 адресов домашнего интернета, ни один из которых не отправил более 4 запросов: ограничение частоты по адресу никогда бы не сработало.
- Каждое правило, проверено в реальном времени на бесплатном тарифе: незнакомец получил проверку, когда аварийное правило было включено, и был пропущен с cookie или ссылкой; пользовательский агент Chrome без заголовков браузера получил проверку; Googlebot прошёл. Более ранние правила зоны затем были восстановлены точно.
- Фильтр на 1 747 запроса в секунду в uvicorn: все скраперы без браузерных заголовков отклонялись, посторонние получали только то, что приложение могло отдать, а каждый постоянный посетитель, посетитель по ссылке и запрос от Googlebot обслуживался за медианные 0,20 секунды — время самой страницы.
Что внутри
Мониторинг
Сайты из вашего аккаунта Cloudflare и список, проверки, имитирующие посетителя, уведомления по почте или вебхуку, и тест, отличающий «всё лежит» от «эта машина не в сети».
Защита
Установка, статус, включение, выключение, удаление и восстановление для одной зоны или всех, с предварительным резервным копированием каждого изменения.
Фильтр
Промежуточное ПО для ASGI и WSGI, страница «одна секунда» на 2 секунды, выдающая cookie, и одна строка в логе в минуту.
Ранбук
Что делать, когда сайт тормозит или лежит, как читать всплеск трафика и что не стоит включать в панели Cloudflare.
Требования
- Linux с systemd и Python 3.10 или новее; ничего не нужно ставить через pip.
- Для защиты и просмотра событий нужны сайты на Cloudflare (любой тариф, включая Free) и API-токен.
- Машина, отличная от той, что обслуживает ваши сайты, чтобы она могла сообщить, когда та не отвечает.
Полезно знать
- Аварийное правило также проверяет человека, который вводит ваш адрес в свежем браузере, поэтому оно выключено, кроме случаев всплеска трафика.
- Проверенные боты и роботы, называющие себя, никогда не проверяются, а поисковые системы никогда не отсекаются фильтром.
- Защита использует три из пяти пользовательских правил, разрешенных на тарифе Free для одной зоны.
Вопросы
Нужен ли платный тариф Cloudflare?
Нет. Всё, что делает Night Watch, работает на тарифе Free: три правила, просмотр событий и автоматическое переключение. Платный тариф дает только дополнительные слоты правил рядом с нашими.
Будет ли блокироваться Google или поисковые краулеры ИИ?
Нет. Проверенные боты Cloudflare и каждый робот, называющий себя в user agent, проходят защиту, а фильтр никогда не отсекает поисковые системы или предпросмотр ссылок. Если вы хотите блокировать краулеры ИИ, это отдельный выбор в панели Cloudflare.
Мой сайт не на Cloudflare. Это всё равно полезно?
Мониторинг и фильтр работают везде: мониторинг открывает любой URL, а фильтр защищает любое Python-веб-приложение. Для защиты и просмотра событий нужен Cloudflare.
Чем это отличается от монитора доступности?
Монитор доступности сообщает, что сайт недоступен. Night Watch тоже сообщает об этом, а затем действует, устраняя наиболее частую причину, которую мы наблюдаем: он включает защиту на границе сети Cloudflare, и шлюз продолжает обслуживать нужных вам пользователей, пока длится наплыв трафика.
Обновлено: