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

Заблокировать 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. Как я могу отправить себе почту, т.е. x количество IP-адресов, которым запрещен доступ к foo.com?
  3. Есть ли способ улучшить мой скрипт, чтобы он читал только те IP-адреса из /tmp/ip.blocked которые не забанены через скрипт (iptables)?

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

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