Иван Зимин на своем YouTube-канале показал, как настраивать сервис CloudFlare для борьбы с мусорным трафиком продвигаемого сайта. Ниже представлено содержание статьи с кодами для создания соответствующего правила и действием, которое необходимо выбрать для него в CloudFlare.
Содержание статьи
Что такое боты и для чего их нужно фильтровать?
В поисковой системе «Яндекс» сейчас очень активны боты, созданные для накрутки поведенческих факторов. Они работают в двух направлениях:
Поэтому необходимо фильтровать ботов различных сервисов краулинга, парсинга и анализа данных. К таким сервисам относятся сервисы SEO-анализа: Ahrefs, Rushanalytics, Semrush, Screaming Frog SEO Spider и им подобные.
Помимо того, что сервисы оказывают негативное влияние своими ботами на ранжирование сайта, они еще и парсят важные аналитические данные. В открытый доступ попадает информация о посещаемости страниц, количестве просмотров и так далее. Очевидно, что от всех этихнеприятностей сайт нужнозащитить. Одним из действенных инструментов для этого является сервис CloudFlare.
Первичные настройки CloudFlare
Первое, что необходимо сделать после регистрации сайта в сервисе — это зайти в раздел «SSL/TLS», который находится в сайд-баре левой части дашборда. В нем нужно включить автоматический редирект с протокола HTTP на HTTPS.
Появится зеленая галочка в разделе «Always Use HTTPS».
Это нужно, чтобы под фильтры не попали люди, которые заходят по протоколу HTTP. Подробно об этом будет рассказано в Правиле №2.
Настройка фильтров
Фильтры находятся в разделе «Security» той же части дашборда, где и «SSL/TLS». Из него необходимо перейти в подраздел «WAF» (Web Application Firewall) и нажать «Create firewall rule».
При создании правил важно помнить об их приоритетности. Ранее созданные правила имеют приоритет перед более поздними. Например, первым правилом открывается доступ к сайту для ботов определенного типа. Во втором правиле, которое запрещает доступ к сайту, есть пересекающийся список с этими же ботами. Поскольку второе правило создано позднее первого, то для пересекающегося типа ботов сайт будет доступен.
Правило №1
Создание и активация данного правила разрешит доступ к сайту всех белых ботов. К ним относятся боты поисковых систем Google и «Яндекс». Поэтому первое правило можно назвать «Allow white bot». Тип правила нужно выбрать «Known bots», то есть для всех типов известных белых ботов будет выполняться выбранное далее действие.
Всего доступно 5 действий для применения к конкретному правилу:
В первом правиле, чтобы пропускать на сайт белых ботов, нужно выбирать действие «Allow». Важно учитывать один нюанс: CloudFlare не распознает ботов Mail.ru, как белых, поэтому их необходимо добавить отдельно. Для этого нажимаем кнопку «Or», которая находится в правой верхней части предыдущего скриншота. В раскрывшемся ниже списке нужно выбрать «User Agent».
В следующем раскрывающемся списке, который находится правее, доступны для выбора такие параметры:
В данном случае выбираем «содержит» и указываем User Agent «Mail.RU_Bot». Таким образом, все юзерагенты, имеющие строчку «Mail.RU_Bot», будут пропускаться на сайт.
Строку кода, которая находится на сером фоне в нижней части предыдущего скриншота, можно скопировать и сохранить. Ее можно вставить в поле, которое открывается нажатием кнопки «Edit expression» при создании нового правила. Таким образом новое правило создается автоматически, без необходимости проведения всех перечисленных выше действий вручную. Это будет удобно, если на продвижении находится несколько сайтов и на всех необходимо внедрить рассматриваемые в этой статье правила.
Нажатием кнопки «Deploy firewall rule» в правой нижней части дашборда правило сохраняется и уходит в работу.
Все добавленные и активные правила будут видны в подразделе «WAF» раздела «Security».
Правило №2
Данным правилом необходимо ввести проверку вхождений на сайт с использованием IPv6 или с помощью интернет-протокола HTTP вместо HTTPS. Создаем новое правило, которое называем «SSL / IPV6» и добавляем в «Edit expression» код, указанный в содержании статьи, к Правилу №2:
(ip.src in {::/0}) or (not ssl)
Затем необходимо нажать на кнопку «Use expression builder». Она выделена на скриншоте ниже.
В результате создается правило с такими параметрами:
Далее нужно выбрать действие. В данном случае это может быть либо проверка JS, либо ввод капчи (выделено на скриншоте ниже).
Иван порекомендовал использовать капчу, поскольку вероятность того, что через IPv6 зайдет реальный человек, очень мала. Как правило это боты, поэтому капча будет более надежной защитой для противодействия им. После того, как действие выбрано, правило нужно сохранить и запустить в работу, нажав на кнопку «Deploy firewall rule».
Правило №3
Это правило установит защиту от краулеров и парсеров. Чаще всего они работают через протокол HTTP1 или HTTP1.1. Все современные браузеры давно работают на протоколе HTTP2 и выше. Поэтому после блокировки HTTP1 и HTTP1.1 вероятность того, что на сайт не попадет реальный человек крайне мала.
Это правило можно назвать «HTTP2+», затем необходимо добавить его код:
(not http.request.version in {"HTTP/2" "HTTP/3" "SPDY/3.1"}) or (http.referer eq "")
В качестве действия можно выбрать либо блокировку, либо отправку на проверку JS. Второй вариант менее радикальный. Поэтому, если есть вероятность, что целевой трафик сайта может идти с протоколов HTTP1 или HTTP1.1, можно отдать предпочтение ему.
Указанным выше кодом в это правило подтянута блокировка прямых заходов на сайт. Выделено на следующем скриншоте.
Необходимость введения такого дополнения вызвана тем, что поведенческие боты при прогреве профилей делают очень много прямых заходов на сайт. Тем самым создается чрезмерная нагрузка на него.
Выглядит это следующим образом. На графике ниже красная шкала показывает количество прямых заходов на сайт. Как правило, их количество колеблется в диапазоне от 150 до 250 посещений в месяц. В определенные периоды количество прямых визитов увеличивается до 1 200–1 400 посещений в месяц. Также в этот период могут наблюдаться просадки поискового трафика из-за перегрузки сервера. Это видно на зелёном графике.
Правило №4.1
Данное правило необходимо для блокировки таких краулеров, как MegaIndex, а также поисковых систем, нехарактерных для рынка СНГ и европейских стран, например, Baidu и прочих. Назовем его BAD CRAWLER и добавим следующий код:
(http.user_agent contains "Abonti") or (http.user_agent contains "AspiegelBot") or (http.user_agent contains "aggregator") or (http.user_agent contains "AhrefsBot") or (http.user_agent contains "Aport") or (http.user_agent contains "asterias") or (http.user_agent contains "Baiduspider") or (http.user_agent contains "BDCbot") or (http.user_agent contains "bidswitchbot") or (http.user_agent contains "Birubot") or (http.user_agent contains "BLEXBot") or (http.user_agent contains "BUbiNG") or (http.user_agent contains "BuiltBotTough") or (http.user_agent contains "Bullseye") or (http.user_agent contains "BunnySlippers") or (http.user_agent contains "Butterfly") or (http.user_agent contains "ca-crawler") or (http.user_agent contains "CamontSpider") or (http.user_agent contains "CCBot") or (http.user_agent contains "Cegbfeieh") or (http.user_agent contains "CheeseBot") or (http.user_agent contains "CherryPicker") or (http.user_agent contains "coccoc") or (http.user_agent contains "CopyRightCheck") or (http.user_agent contains "cosmos") or (http.user_agent contains "crawler") or (http.user_agent contains "Crescent") or (http.user_agent contains "CyotekWebCopy/1.7") or (http.user_agent contains "CyotekHTTP/2.0") or (http.user_agent contains "DataForSeoBot") or (http.user_agent contains "DeuSu") or (http.user_agent contains "discobot") or (http.user_agent contains "DittoSpyder") or (http.user_agent contains "DnyzBot") or (http.user_agent contains "DomainCrawler") or (http.user_agent contains "DotBot") or (http.user_agent contains "Download Ninja") or (http.user_agent contains "EasouSpider") or (http.user_agent contains "EmailCollector") or (http.user_agent contains "EmailSiphon") or (http.user_agent contains "EmailWolf") or (http.user_agent contains "EroCrawler") or (http.user_agent contains "Exabot") or (http.user_agent contains "ExtractorPro") or (http.user_agent contains "Ezooms") or (http.user_agent contains "FairShare") or (http.user_agent contains "Fasterfox") or (http.user_agent contains "FeedBooster") or (http.user_agent contains "Foobot") or (http.user_agent contains "Genieo") or (http.user_agent contains "GetIntent Crawler") or (http.user_agent contains "Gigabot") or (http.user_agent contains "gold crawler") or (http.user_agent contains "GrapeshotCrawler") or (http.user_agent contains "grub-client") or (http.user_agent contains "Harvest") or (http.user_agent contains "hloader") or (http.user_agent contains "httplib") or (http.user_agent contains "HTTrack") or (http.user_agent contains "humanlinks") or (http.user_agent contains "HybridBot") or (http.user_agent contains "ia_archiver") or (http.user_agent contains "ieautodiscovery") or (http.user_agent contains "Incutio") or (http.user_agent contains "InfoNaviRobot") or (http.user_agent contains "InternetSeer") or (http.user_agent contains "IstellaBot") or (http.user_agent contains "Java") or (http.user_agent contains "Java/1.") or (http.user_agent contains "JamesBOT") or (http.user_agent contains "JennyBot") or (http.user_agent contains "JS-Kit") or (http.user_agent contains "k2spider") or (http.user_agent contains "Kenjin Spider") or (http.user_agent contains "Keyword Density/0.9") or (http.user_agent contains "kmSearchBot") or (http.user_agent contains "larbin") or (http.user_agent contains "LexiBot") or (http.user_agent contains "libWeb") or (http.user_agent contains "libwww") or (http.user_agent contains "Linguee") or (http.user_agent contains "LinkExchanger") or (http.user_agent contains "LinkextractorPro") or (http.user_agent contains "linko") or (http.user_agent contains "LinkScan/8.1a Unix") or (http.user_agent contains "LinkWalker") or (http.user_agent contains "LinkpadBot") or (http.user_agent contains "lmspider") or (http.user_agent contains "LNSpiderguy") or (http.user_agent contains "ltx71") or (http.user_agent contains "lwp-trivial") or (http.user_agent contains "lwp-trivial") or (http.user_agent contains "magpie") or (http.user_agent contains "Mata Hari") or (http.user_agent contains "MaxPointCrawler") or (http.user_agent contains "MegaIndex")
В результате создается правило с огромным количеством юзерагентов, которые будут подпадать под действие блокировки.
Правило №4.2
Количество правил внутри одного правила ограничено, поэтому все юзерагенты для блокировки краулеров не помещаются туда. В связи с этим необходимо создать еще одно правило под названием BAD CRAWLER-2 и поместить туда следующий код:
(http.user_agent contains "memoryBot") or (http.user_agent contains "Microsoft URL Control") or (http.user_agent contains "MIIxpc") or (http.user_agent contains "Mippin") or (http.user_agent contains "Missigua Locator") or (http.user_agent contains "Mister PiX") or (http.user_agent contains "MJ12bot") or (http.user_agent contains "MLBot") or (http.user_agent contains "moget") or (http.user_agent contains "MSIECrawler") or (http.user_agent contains "msnbot") or (http.user_agent contains "msnbot-media") or (http.user_agent contains "NetAnts") or (http.user_agent contains "NICErsPRO") or (http.user_agent contains "Niki-Bot") or (http.user_agent contains "NjuiceBot") or (http.user_agent contains "NPBot") or (http.user_agent contains "Nutch") or (http.user_agent contains "Offline Explorer") or (http.user_agent contains "OLEcrawler") or (http.user_agent contains "Openfind") or (http.user_agent contains "panscient.com") or (http.user_agent contains "PostRank") or (http.user_agent contains "ProPowerBot/2.14") or (http.user_agent contains "PetalBot") or (http.user_agent contains "ProWebWalker") or (http.user_agent contains "ptd-crawler") or (http.user_agent contains "Purebot") or (http.user_agent contains "PycURL") or (http.user_agent contains "python-rcontainsuests") or (http.user_agent contains "Python-urllib") or (http.user_agent contains "QueryN Metasearch") or (http.user_agent contains "RepoMonkey") or (http.user_agent contains "Riddler") or (http.user_agent contains "RMA") or (http.user_agent contains "Scrapy") or (http.user_agent contains "SemrushBot") or (http.user_agent contains "serf") or (http.user_agent contains "SeznamBot") or (http.user_agent contains "SISTRIX") or (http.user_agent contains "SiteBot") or (http.user_agent contains "sitecheck.Internetseer.com") or (http.user_agent contains "SiteSnagger") or (http.user_agent contains "Serpstat") or (http.user_agent contains "Slurp") or (http.user_agent contains "SnapPreviewBot") or (http.user_agent contains "Sogou") or (http.user_agent contains "Soup") or (http.user_agent contains "SpankBot") or (http.user_agent contains "spanner") or (http.user_agent contains "spbot") or (http.user_agent contains "Spinn3r") or (http.user_agent contains "SpyFu") or (http.user_agent contains "suggybot") or (http.user_agent contains "SurveyBot") or (http.user_agent contains "suzuran") or (http.user_agent contains "SWeb") or (http.user_agent contains "Szukacz/1.4") or (http.user_agent contains "Teleport") or (http.user_agent contains "Telesoft") or (http.user_agent contains "The Intraformant") or (http.user_agent contains "TheNomad") or (http.user_agent contains "TightTwatBot") or (http.user_agent contains "Titan") or (http.user_agent contains "toCrawl/UrlDispatcher") or (http.user_agent contains "True_Robot") or (http.user_agent contains "ttCrawler") or (http.user_agent contains "turingos") or (http.user_agent contains "TurnitinBot") or (http.user_agent contains "UbiCrawler") or (http.user_agent contains "UnisterBot") or (http.user_agent contains "Unknown") or (http.user_agent contains "uptime files") or (http.user_agent contains "URLy Warning") or (http.user_agent contains "User-Agent") or (http.user_agent contains "VCI") or (http.user_agent contains "Vedma") or (http.user_agent contains "Voyager") or (http.user_agent contains "WBSearchBot") or (http.user_agent contains "Web Downloader/6.9") or (http.user_agent contains "Web Image Collector") or (http.user_agent contains "WebAuto") or (http.user_agent contains "WebBandit") or (http.user_agent contains "WebCopier") or (http.user_agent contains "WebEnhancer") or (http.user_agent contains "WebmasterWorldForumBot") or (http.user_agent contains "WebReaper") or (http.user_agent contains "WebSauger") or (http.user_agent contains "Website Quester") or (http.user_agent contains "Webster Pro") or (http.user_agent contains "WebStripper") or (http.user_agent contains "WebZip") or (http.user_agent contains "Wotbox") or (http.user_agent contains "wsr-agent") or (http.user_agent contains "WWW-Collector-E") or (http.user_agent contains "Yeti")
Правило №5
Последнее правило опциональное. Им можно заблокировать пользователей из нецелевых стран, например, если сайт продвигает локальный бизнес — пиццерию, парикмахерскую и так далее. Также с помощью этого правиламожно заблокировать отдельные страны и регионы. Например, если трафик сайту нужен со всего мира, но с 1–2 стран заходят много ботов, эти гео можно исключить.
Предположим, что необходимо выбрать 3 страны, доступ на сайт для которых будет разрешен. Это Россия, Беларусь, Казахстан. Создаем новое правило, называем его BAD COUNTRIES. Далее добавляем в «Edit expression» следующий код:
(ip.geoip.country ne "RU" and ip.geoip.country ne "BY" and ip.geoip.country ne "KZ")
Действие выбираем «Block», нажимаем «Use expression builder», затем сохраняем и запускаем правило. Таким образом, как показано на скриншоте ниже, если IP-адрес пользователя не соответствует одной из трех вышеуказанных стран, то на сайт он не попадет.
Пятое правило стоит использовать аккуратно ввиду того, что многие юзеры сейчас используют VPN. Забыв его отключить после посещения заблокированных в стране ресурсов, они могут попытаться зайти на продвигаемый сайт.
После подключения правила нужно следить за такими метриками сайта, как посещаемость и коэффициент конверсии. Если они начинают резко снижаться, то стоит откорректировать набор запрещенных/разрешенных стран.
Вместо заключения
Помимо отслеживания параметров сайта в «Яндекс Метрике» за посещениями, которые происходили в соответствии с заданными правилами, можно следить непосредственно в CloudFlare. График в строке каждого правила показывает статистику трафика.
Параметр CSR рядом с графиком показывает в процентном отношении количество тех, кто из попавших под фильтр пользователей/ботов смог пройти проверку. Если указано 0%, значит все прошли проверку, то есть с большой долей вероятности оказались реальными людьми. 100% означает, что никто пройти проверку не смог, что свидетельствует об атаке ботами.
Проверить эффективность настройки правил, которые были рассмотрены в этой статье, можно следующими способами:
Использование CloudFlare не защитит на 100% от ботов и чрезмерной нагрузки на сервер. При этом такая мера может снизить вероятность заполнения сайта мусорным трафиком. Это точно стоит того, тем более учитывая простоту настройки сервиса.
Это видео с ограниченным доступом.