Apache

Как забанить ботов по юзерагенту с помощью Apache

По мере появления некоторых проектов в поисковиках, их находят разные товарищи которые очень хотят контент с этих проектов выдрать, скорей всего на дорвеи/сплоги итд. Лично для меня никакой пользы от них нету, кроме того некоторые начинают борзеть и дергают по несколько страниц в секунду. Как то я хотел скачать один сайт, но после того как грабилка сайтов выкачивала страниц 10-20, скорость сайта резко понижалась до модемной, и качать становилось просто невозможно. Подозреваю что в том случае скорость резалась на файрволе. Сделать такое на виртуальном хостинге нереально, но хоть как то уменьшить нагрузку на сервер можно и нужно, т.к. большинство хостеров ставят ограничение на потребляемые ресурсы и рано или поздно из-за этих ботов аккаунт могут просто заморозить или отключить, в зависимости от хостера.

Вот пример нескольких ботов которые любят лазить по сайту:
WinHTTP Robot/1.0
команда, приведенная в самом начале сначала читает все файлы в текущей директории (в моем случае все лог файлы для одного сайта за три месяца), потом выбирает оттуда только те строки в которых содержится WinHTTP, потом вырезает первую колонку (в случае логов apache это ip-адрес), после чего выбираются только уникальные и показывается число встретившихся совпадений. Таким образом в результате видно число хитов с каждого айпишника.

  1. $ cat * |grep WinHTTP | cut -f 1 -d " " | uniq -c
  2. 252 74.86.162.58
  3. 798 208.101.63.178
  4. 798 74.86.244.130
  5. $ host 74.86.162.58
  6. 58.162.86.74.in-addr.arpa domain name pointer tracerootan.dk.
  7. $ host 208.101.63.178
  8. 178.63.101.208.in-addr.arpa domain name pointer royalexelsiore.br.

HTMLParser/1.6
  1. $ cat * |grep HTMLP | cut -f 1 -d " " |uniq -c |head
  2. 1829 81.88.208.187
  3. $ host 81.88.208.187
  4. 187.208.88.81.in-addr.arpa domain name pointer ws208-187.maryno.net.

Второй бот судя по всему одно из двух, либо библиотека Python или Java программа. Подозреваю, что второе, но пока ничего из этого не ставил и не пробовал.

Вот простой способ забанить их по user-agent:
в файл .htaccess добавляем

  1. RewriteEngine On
  2. RewriteCond %{HTTP_USER_AGENT} "^WinHTTP\ Robot/1.0$"
  3. RewriteCond %{HTTP_USER_AGENT} "^HTMLParser/1\.6$"
  4. RewriteRule ^.+$ robot_nah.html [L]

в корне сайта создаем файл robot_nah.html в котором пишем какую нибудь херню. Сначала я хотел просто выдавать ошибку, это можно сделать заменив последнюю строчку на
RewriteRule ^.+$ - [G]
потом таки решил что лучше выдавать всякий мусор, пусть потом разгребают кучу дерьма. :)

Последние комментарии