Нагрузка на сайт от вредных ботов, устраняем Амазон бота, который по сути устраивает DDos атаку.
Итак сегодняшняя тема статьи это вопрос нагрузки которая возникает на сайте. Недавно мне пришлось столкнуться с этим. На большом мощном сервере просто висело порядка 22 LA в htop и никаким образом не было видно каких экстремальных посещаемостей. Это надо было устранять и начал ковыряться в логах сайтов на сервере, чтобы найти причину.
Самое интересное что до этого момента сервер был нагружен максимум на 10-15% он его мощности и предпосылок для роста нагрузки никакой не было. Кстати очень часто приходят запросы от заказчиков на снижение нагрузки на таких хостингах как Бегет и Таимвеб, где также бывают такие экстремальные моменты.
В ходе такой инспекции по логам я заметил что на сайте часто видны заходы с бота Amazon — почти все запросы шли оттуда. Как мы знаем достаточно большая корпорация незамеченная вроде бы в каком то спаме. Но роботы буквально валили оттуда.
Выглядели запросы так: Amazonbot и соответственно адрес страницы на которую он приходил. И я решил попробовать его заблокировать. При этом у меня уже на серверах есть свои списки блокируемых ботов, но Амазон вот туда не попадал. Хотя особо надежды что дело именно в нем не было, но также я не видел других аномалий. В общем решил попробовать.
Из моей практики боты и роботы должны реагировать на robots.txt но не всегда так вежливы к соблюдению правил. В 90% случаев для всяких вредных ботов наличие его запрета в robots не помогает. Поэтому уже давно у меня главным способом блокировки является запрет на уровне правила nginx или апаче. Апаче я не использую ибо он устарел и медленный, а вот обычная связка это nginx + php-fpm (я писал кстати о его правильной настройке), так вот обычно я ставлю правила запрета в nginx что уже не требует от ботов вредных уважать или нет правила. Их все равно не пустит на сайт.
Обычно у меня настроено для скромного блокирования вот так
1 2 3 4 5 6 |
if ($http_user_agent ~ (Bytespider)) { return 403; } if ($http_user_agent ~* (360Spider|statdom.ru|SWeb|majestic|majesticbot|majestic.com|HostTracker|Serpstatbot|Serpstat|serpstat.com|openstat.ru|openstat|DataForSeoBot) ) { return 403; } |
Для более проработанного варианта я ставлю уже вот такой вариант блокировки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
if ($http_user_agent ~ (Bytespider)) { return 418; } if ($http_user_agent ~* "(InternetMeasurement|MBCrawler|YaK|niraiya.com|Cloudfind|SafeDNSBot|SeopultContentAnalyzer|serpstatbot|LinkpadBot|DataForSeoBot|Scrapy|ZoominfoBot|semantic-visions.com crawler|Konturbot|serpstatbot|Mediatoolkitbot|DataForSeoBot|Amazonbot|Semanticbot|PetalBot|Yahoo|Seekport|Comparserbot|SemrushBot|AhrefsBot|BLEXBot|mijbot|MJ12bot|DotBot|MauiBot|NTENTbot|MegaIndex|ScooperBot|heritrix|SentiBot|Linguee|Adsbot/3.1|NetSeer|Barkrowler|Barkrowler|Bytedance|Bytespider)") { return 403; } if ($http_user_agent ~* (360Spider|80legs.com|Abonti|AcoonBot|Acunetix|adbeat_bot|AddThis.com|adidxbot|ADmantX|AhrefsBot|AngloINFO|Antelope|Applebot|BaiduSpider|BeetleBot|billigerbot|binlar|bitlybot|BlackWidow|BLP_bbot|BoardReader|Bolt 0|BOT for JCE|Bot mailto:craftbot@yahoo.com|casper|CazoodleBot|CCBot|checkprivacy|ChinaClaw|chromeframe|Clerkbot|Cliqzbot|clshttp|CommonCrawler|comodo|CPython|crawler4j|Crawlera|CRAZYWEBCRAWLER|Curious|Curl|Custo|CWS_proxy|Default Browser 0|diavol|DigExt|Digincore|DIIbot|discobot|DISCo|DoCoMo|DotBot|Download Demon|DTS.Agent|EasouSpider|eCatch|ecxi|EirGrabber|Elmer|EmailCollector|EmailSiphon|EmailWolf|Exabot|ExaleadCloudView|ExpertSearchSpider|ExpertSearch|Express WebPictures|ExtractorPro|extract|EyeNetIE|Ezooms|F2S|FastSeek|feedfinder|FeedlyBot|FHscan|finbot|Flamingo_SearchEngine|FlappyBot|FlashGet|flicky|Flipboard|g00g1e|Genieo|genieo|GetRight|GetWeb!|GigablastOpenSource|GozaikBot|Go!Zilla|Go-Ahead-Got-It|GrabNet|grab|Grafula|GrapeshotCrawler|GTB5|GT::WWW|Guzzle|harvest|heritrix|HMView|HomePageBot|HTTP::Lite|HTTrack|HubSpot|ia_archiver|icarus6|IDBot|id-search|IlseBot|Image Stripper|Image Sucker|Indigonet|Indy Library|integromedb|InterGET|InternetSeer.com|Internet Ninja|IRLbot|ISC Systems iRc Search 2.1|jakarta|Java|JetCar|JobdiggerSpider|JOC Web Spider|Jooblebot|kanagawa|KINGSpider|kmccrew|larbin|LeechFTP|libwww|Lingewoud|LinkChecker|linkdexbot|LinksCrawler|LinksManager.com_bot|linkwalker|LinqiaRSSBot|LivelapBot|ltx71|LubbersBot|lwp-trivial|Mail.RU_Bot|masscan|Mass Downloader|maverick|Maxthon$|Mediatoolkitbot|MegaIndex|MegaIndex|megaindex|MFC_Tear_Sample|Microsoft URL Control|microsoft.url|MIDown tool|miner|Missigua Locator|Mister PiX|mj12bot|Mozilla.*Indy|Mozilla.*NEWT|MSFrontPage|msnbot|Navroad|NearSite|NetAnts|netEstate|NetSpider|NetZIP|Net Vampire|NextGenSearchBot|nutch|Octopus|Offline Explorer|Offline Navigator|OpenindexSpider|OpenWebSpider|OrangeBot|Owlin|PageGrabber|PagesInventory|panopta|panscient.com|Papa Foto|pavuk|pcBrowser|PECL::HTTP|PeoplePal|Photon|PHPCrawl|planetwork|PleaseCrawl|PNAMAIN.EXE|PodcastPartyBot|prijsbest|proximic|psbot|purebot|pycurl|QuerySeekerSpider|R6_CommentReader|R6_FeedFetcher|RealDownload|ReGet|Riddler|Rippers 0|rogerbot|RSSingBot|rv:1.9.1|RyzeCrawler|SafeSearch|SBIder|Scrapy|Scrapy|Screaming|SeaMonkey$|search.goo.ne.jp|SearchmetricsBot|search_robot|SemrushBot|Semrush|SentiBot|SEOkicks|SeznamBot|ShowyouBot|SightupBot|SISTRIX|sitecheck.internetseer.com|siteexplorer.info|SiteSnagger|skygrid|Slackbot|Slurp|SmartDownload|Snoopy|Sogou|Sosospider|spaumbot|Steeler|sucker|SuperBot|Superfeedr|SuperHTTP|SurdotlyBot|Surfbot|tAkeOut|Teleport Pro|TinEye-bot|TinEye|Toata dragostea mea pentru diavola|Toplistbot|trendictionbot|TurnitinBot|turnit|Twitterbot|URI::Fetch|urllib|Vagabondo|Vagabondo|vikspider|VoidEYE|VoilaBot|WBSearchBot|webalta|WebAuto|WebBandit|WebCollage|WebCopier|WebFetch|WebGo IS|WebLeacher|WebReaper|WebSauger|Website eXtractor|Website Quester|WebStripper|WebWhacker|WebZIP|Web Image Collector|Web Sucker|Wells Search II|WEP Search|WeSEE|Wget|Widow|WinInet|woobot|woopingbot|worldwebheritage.org|Wotbox|WPScan|WWWOFFLE|WWW-Mechanize|Xaldon WebSpider|XoviBot|Yahoo|YisouSpider|zermelo|Zeus|zh-CN|ZmEu|ZumBot|ZyBorg) ) { return 403; } if ($http_user_agent ~ (Bytespider)) { return 403; } if ($http_user_agent ~* (360Spider|statdom.ru|SWeb|majestic|majesticbot|majestic.com|HostTracker|Serpstatbot|Serpstat|serpstat.com|openstat.ru|openstat|DataForSeoBot) ) { return 403; } |
Но в данном случае я добавляю строчку и получается вот такой вариант новой строки
1 |
if ($http_user_agent ~* "Amazonbot"){ return 403; } |
Конечный вариант конфига для блокировки выглядит вот так
1 2 3 4 5 6 7 |
if ($http_user_agent ~ (Bytespider)) { return 403; } if ($http_user_agent ~* (360Spider|statdom.ru|SWeb|majestic|majesticbot|majestic.com|HostTracker|Serpstatbot|Serpstat|serpstat.com|openstat.ru|openstat|DataForSeoBot) ) { return 403; } if ($http_user_agent ~* "Amazonbot"){ return 403; } |
Сохраняю и смотрю что будет. Удивительно и неожиданно вся нагрузка спадает и я вижу обычные и даже меньше 5-10% нагрузки на сервере. Чудеса однако, но приятные)
В целом если у вас идет нагрузка на хостинг или сервер при работе сайта, проверьте блокировку зловредных ботов. Это не всегда но может быть причиной.