Я ищу единственное решение IPTables для блокировки любого IP-адреса, который сделал слишком много (например, более 5) подключений или повторных подключений за короткий период времени (например, 1 минуту) на определенном порту. Заблокированные адреса должны быть заблокированы как минимум на 30 минут.
Предлагаемое вами решение замедлит скорость новых подключений, но источник может вернуться через 180 секунд и даже может обнаружить, что каждые 60 секунд это нормально. Если вы хотите, чтобы он был заблокирован как минимум на 30 минут, как вы просили (проверьте также параметр --rcheck вместо --update), вам необходимо добавить источник в другой недавний список источников, вместо того, чтобы удалять пакеты. Так получается:
iptables -N BANNING
iptables -A BANNING -m recent --set --name BANNED --rsource
iptables -A INPUT -m recent --name BANNED --update --seconds 1800 --reap -j DROP
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j BANNING
Спасибо Zoredache за то, что указали мне ссылку. После поиска в Интернете я нашел аналогичное решение в техническом блоге Девона Хилларда.
Эти два простых правила делают свою работу.
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
Источник: Использование IPTables для предотвращения атак грубой силы SSH