你使用什么工具或技术来防止对你的SSH端口的暴力攻击。 我注意到在我的安全日志中,我有数百万次尝试通过ssh以各种用户身份login。
这是在一个FreeBSD的盒子,但我想它可以适用于任何地方。
这是Rainer Wichmann 在这个主题上的一篇很好的文章 。
它解释了这些方法的优点和缺点:
我使用了fail2ban ,它会在几次失败的尝试之后locking一个IP地址一段可configuration的时间。
结合密码强度testing(使用john (John the Ripper))来确保powershell攻击不会成功。
你可以做的小事情就是使用类似DenyHosts的东西:
http://denyhosts.sourceforge.net/
它使用内置的hosts.allow / hosts.deny来阻止SSH滥用者。
避免这些攻击最简单的方法之一是更改sshd监听的端口
正如Chris指出的那样,使用encryption密钥而不是密码。
除此之外:
你真的需要访问你的公共ssh连接多less个人或者地点(有浮动的公共IP地址)?
根据您所维护的公共ssh主机的数量,以及您是否可以缩小您的一般连接标准,那么可能是一个简单的,可支持的configuration,以限制访问几个外部主机。
如果这对你有用,它可以真正简化你的pipe理开销。
除了其他好的build议之外,一个非常简单的事情就是速率限制传入连接。 每IP每分钟限制3个连接:
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP
使用sshd_config中的“AllowUsers”选项来确保只有一小部分用户可以login。 所有其他人将被拒绝,即使他们的用户名和密码是正确的。
您甚至可以限制用户从特定主机login。
例如,
AllowUsers user1 [email protected]
这将减lesssearch空间,并避免那些意外遗留或启用的旧用户(尽pipe这些当然应该被禁用,这是阻止它们用于基于SSH的条目的简单方法)。
这并不能完全阻止暴力攻击,但有助于降低风险。
使用类似PF的东西:
表<ssh-brute>坚持
在标签ssh_brute中快速logging日志
传入$ ext_if proto tcp到($ ext_if)端口ssh调制状态\
(max-src-conn-rate 3/10,重载刷新全局)
端口敲击是保持这种事情的一个非常稳固的方式。 有点烦躁,有时令人讨厌,但这绝对会让问题消失。
上下文很重要,但是我会推荐如下的东西:
除了sherbang的限速build议之外 ,延迟时间的长短也很重要。 通过将3次login尝试的组之间的延迟从2分钟增加到20分钟,使得三次以上尝试login的不同IP地址的数量下降,比较一台机器上两周的时间,从44次尝试到3次这三个地址中的任何一个都不会超过11个小时。
非常轶事,但auth.log成为一个更加可读的我…
我只是不在乎。 让他们带着这个港口,他们不会蛮横的。
安装OSSEC。 不仅监视重复login,它将进入一个iptables的临时块为违规ip。 最后它会向你发送一份报告,说明细节。 它会logging一切,这很好。 Somone曾经尝试过超过8000个login名来login。 我parsing了日志,并得到了一个不错的用户列表不成交;)