我试了几个月,找不到完全匹配的。但是我有一个解决方法。
sshPort=2222
nft add table ip sshGuard
nft add chain ip sshGuard input { type filter hook input priority 0 \; }
nft add set ip sshGuard denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }
nft add set ip sshGuard sshlist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }
nft add rule ip sshGuard input ct state established,related accept
nft add rule ip sshGuard input tcp dport $sshPort ct state new ip saddr @denylist reject
nft add rule ip sshGuard input tcp dport $sshPort ct state new ip saddr @sshlist add @denylist { ip saddr } accept
nft add rule ip sshGuard input tcp dport $sshPort ct state new limit rate over 2/minute burst 3 packets add @sshlist { ip saddr } counter accept
nft list table ip sshGuard
对于新状态,任何新 IP 都将接受大约 5 个连接。如果limit rate
被击中,一个新的 IP(不在 中sshlist
)有 2 次机会。对于任何一个IP sshlist
,只剩下一次机会。对于 中的任何 IP ,任何新连接都将被拒绝,直到它在5 分钟超时denylist
后从 中删除。denylist