Назад | Перейти на главную страницу

Методы предотвращения вредоносных поисковых роботов / парсеров и DDoS-атак

Последние пару недель я подвергался атакам ботов на свой сайт. В основном краулеры работают на сайте с высокой частотой, что приводит к увеличению нагрузки. Это приводит к потреблению полосы пропускания и, следовательно, к неудовлетворительному взаимодействию с пользователем для остальных людей. Я хотел бы знать, как такие сайты, как google, amazon и e-bay, предотвращают эти вещи:

  1. Как они различают полезных сканеров (google / yahoo / msn) и вредоносных, не соблюдающих robots.txt и другие правила?
  2. Как я могу определить шаблон, который может привести к потенциально опасному боту в реальном времени, проверив журналы доступа Apache?

Пороговые значения, такие как соединения или пакеты / время / ip, не могут быть установлены, поскольку это приведет к ухудшению взаимодействия с пользователем на сайте.

Вот что я сделал и рекомендую:

Создайте следующий скрипт, который запускается в cron в течение 1-5 минут: прочитайте журналы необработанного доступа (скажем, последние 20000 строк - в зависимости от активности вашего сайта), упорядочите данные по IP / имени хоста, а затем по времени unix с прикрепил результаты. Просмотрите результаты и определите, какие IP-адреса не отправляли никаких запросов к известным и необходимым элементам страницы, таким как изображения, js, css и т. Д. По ним подсчитайте, сколько запросов страницы было сделано за одну секунду. Я бы охарактеризовал запросы 4 или более страниц в секунду как чрезмерные и оскорбительные. Оттуда сравните с белым списком хороших ботов (preg_match с именем хоста для таких вещей, как "googlebot.com" и т. Д.), И сохраните все IP и имя хоста результатов, не внесенных в белый список, в базу данных.

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

Наконец, установите monit на свой сервер и настройте его на мониторинг http один раз в минуту. Если сервер не отвечает, он автоматически перезапустится. Это поможет свести к минимуму время простоя и экстремальные задержки. Сценарий, который я описал выше, автоматически определяет парсеры и плохих ботов и отменяет доступ. Он также автоматизирует запросы на пересмотр, если они есть.

Такое решение, как Cloudflare или Project HoneyPot, должно помочь. Посмотрите на это еще несколько указателей - https://drupal.stackexchange.com/questions/45678/watchdog-404-page-not-found-entries-from-spambot-guessing-urls/48448#comment50114_48448