Защита сервера от ботов - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Хостинг и железо
Дата
USD/RUB93.4409
BTC/USD64307.5530
Хостинг и железо Обсуждаем вопросы хостинга и железа.

Закрытая тема
Опции темы Опции просмотра
Старый 25.07.2014, 00:52   #1
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию Защита сервера от ботов

люблю следить за чужими ботами в логах своих веб-серверов. Порой проскакивают интересные экземпляры и "темы". Но большинство ботов являются нежданными гостями, а порой и опасны для сайта или сервера. Далее я хочу поделиться своими мыслями на эту тему.
Тыкаем на смайлы More

Опасности ботов:

More

Определение термина "бот"

More

Признаки бота

More

Степень наглости ботов.

More

Политика и цели филтрации бот-трафика

More

Маршрут ботов и компоненты их анализа

More

Что делать с обнаруженным ботом?

More

Профит от фильтрации ботов

More

далее еще будет практическая часть.....
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 25.07.2014, 02:05   #2
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
ТС -->
автор темы ТС По умолчанию

Мой опыт фильтрации веб-ботов средствами nginx.

На каждом сервере под веб-проекты установлен nginx, а его конфиг находится в git-репозитории, он общий для всех серверов. Индивидуальные настройки каждого хоста/домена хранятся в отдельно папке, которая не входит в git-репозиторий.

Структура примерно такая файлов:
More

Конфиг nginx начинается с файла nginx/nginx.conf:
More

в этом файле сверху описаны общие настройки работы веб-сервера для всех виртуальных хостов. В конце файла строкой "include conf.d/*.conf;" подключаются индивидуальные настройки каждого вирт.хоста.

Строками "include custom/*" подключаются описания правил-признаков, по которым осуществляется фильтрация трафика:

custom/bad_ua:More

custom/bad_referer: More

custom/bad_ip: More

custom/bad_location:More

Это были сокращенные признаков плохих ботов. Выкладывать эти признаки целиком не буду, тем более у каждого они будут свои, как и цели/политики фильтрации.

Далее описанные переменные можно использовать либо для логгирования плохих IP и составления черных списков для файервола, либо сразу банить этих ботов на уровне фронтэнда так:
custom/server_common: More

этот файл инклудится в индивидуальный конфиг каждого вирт. хоста, примерно так
conf.d/domain1.com.conf:More

return 444 в nginx означает оборвать соединение. Если хоть один из признаков совпал, обрубаем соединение. Аналогично можно писать IP в отдельный лог-файл.

Удобство использования git в том, что при ковырянии логов на каком-то из серверов, если возникает необходимость внести изменения в конфиги, я их вношу и делаю commit/push в удаленный общий bare-репозиторий, с которого потом конфиги подхватываются другими серверами. Мне так удобно. Есть более правильный путь: chef/puppet/ansible/etc

nginx-фильтрация трафика - это реалтайм фильтрация, без анализа серий запросов.

еще несколько заметок:
- некоторые боты перебирают http-параметры, пробуют подсунуть разный реферер. При анализе серии запросов такое легко ловится
- другие боты, как уже упоминал выше, выдают себя за авторитетного хорошего бота, например, за Googlebot. Таких можно ловить по информации о клиентском IP. Если бот представился Googlebot, а его IP принадлежит хостеру OVH - это как минимум подозрительно
- часто боты не запрашивают картинки. Если бот выдает себя за человека и не запросил ни одной картинки/css/js, то это бот на 99%
- если бот даже запросил ресурсы(img/css/js), то порядок их загрузки имеет определенные правила и он зависит от браузеров и их версий.
- моего бота(php-crawler) на одном сервере все равно ловили, потом я понял почему.
More

А у вас есть какие-нибудь истории/вопросы про фильтрацию веб-трафика?
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser

Последний раз редактировалось chesser; 25.07.2014 в 02:13.
chesser вне форума  
Старый 25.07.2014, 02:35   #3
sspy
главный злодей гофака
 
Аватар для sspy
 
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953648
По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
А у вас есть какие-нибудь истории/вопросы про фильтрацию веб-трафика?
для апача есть подобное решение ? nginx у меня банит всё четко, а вот апач только на уровне htccess, хочется на более низком уровне.

для нгинкса юзаю так
Цитата:
if ($http_user_agent ~* Baiduspider|MJ12bot|NerdyBot) {
return 403;
break;
}
какой более правильный, твой или этот?
__________________
sspy вне форума  
Старый 25.07.2014, 02:57   #4
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от sspy Посмотреть сообщение
для апача есть подобное решение ? nginx у меня банит всё четко, а вот апач только на уровне htccess, хочется на более низком уровне.
в апаче есть httpd.conf и все, что в него инклудится - это статическая часть апачевского конфига, в ней побольше возможностей, чем в htaccess, синтаксис такой же, но надо ребутать/релоадить сервер. Но все равно хрен редьки не слаще )

