防止暴力攻击ssh?

你使用什么工具或技术来防止对你的SSH端口的暴力攻击。 我注意到在我的安全日志中,我有数百万次尝试通过ssh以各种用户身份login。

这是在一个FreeBSD的盒子,但我想它可以适用于任何地方。

这是Rainer Wichmann 在这个主题上的一篇很好的文章 。

它解释了这些方法的优点和缺点:

  • 强密码
  • RSAauthentication
  • 使用'iptables'来阻止攻击
  • 使用sshd日志来阻止攻击
  • 使用tcp_wrappers来阻止攻击
  • 敲门

我使用了fail2ban ,它会在几次失败的尝试之后locking一个IP地址一段可configuration的时间。

结合密码强度testing(使用john (John the Ripper))来确保powershell攻击不会成功。

你可以做的小事情就是使用类似DenyHosts的东西:

http://denyhosts.sourceforge.net/

它使用内置的hosts.allow / hosts.deny来阻止SSH滥用者。

避免这些攻击最简单的方法之一是更改sshd监听的端口

  • 更改使用的端口 (如Trent所述)
  • 需要encryption密钥而不是密码。 http://novosial.org/openssh/publickey-auth/
  • 黑名单攻击者ips
  • 白名单知名的用户可以防止意外的黑名单。 (就像Samiuela所说的那样)

正如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,重载刷新全局)

端口敲击是保持这种事情的一个非常稳固的方式。 有点烦躁,有时令人讨厌,但这绝对会让问题消失。

上下文很重要,但是我会推荐如下的东西:

  • 由于您使用的是FreeBSD,请考虑运行PF防火墙并使用其稳定的连接速率限制function。 这将允许你发送蛮力的黑名单,如果他们频繁的连接
  • 如果必须从外部访问此框,请考虑使用PF rdr规则不允许通信到端口22,而是将一些模糊的端口redirect到它。 这意味着,你必须连接到端口9122而不是22.它是模糊的,但它保持了敲门人
  • 考虑只转移到基于密钥的authentication,使字典攻击无用

除了sherbang的限速build议之外 ,延迟时间的长短也很重要。 通过将3次login尝试的组之间的延迟从2分钟增加到20分钟,使得三次以上尝试login的不同IP地址的数量下降,比较一台机器上两周的时间,从44次尝试到3次这三个地址中的任何一个都不会超过11个小时。

非常轶事,但auth.log成为一个更加可读的我…

我只是不在乎。 让他们带着这个港口,他们不会蛮横的。

安装OSSEC。 不仅监视重复login,它将进入一个iptables的临时块为违规ip。 最后它会向你发送一份报告,说明细节。 它会logging一切,这很好。 Somone曾经尝试过超过8000个login名来login。 我parsing了日志,并得到了一个不错的用户列表不成交;)