Ограничиваем доступ к сайту ботам
Многие вебмастера (и я в том числе) с целью ускорения индексации страниц поисковиками, добавляют ссылки на страницы своих сайтов в твиттер и фейсбук. Некоторые делают это вручную, некоторые с помощью программ и сервисов, путем добавления RSS-лент и т.д.
Но сечас речь пойдёт не об этом. Дело в том, что когда в твиттере и на фейсбуке появляются ссылки на сайт, по этим ссылкам на сайт переходят не только роботы Яндекса и Гугла. На сайт обрушивается лавина других ботов от разных веб-сервисов и программ, которые постоянно мониторят твиттер и фейсбук.
В результате получается реальный мини-ддос, когда в течении буквально нескольких секунд этими ботами с вашего сервера запрашиваются десятки и сотни страниц. Причем эти боты, хочу заметить, никакой пользы кроме нагрузки на ваш сервер не дают.
Первый раз я с этим столкнулся, когда только начал осваивать методы постинга в твиттер. Неожиданно для меня хостер заблокировал мой аккаунт с объяснением "дескать нагрузка превысила допустимые значения" и мне предложили перейти наболее высокий
тариф. При том, что в этом аккаунте у меня работал только один недавно установленный небольшой сайт на вордпрессе.
Так как я не любитель идти у кого бы то нибыло на поводу (тем более, что блокировка была сделана не совсем по-человечески), естественно этот хостер был послан по одному, всем хорошо известному адресу и я переехал на другой хостинг, который я совершенно случайно недавно нашел и который меня устраивал на 110% если можно так сказать.
Но это всё, как говорится "не главное". Главное, что при детальном мониторинге логов и был выявлен факт большого количества запросов от "левых" ботов. Банить их по IP смысла не было, потому что у многих он часто менялся. И тогда я
нашел решение, которое до сих пор верно и надежно спасает мои сайты от множества задалбывающих ботов и соответственно намного снижает нагрузку на сервер.
В корневой папке сайта был создан файл .htaccess со следующим содержимым:
<Files 403.shtml>
order allow,deny
allow from all
</Files>
# Далее список юзерагентов которым мы запрещаем доступ
SetEnvIfNoCase User-Agent JS-Kit bad_bot
SetEnvIfNoCase User-Agent PostRank bad_bot
SetEnvIfNoCase User-Agent Python-urllib bad_bot
SetEnvIfNoCase User-Agent UnwindFetchor bad_bot
SetEnvIfNoCase User-Agent facebookexternalhit bad_bot
SetEnvIfNoCase User-Agent TweetmemeBot bad_bot
SetEnvIfNoCase User-Agent Butterfly bad_bot
SetEnvIfNoCase User-Agent MFE_expand bad_bot
SetEnvIfNoCase User-Agent Java bad_bot
SetEnvIfNoCase User-Agent Summify bad_bot
SetEnvIfNoCase User-Agent MetaURI bad_bot
SetEnvIfNoCase User-Agent FlipboardProxy bad_bot
SetEnvIfNoCase User-Agent ScribdReader bad_bot
SetEnvIfNoCase User-Agent RockMelt bad_bot
SetEnvIfNoCase User-Agent InAGist bad_bot
SetEnvIfNoCase User-Agent NING bad_bot
SetEnvIfNoCase User-Agent TweetedTimes bad_bot
SetEnvIfNoCase User-Agent PaperLiBot bad_bot
SetEnvIfNoCase User-Agent Library bad_bot
SetEnvIfNoCase User-Agent Ezooms bad_bot
SetEnvIfNoCase User-Agent strawberryj bad_bot
SetEnvIfNoCase User-Agent Scooper bad_bot
SetEnvIfNoCase User-Agent Ahrefs bad_bot
SetEnvIfNoCase User-Agent Spider bad_bot
SetEnvIfNoCase User-Agent None bad_bot
SetEnvIfNoCase User-Agent EventMachine bad_bot
SetEnvIfNoCase User-Agent aiHitBot bad_bot
SetEnvIfNoCase User-Agent SolomonoBot bad_bot
SetEnvIfNoCase User-Agent SearchBot bad_bot
SetEnvIfNoCase User-Agent Wget bad_bot
SetEnvIfNoCase User-Agent Crawler bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Если у кого-то файл .htaccess уже существует, просто добавляем эти данные в конец файла. Редактировать и добавлять других ботов очень просто. Покажу на примере бота "Bing" - от поисковой системы Microsoft'а. В логах мы видим обращения к страницам сайта от следующего юзерагента: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
Просто берем из этих данных кусок имени бота, у нас это будет "bingbot" и добавляем к нашему списку в файле .htaccess следующую строку:
Если у юзерагента, которому вы хотите запретить доступ к сайту имя состоит из двух слов, то их нужно просто взять в ковычки. Например, сайт задалбывает бот с юзерагентом:
Пишем в .htaccess следующую комбинацию:
Хотя по-сути можно было просто написать:
Или например:
Результат будет такой-же. Но иногда вам может пригодиться именно случай с двойным именем. Так же хочу предупредить, что не стоит делать в .htaccess записи типа:
SetEnvIfNoCase User-Agent Mozilla bad_bot
Потому что, в первом случае доступ к сайту не смогут получить роботы Гугла и Яндекса (в их юзерагенте присутствует слово "bot" - Googlebot, YandexBot), а во втором случает на сайт не смогут получить доступ люди у которых браузер отдает юзерагент "Mozilla" и кстати говоря у роботов Яндекса и Гугла в юзерагенте так же присутствует "Mozilla".
Поэтому если бы хотите забанить какого нибудь надоедающего бота, выбирайте из его юзерагента часть имени, которой нет у других ботов. Ну и конечно, эксперементируйте. В инете достаточно информации об этом способе защиты.
Я просто, если можно так сказать, решил поделиться своим опытом. Мне таким образом удалось снять со своих сайтов достаточно существенную нагрузку. Возможно, для кого-то это окажется полезным.