Эта проблема:
Я управляю сайтом, на котором много динамически генерируемых страниц. Ежедневно боты из Google, Yahoo и других поисковых систем загружают более 100 тысяч страниц. И иногда у меня возникают проблемы с «хакерами», пытающимися массово загрузить весь сайт.
Я хотел бы заблокировать IP-адреса «хакеров», при этом поисковые роботы будут сканировать страницы. Как лучше всего это сделать?
Примечание:
Прямо сейчас я решаю проблему следующим образом. Я сохраняю ip каждого запроса страницы в файл каждые X секунд. И у меня есть скрипт crontab, который считает повторяющиеся IP-адреса каждые 30 минут. Для IP-адресов, которые повторяются слишком много раз, сценарий проверяет имя хоста - если оно не принадлежит Google / Yahoo / Bing / и т. Д., То у нас есть кандидат на бан. Но мне не очень нравится мое решение, и я думаю, что автоматическую блокировку можно было бы сделать лучше или использовать какое-то нестандартное решение.
Вы не указали свою ОС, поэтому я с радостью сообщу вам версию OpenBSD: в pf.conf
поместите в свой набор правил что-то вроде следующего (максимум 100 подключений за 10 секунд):
table <bad_hosts> persist block quick from <bad_hosts> pass in on $ext_if proto tcp to $webserver port www keep state \ (max-src-conn-rate 100/10, overload <bad_hosts> flush global)
вы можете добавить белый список и задание cron, удаляющее адреса из bad_hosts через день или два.
Посмотри на Простой коррелятор событий. Он может автоматически запускать команды (т.е. добавлять блок в iptables
) после того, как определенное количество строк, соответствующих регулярному выражению, было просмотрено в течение определенного промежутка времени. Он также может определять истекающий «контекст». По истечении срока действия контекста вы можете разблокировать рассматриваемый IP-адрес (т.е. удалить из iptables
).
Я бы подумал, что fail2ban - это ответ.
Ты можешь использовать белый списокs, чтобы предотвратить блокировку поисковых систем.