Как избавиться от ботов:
-
передаем NS записи домена в сервис Cloudflare
-
добавляем в белый список всех полезных ботов по юзер агенту
-
убираем под капчу всё, что приходит по http протоколу ниже 2 версии, старую версию протокола используют боты, краулеры и прочая нечисть (при этом подсети, выделенные яндексу добавим в белый список)
-
ставим капчу на всё, что приходит через IPv6
UPD. 09.10 Прежде чем перейти к настройкам следует передать NS записи в Cloudflare. Для этого переходим в управление DNS-серверами домена и указываем сервера, выданные Cloudflare, у нас это:
eva.ns.cloudflare.com
everton.ns.cloudflare.com
С этого момента сайт становится недоступен, так как необходимо, чтобы NS записи разошлись по DNS серверам - это обычно занимает от 5 до 24 часов.
После репликации записей сайт или сразу заработает, или браузер выдаст ошибку Too many redirects:
В таком случае в настройках Cloudflare переходим в раздел SSL/TLS:
Заходим в Configure:
И выбираем Full:
Теперь сайт доступен и можно переходить к настройкам защиты от ботов.
Конечные настройки:
-
Включаем в Cloudflare переадресацию на https
-
Разрешаем хороших ботов
В первую очередь открываем доступ хорошим ботам. Для этого создаем правило в Custom rules (все правила далее тоже создаются в Custom rules):
Само правило имеет очень много условий:
Поэтому используем Edit expression внизу справа:
Достаточно вставить код правила в поле:
(cf.client.bot) or (http.user_agent contains "+http://yandex.com/bots") or (http.user_agent contains "Google") or (http.user_agent contains "Telegram") or (http.user_agent contains "Twitter") or (http.user_agent contains "WhatsApp") or (http.user_agent contains "msnbot") or (http.user_agent contains "Mail") or (http.user_agent contains "Applebot") or (http.user_agent contains "Screaming Frog") or (http.user_agent contains "WordPress") or (http.user_agent contains "w3.org") or (http.user_agent contains "vkShare") or (http.user_agent contains "bingbot") or (http.user_agent contains "pingdom") or (http.user_agent contains "SemrushBot") or (http.user_agent contains "Pinterestbot") or (http.user_agent contains "Chrome-Lighthouse") or (http.user_agent contains "AhrefsBot") or (http.user_agent contains "bitrix") or (http.user_agent contains "Bitrix") or (http.user_agent contains "bing") or (http.user_agent contains "facebook") or (http.user_agent contains "ChatGPT") or (http.user_agent contains "1C") or (http.user_agent contains "1c") or (http.request.uri.query contains "doing_wp_cron") or (ip.src eq 213.159.210.11) or (ip.geoip.asnum eq 13238) or (ip.geoip.asnum eq 208722) or (http.user_agent contains "SeznamBot")
И выбираем действия:
-
Далее делаем правило для прямых переходов и http ниже 2 версии (в исключениях зоны ip адресов, выделенные под Яндекс)
Код правила:
(not http.request.version in {"HTTP/2" "HTTP/3" "SPDY/3.1"} and not ip.geoip.asnum in {13238 208722}) or (http.referer eq "" and not ip.geoip.asnum in {13238 208722})
Действия:
-
Уводим под капчу трафик с ipv6 адресов:
Код правила:
(ip.src in {::/0})
Действия:
-
Последнее правило - капча для всех китайских ip. Это связано с тем, что часто именно с китайских ip приходят боты.
Код правила:
(ip.geoip.country eq "CN")
Действия:
Важно!
Порядок правил должен быть как на скрине, в сервисе работает приоритетность правил: