防止暴力攻击ssh?


49

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

它在FreeBSD上,但是我想它会在任何地方都适用。

Answers:


25

这是Rainer Wichmann撰写的关于该主题好文章

它说明了实现这些方法的利弊:

  • 强密码
  • RSA认证
  • 使用“ iptables”阻止攻击
  • 使用sshd日志阻止攻击
  • 使用tcp_wrappers阻止攻击
  • 港口敲门

39

我使用fail2ban,它将在几次尝试失败后将IP锁定在可配置的时间内。

将此与密码强度测试(使用john(开膛手John))结合使用,以确保暴力攻击不会成功。


4
Fail2ban非常好。很容易将其扩展为监视/ var / log / maillog并使其禁止持久性垃圾邮件发送者攻击我的邮件服务器
Dave Cheney

TARPIT如果您感到不舒服,可以将Fail2ban与iptables链结合使用,该链将tcp流量发送到目标(来自xtables-addons)。
东武



15

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


1
如果您的系统当然可以承受。
C. Ross,

13
默默无闻的安全性,每一次都有效。
克里斯·巴伦斯

1
我不介意这么多地更改端口,但是我了解到,大多数防火墙(除了我自己的防火墙之外)都倾向于锁定除通用端口(80、22、443等)之外的所有端口。如果我在那些防火墙后面,则无法通过该非标准端口访问我的家庭服务器。对我来说这是不行的。
悲伤

然后@grieve更改我们的防火墙以允许该端口出局?
罗里

@Roy我在谈论除我拥有的防火墙以外的防火墙。例如,如果我想从星巴克SSH进入我的家用计算机,它们的防火墙将阻止传出端口。我无法改变。(我仅以星巴克为例。我不知道它们实际上阻塞了什么端口)。
2012年

12

克里斯指出,请使用加密密钥而不是密码。

补充一点:

  • 尽可能使用白名单。

您确实需要访问多少个人或地点(具有浮动的公共IP)?

根据要维护的公共ssh主机的数量以及是否可以缩小常规连接条件的范围,这可能是一种更简单的可维护配置,以限制对某些外部主机的访问。

如果这对您有用,那么实际上可以简化您的管理开销。


2
如果您要进行任何形式的黑名单,除非您不想被锁定,否则白名单非常重要。
Ryaner

2
+1可以主动将其列入白名单。
克里斯·巴伦斯

3
+1为绝对最佳答案。这两件事是唯一合理的步骤,它们确实非常有效。任一个都是值得的,而两者都更值得。嘘在其他答案上提倡通过默默无闻的安全性!
dwc

11

除了其他好的建议,一个真正容易的事情是限制传入连接的速率。每个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

我可能会被误解的东西,但许多主流浏览器4-6连接之间连接在同一时间-尽管HTTP标准规定它在2
约书亚恩菲尔德

1
是的,如果您尝试对端口80进行速率限制,那将是一个问题。您未通过Web浏览器连接到ssh,并且ssh会话是维持状态的长期会话,而不是短暂的无状态会话,例如http。像这样并行化ssh会话是没有意义的。这并不是说ssh不会使用某些利基的用途,但是这种情况很少见。
sherbang 2011年

如果像我一样,您正在通过ssh服务Subversion,则此解决方案不是很好。单个SVN查询可以快速连续地建立大量连接。如果提供该服务,则可以在另一个端口上使用第二个sshd服务,也可以将已知IP列入白名单。我正在考虑使用fail2ban或sshdfilter第一次捕获明显的攻击,而不会惩罚我的合法用户。
稻谷

很高兴也知道这个选项...
ZEE

6

使用sshd_config中的“ AllowUsers”选项可确保仅一小部分用户可以登录。即使其他所有用户名和密码正确,也会被拒绝。

您甚至可以限制用户只能特定主机登录。

例如,

AllowUsers user1 user2@host.example.com

这将减少搜索空间,并避免那些偶然被闲置或启用的旧用户(尽管当然应该禁用这些旧用户,这是阻止他们被用于基于SSH的条目的简便方法)。

这并不能完全阻止暴力攻击,但可以帮助降低风险。


3

对PF使用类似的东西:

表<ssh-brute>
在标签ssh_brute的快速日志中持久存储块,
将$ ext_if原始tcp传递到($ ext_if)端口ssh调制状态\
(max-src-conn-rate 3/10,过载刷新全局)


2

端口敲门是将此类问题排除在外的非常可靠的方法。有点轻率,有时很烦人,但这绝对使问题消失了。


我已经尝试过了,用户发现它很烦人。如果只有一两个人,这可能是个不错的选择,并且几乎可以消除暴力攻击
布伦特(Brent)2009年

2

上下文很重要,但是我建议像这样:

  • 由于您正在使用FreeBSD,请考虑运行PF防火墙并使用其可靠的连接速率限制功能。如果频繁连接,这将使您可以将蛮力发送者列入黑名单
  • 如果必须从外界访问此框,请考虑使用PF rdr规则不允许流量进入端口22,而是将一些晦涩的端口重定向到该端口。意思是,您必须连接到端口9122而不是22。这虽然晦涩难懂,但可以避免门环
  • 考虑仅转向基于密钥的身份验证,从而使字典攻击无用

2

除了 sherbang的限速建议之外,延迟的时间很重要。通过将3次登录尝试的组之间的延迟从2分钟增加到20分钟,进行超过3次登录尝试的不同IP地址的数量减少了,比较一台我的机器上两个星期的时间,从44次尝试到3次。这三个地址都没有尝试超过11小时。

非常有趣,但是auth.log对我来说更具可读性...


1

我只是不在乎。让他们在港口带走,他们不会用力一把钥匙。


-1听说过DoS攻击吗?
克里斯·巴伦斯

8
是的,因为SSH是唯一容易受到暴力攻击的服务。如果您有开放到Internet的端口,则可以使用它来破坏您的计算机。您可能也将HTTP服务器也放在了奇怪的端口上,并在端口敲除之后,以“避免DoS攻击” ...
womble

1

安装OSSEC。它不仅监视重复登录,还将进入一个临时表,其中包含违规ip的iptables。最后,它将向您发送报告,说明详细信息。它记录了所有内容,这很好。Somone曾经尝试使用8000多个登录名进行登录。我解析了日志,得到了不错的用户列表;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.