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

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

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

答案1

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

查看这本出色的手册以了解不同的方法(包括 RSA 身份验证):http://www.la-samhna.de/library/brutessh.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

如上所述这里:这将允许在 60 秒内从任何给定 IP 地址进行三次 22 端口连接,并且要求 60 秒内没有后续连接尝试,然后才会再次允许连接。 --rttl 选项还会在匹配数据包时考虑数据报的 TTL,以尽力减轻对伪造源地址的攻击。

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

iptables -N SSH_WHITELIST

然后添加受信任的主机:

iptables -A SSH_WHITELIST -s $TRUSTED_HOST -m recent --remove --name SSH -j ACCEPT

然后制定规则:

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

答案2

我的服务器每天会遭受 1 到 2 次暴力 ssh 攻击。我安装了拒绝主机(ubuntu 软件包:denyhosts)。这是一个非常简单但有效的工具,可用于此目的:本质上,它会定期扫描您的日志以检测暴力攻击,并将这些攻击的来源 IP 放入您的 /etc/hosts.deny 文件中。您不会再收到这些攻击,并且您的负载应该会大大减少。它可通过其配置文件 /etc/denyhosts.conf 进行配置,以调整问题,例如多少次错误尝试构成一次攻击等。

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

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

此外,iptables 中的新连接速率限制可能比通过 hosts.deny 拒绝访问更好。因此,也请查看 fail2ban。但如果你知道 ssh 暴力破解是你的主要担忧(手动查看 /var/log/auth.log 来确定这一点),请使用这个非常简单且影响较小的工具。

答案3

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

答案4

服务器在网络上暴露的范围有多广?也许你可以和网络管理员谈谈,看看是否可以监控和限制对服务器的网络访问。即使账户登录是安全的,服务器似乎也可能遭受简单的 DoS / DDoS 攻击。

相关内容