问题描述
我的密码很安全,但我听到人们抱怨在发生暴力攻击时服务器的性能会急剧下降。如何保护我的 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 来确定这一点),请使用这个非常简单且低影响的工具。
第三种思路
-
将 sshd 端口更改为非标准端口
-
使用
knockd
实现port-knocking系统 -
使用 iptables 的
recent
和hashlimit
匹配来限制连续的 SSH 尝试 -
不要使用密码,而是使用 SSH 密钥
第四种思路
首先,您应该考虑不使用密码并使用密钥。无需使用密码。如果这对您有用,您可以将 OpenSSH-server 配置为不对密码登录做出反应。
https://help.ubuntu.com/10.04/serverguide/C/openssh-server.html
使用fail2ban 也可能是一种选择。
https://help.ubuntu.com/community/Fail2ban