А зачем ты апачем банишь, если есть nginx? или это про разные серверы?
Буржуи в связке с апачем часто используют lighttpd, но в связи с усилением международного пиара nginx, соотношение nginx / lighttpd изменилось.

Можно даже апачем собирать IP и формировать из них черные списки для фаервола - самый низкий уровень, который тебе доступен на сервере.

Цитата:
Сообщение от sspy Посмотреть сообщение
для нгинкса юзаю так какой более правильный, твой или этот?
принципиальной разницы нет, оба правильные.

Для описания признаков я использую map-переменные, они имхо удобнее в использовании, чем if (список) , особенно когда этот список длинный - с одной стороны. С другой стороны, мои regexp-ы в map-ах надо бы разбивать и компоновать в группы...

Еще у тебя return 403 - т.е. бот-трафик проходит всю цепочку полностью, от (1) до (9), потому что 403 ответ - это именно HTTP-ответ, а не обрыв. У меня return 444 и nginx обрубает соединение в районе точки (4).
Возможно, у тебя цель отдать боту 403. Как эффективнее отваживать ботов ходить на сервер - я не знаю, статистики нет на этот счет, не сравнивал.
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 25.07.2014, 15:32   #5
pepper
Senior Member
 
Регистрация: 04.06.2008
Сообщений: 466
Бабло: $172376
По умолчанию

Для блокировки по ip в nginx'е удобнее использовать директиву geo. Можно целые подсети добавлять в CIDR формате
PHP код:
geo $bad_ip {
  default        
0;
  
78.46.0.0/15      1# bot  HETZNER
  
178.63.0.0/16     1# bot  HETZNER

На одном из серверов пытался как-то отловить бота, который делал по несколько запросов в секунду на внутренние адреса сайта, причем с верным рефером. По ip не получалось блокировать, т.к. ip были из сетей интернет-провайдеров (видимо соксы), UA тоже были валидные. На тот момент ограничился limit_req_zone.

Последний раз редактировалось pepper; 25.07.2014 в 15:43.
pepper вне форума  
Старый 25.07.2014, 16:43   #6
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
ТС -->
автор темы ТС По умолчанию

точно, забыл про geo написать, хотя сам его где-то использую.

такой детский вопрос, на который не знаю ответа:
на сколько актуальна информация, выдаваемая по команде: whois IP ?

Пример: More

Какова вероятность, что этот IP на самом деле принадлежит не хостеру OVH, а, например, компании Google ?
Какова вероятность, что гугл арендовал у OVH их IP ?
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 25.07.2014, 17:21   #7
pepper
Senior Member
 
Регистрация: 04.06.2008
Сообщений: 466
Бабло: $172376
По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
Какова вероятность, что этот IP на самом деле принадлежит не хостеру OVH, а, например, компании Google ?
Какова вероятность, что гугл арендовал у OVH их IP ?
Думаю, маловероятно, хотя кто их знает
Как вариант, можно проверить ip (и соседние в подсети) на наличие на нем/них сайтов (в бинге или в других сервисах). Если есть, то с большой долей вероятности можно сказать, что ip под хостинг используется.
pepper вне форума  
Старый 25.07.2014, 17:33   #8
sspy
главный злодей гофака
 
Аватар для sspy
 
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953648
По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
такой детский вопрос, на который не знаю ответа:
на сколько актуальна информация, выдаваемая по команде: whois IP ?
актуальна, т.к. это real time базы

Цитата:
Сообщение от chesser Посмотреть сообщение
Какова вероятность, что этот IP на самом деле принадлежит не хостеру OVH, а, например, компании Google ?
Какова вероятность, что гугл арендовал у OVH их IP ?
вероятность крайне мала. если ip гугловский то он палится чрез rDNS, если ни через whois и не rDNS не палится, значит они или втихую арендуют, что маловероятно, или кто-то просто прикинулся гуглботом, что вероятнее всего
__________________
sspy вне форума  
Старый 25.07.2014, 18:52   #9
Grut
Senior Member
 
Аватар для Grut
 
Регистрация: 23.04.2007
Сообщений: 2,118
Бабло: $337995
По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
...
Какова вероятность, что этот IP на самом деле принадлежит не хостеру OVH, а, например, компании Google ?
Какова вероятность, что гугл арендовал у OVH их IP ?
В соседней ветке подсказывают, что в поле abuse-mailbox всегда будет google.com

Offtopic
Grut вне форума  
Старый 25.07.2014, 21:45   #10
W84me
Senior Member
 
Регистрация: 19.04.2008
Сообщений: 269
Бабло: $44680
По умолчанию

http://bgp.he.net/ для поиска подсеток, диапазонов и овнеров
W84me вне форума