当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

最佳思路

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

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

我在服务器上使用 3rd solution 是因为我不想让非技术用户变得复杂:使用 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

如前所述,here :这将允许在 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

次佳思路

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

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

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

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

第三种思路

  1. 将 sshd 端口更改为非标准端口

  2. 使用knockd实现port-knocking系统

  3. 使用 iptables 的 recenthashlimit 匹配来限制连续的 SSH 尝试

  4. 不要使用密码,而是使用 SSH 密钥

第四种思路

首先,您应该考虑不使用密码并使用密钥。无需使用密码。如果这对您有用,您可以将 OpenSSH-server 配置为不对密码登录做出反应。

https://help.ubuntu.com/10.04/serverguide/C/openssh-server.html

使用fail2ban 也可能是一种选择。

https://help.ubuntu.com/community/Fail2ban

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13967.html,未经允许,请勿转载。