Я хотел бы разрешить только одному IP-адресу использовать до, скажем, 1 ГБ трафика в день, и если этот лимит будет превышен, все запросы с этого IP-адреса будут отброшены до следующего дня. Однако более простого решения, когда соединение разрывается после определенного количества запросов, будет достаточно.
Есть ли уже какой-то модуль, который может это сделать? Или, может быть, я смогу добиться этого с помощью чего-то вроде iptables?
Спасибо
Это мое решение iptables для такого рода проблем. Отрегулировать --seconds
--hitcount
по мере необходимости также таблица iptables.
iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT
Разъяснил:
iptables
проверьте, указан ли исходный IP-адрес в файле / proc / net / ipt_recent / ATACK 5 или более раз с интервалом 600 секунд и является ли это НОВЫМ запросом. Если это так, откажитесь; еще
iptables
проверьте, направлен ли запрос на порт 80. Если да, напечатайте IP и временную метку в / proc / net / ipt_recent / ATACK и пересылайте пакет.
Он отлично подходит для моих нужд.
Если вам нужно чистое решение Apache, bw_mod для Apache 2.0 и mod_bandwidth для Apache 1.3. Они могут ограничивать пропускную способность вашего сервера, чтобы ограничить использование пропускной способности.
Также существует mod_limitipconn, который не позволяет одному пользователю устанавливать множество подключений к вашему серверу. mod_cband - еще один вариант, но я никогда им не пользовался.
Если вы не хотите возиться с установкой Apache, вы можете поставить прокси-сервер Squid перед Apache. Это дает вам больше контроля над дросселированием.
Однако в большинстве случаев проблема заключается в нескольких больших объектах, когда вы хотите ограничить пропускную способность для каждого IP-адреса, и вы хотите выдать нормальное сообщение об ошибке, когда пользователь извлекает слишком много данных, а вы его блокируете. В этом случае было бы проще написать сценарий PHP и сохранить информацию о доступе во временной таблице в базе данных.
Вы смотрели на такой инструмент, как fail2ban? Это может быть немного тяжеловесно для вас, но это позволит вам ограничить количество запросов, разрешенных для любого данного IP-адреса. Он работает, просматривая журналы, и вы устанавливаете правила для количества разрешенных нарушений за раз, поэтому для вас это могут быть запросы в день. Как только они это сделают, он может делать такие вещи, как блокировать их с помощью ipchains.
Я очень успешно использовал его для блокирования DDoS-атак на почтовый сервер. Однако он может потреблять значительную мощность процессора.
пытаться mod_dosevasive
или mod_security
mod_dosevasive
может быть настроен на блокировку IP-адреса после определенного числа или запросов страницы к сайту в указанные временные рамки.