![防止 SSH 攻击](https://linux22.com/image/596536/%E9%98%B2%E6%AD%A2%20SSH%20%E6%94%BB%E5%87%BB.png)
我正在尝试设置 iptables 规则,以每分钟仅允许一个 IP 通过 SSH 连接到服务器 3 次,然后丢弃所有连接以防止 SSH 攻击;但似乎我做错了什么!
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
谢谢
答案1
我认为你最好使用fail2ban
,因为你的 ipfilter 规则也会阻止合法连接。fail2ban
仅在连接失败后才会阻止 IP。
接下来,一种常见的做法是禁止 IP 尝试连接到端口 22,并将您的 ssh 服务器绑定到另一个端口。如果您的计算机不是众所周知的目标,那么您每周只会遇到几个非法连接。
对于您提出的确切问题:
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
答案2
你可以通过以下 2 条规则来实现你想要的
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP
请注意,使用-A
which 将规则添加到链的末尾可能会违反 iptables 规则的处理方式,即按顺序处理,因此如果在达到您的规则之前有一个一般 DROP 或允许规则,那么它们将永远不会被执行。
话虽如此,你也可能会发现失败2ban是实现这种块的更好方法。
答案3
您可能想尝试 LIMIT 模块。
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/minute -j ACCEPT