recent
Основываясь на идее @Tomasz, я создал правило в ufw и проверил результат в iptables. Кажется, ufw использует расширение recent
:
:LOG_REJECT - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 -j LOG_REJECT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A LOG_REJECT -m limit --limit 3/min -j LOG --log-prefix "[LIMITED SSH]"
-A LOG_REJECT -j REJECT --reject-with icmp-port-unreachable
limit
Что немного аккуратнее/проще:
:LOG_REJECT - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 12/minute -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j LOG_REJECT
-A LOG_REJECT -m limit --limit 3/minute -j LOG --log-prefix "[LIMITED SSH]" --log-level 7
-A LOG_REJECT -j REJECT --reject-with icmp-port-unreachable
(Хотя я не уверен, что icmp-port-unreachable
является правильным сообщением об отклонении в данном случае.)
connlimit
...может быть, кто-нибудь еще добавит.:)