У меня есть веб-сайт, на котором:
Итак, моя идея состоит в том, чтобы ограничить количество HTTP-запросов на каждый IP-адрес (за исключением известных ботов, например Google Bot):
-> это хорошая идея заблокировать все эти "неразрешенные" IP-адреса? Собираюсь ли я заблокировать законный трафик?
Простое ограничение количества HTTP-запросов на адрес не приведет к блокировке «неразрешенных» IP-адресов.
Выявление «неразрешенного» адреса в реальном времени потребует обратного поиска DNS для каждого посетителя хотя бы один раз. Это в лучшем случае увеличит ваше начальное время ответа HTTP и создаст состояние, близкое к DoS, когда серверы имен недоступны и истекло время ожидания - вы действительно этого не хотите.
В общем, попытка защитить общедоступный контент от захвата ботами является сизифовой задачей: вы наверняка не позволите каждому посетителю пройти тест Тьюринга, прежде чем допустить его на свой сайт. Любой из доступных подходов сможет только снизить нагрузку на ваши веб-серверы, а не полностью предотвратить захват. Кроме того, как и в случае со всеми основанными на статистике подходами к дифференциации, уменьшение количества ботов, имеющих доступ к вашему контенту, неизбежно приведет к увеличению числа обычных пользователей-людей, которым неудобны ваши правила блокировки.
Ваше предложение основано на том, что 5% адресов те же адреса которые крадут ваш контент, но вы не говорите, так ли это. Конечно, я ожидал, что вы будете блокировать много законного трафика.
Я согласен с большей частью того, что говорит syneticon-dj, однако есть более эффективные способы борьбы с пиявками (попробуйте поискать в Google для этого термина). Проверка реферера, требующего идентификатора сеанса, с использованием защиты CSRF, но с передачей токена в файле cookie вместо поля формы. Это обеспечивает механизм для идентификации пиявок - с точки зрения их блокировки, тогда вы действительно хотите сделать это как можно раньше, то есть когда вы получаете пакет SYN с такого IP. Это означает их блокировку на брандмауэре. Fail2ban предоставляет метод перенастройки брандмауэра на лету на основе записей журнала. Но помните, что длинные цепочки правил iptables повлияет на задержку и, следовательно, на пропускную способность.
Я не знаю подробностей awstats, но думаю, что статус «неразрешенный» действительно применяется ко всем IP-адресам без обратной записи DNS. Блокировка всего трафика с ip-адресов без обратной записи убьет множество обычных посетителей.
Попробуйте выборочно заблокировать ботов, проверив журналы своего сайта. Вы можете использовать fail2ban для автоматической блокировки этого трафика. fail2ban основан на анализе файла журнала, поэтому вам нужно только найти шаблон в вашем access.log и соответствующим образом настроить fail2ban.