如何保护 ubuntu 服务器免受暴力 ssh 攻击?

Dzi*_*mid 25 ssh iptables security apparmor

我的密码是安全的,但我听到有人抱怨在发生暴力攻击时服务器的性能会急剧下降。如何保护我的 ubuntu 10.10 服务器免受此类攻击?有没有这方面的 apparmor 配置文件?或者有什么其他的解决方法?

Ped*_*ram 21

有不同的解决方案。最好的方法是使用 RSA 身份验证,该身份验证使用公钥/私钥对用户进行身份验证。

查看这个很棒的手册以了解不同的方法(包括 RSA 身份验证):http : //www.la-samhna.de/library/brutesh.html

我在我的服务器上使用第三个解决方案,因为我不想让我的非技术用户变得复杂:iptables用于限制每分钟的连接数,这会使暴力攻击效率低下且无效。

这是我正在使用的解决方案:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
Run Code Online (Sandbox Code Playgroud)

如前所述这里:这将使三大港口从60秒的时间内任何给定的IP地址22个连接,无需后续连接尝试60秒的时候,才再次恢复允许连接。--rttl 选项在匹配数据包时还考虑了数据报的 TTL,以尽量减少欺骗源地址。

正如上述指南中所述,最好使用白名单将受信任的用户与这些规则分开:

iptables -N SSH_WHITELIST
Run Code Online (Sandbox Code Playgroud)

然后添加受信任的主机:

iptables -A SSH_WHITELIST -s $TRUSTED_HOST -m recent --remove --name SSH -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

然后制定规则:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
Run Code Online (Sandbox Code Playgroud)


DrS*_*SAR 9

我的服务器遭到暴力 ssh 攻击,速度为每天 1 到 2 次。我已经安装了denyhosts(ubuntu 包:denyhosts)。这是一个非常简单但有效的工具:本质上它会定期扫描您的日志以检测蛮力攻击,并将来自这些攻击的 IP 放入您的 /etc/hosts.deny 文件中。你不会再收到他们的消息,你的负担应该会大大减少。它可以通过其配置文件 /etc/denyhosts.conf 进行配置,以调整诸如多少次错误尝试构成攻击等问题。

由于其透明的工作方式,您可以轻松查看正在发生的事情(电子邮件通知:“啊哈,又一次卑鄙的攻击被挫败了!”)并撤消由于用户反复输入错误密码而导致的错误。

当然,之前关于切换到其他身份验证方法的所有内容都成立,但有时您的要求与您的用户的要求不一致。

此外,与通过 hosts.deny 拒绝访问相比,iptables 中的新连接速率限制可能是更好的选择。所以,也看看fail2ban。但是,如果您知道 ssh 蛮力是您的主要关注点(手动查看 /var/log/auth.log 以确定这一点),请使用这个非常简单且低影响的工具。

  • 嗯,这意味着 IP 218.15.136.38 上的某个人试图以 root 身份登录。可能是你,但可能不是因为使用 http://tools.whois.net/whoisbyip/ ,我可以看到这个 IP 是在中国注册的,这与明斯克相去甚远;-) 所以,是的,这看起来像猜测你的密码。道德:通过 ssh 禁用 root 登录(/etc/ssh/sshd_config 中没有 PermitRootLogin),因为没有充分的理由将其保留。然后考虑denyhosts 或fail2ban。另外,请确保您有一个防火墙,只允许通过端口 22 进行必要的访问以及您需要的任何其他内容(但不是更多) (2认同)

pep*_*uan 6

  1. 将 sshd 端口更改为非标准端口
  2. 使用knockd来实现端口敲门系统
  3. 使用 iptablesrecenthashlimit匹配来限制连续的 SSH 尝试
  4. 不要使用密码,而是使用 SSH 密钥

  • @steabert 它有助于防止脚本小子试图通过端口 22 对其进行暴力破解。这是我的经验:有人在我设置面向 Internet 的服务器时不断对其进行暴力破解,使系统在警告后向我发送警告。我移动了端口,警告消失了。 (4认同)
  • -1 对于第一个建议,实际上没有真正增加安全性,使事情复杂化 (3认同)
  • @Dziamid 不,不正确。其他身份验证方法(RSAAuthentication、PubkeyAuthentication、#KerberosAuthentication 等)仍然通过端口 22 进行联系。 (3认同)