Блокировка IP-адреса на определенный период времени

Я создал php-скрипт, который обычно подсчитывает, сколько раз IP-адрес заходил на наш сайт более x раз в течение 1 минуты.

После этого я создал сценарий оболочки, который запретил этим ip-адресам доступ к порту 80, число которых превысило x.

что следующим образом:

BLOCKDB=/tmp/ip.blocked
IPS=$(grep -Ev "^#" $BLOCKDB)
echo IPS
for i in $IPS
do
 /sbin/iptables -A INPUT -p tcp --destination-port 80 -s $i -j DROP
 /sbin/service iptables save
 /sbin/service iptables restart
 echo "Block ALL INPUT from " $i " net DROPPED."
done

Что требуется

  1. Я хотел бы запретить эти IP-адреса на определенный период времени, скажем, на 1 день (86400 секунд) или более, после этого он снова откроет 80 порт для них?
  2. Как я могу отправить письмо самому себе, т.е. количество ip-адресов, заблокированных для доступа к foo.com?
  3. Есть ли способ улучшить мой скрипт, чтобы он считывал только те ip-адреса из /tmp/ip.blocked, которые не запрещены с помощью скрипта (iptables)?

Пожалуйста, порекомендуйте.

1 ответ

Обычный ответ - fail2ban. Возможно, вам придется немного его настроить, чтобы читать логи веб-доступа.

Другие вопросы по тегам