防止SSH攻击

我试图设置iptables规则,只允许3分钟的IP每分钟通过SSH连接到servir,并放弃所有的连接,以防止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 

谢谢

我认为你最好不得不使用fail2ban ,因为你的ipfilter规则也会阻止合法的连接。 fail2ban只会在连接失败后阻塞IP。

接下来,通常的做法是在尝试连接到端口22时禁止IP,并将您的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条规则来实现你想要的

 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将规则添加到链的末尾可能会违反iptables规则的处理方式,也就是说,如果在到达之前有一个通用的DROP或允许规则,那么它们将永远不会被执行。

话虽如此,你也可以发现fail2ban是实现这种块的更好的方法。

您可能想要尝试LIMIT模块。

 iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/minute -j ACCEPT