我刚刚检查了我的服务器/var/log/auth.log
,发现每天收到超过 500 条密码失败/入侵尝试通知!我的网站很小,而且 URL 很模糊。这是正常的吗?我应该采取什么措施吗?
答案1
不幸的是,在当今的互联网中,这种情况很常见。有成群的僵尸网络试图登录他们在整个 IP 网络中找到的每个服务器。通常,他们会对知名帐户(如 root 或某些应用程序帐户)使用简单的字典攻击。
攻击目标不是通过 Google 或 DNS 条目找到的,而是攻击者会尝试特定子网(例如,已知根服务器托管公司)中的每个 IP 地址。因此,您的 URL(因此 DNS 条目)比较模糊并不重要。
这就是为什么以下做法如此重要:
此外,您还可以安装失败2ban它将扫描 authlog,如果发现某个 IP 有一定数量的登录尝试失败,它将继续将该 IP 添加到/etc/hosts.deny
iptables/netfilter,以便将攻击者锁定几分钟。
除了 SSH 攻击外,扫描 Web 服务器以查找易受攻击的 Web 应用程序(某些博客应用程序、CMS、phpmyadmin 等)也变得越来越常见。因此,请确保保持这些应用程序的更新和安全配置!
答案2
几百次就够了……上个月我发现我的一台服务器有 4 万次失败尝试。我费了好大劲才把它们画出来:地图
一旦我更改了 ssh 端口并实施了端口敲击,这个数字就下降到了 0 :-)
答案3
我除了只允许公钥认证和禁止根登录外,还使用“tarpit”。
其中netfilter
有一个recent
模块,您可以将其与(INPUT
链)一起使用:
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --set --name tarpit --rsource
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 6 --name tarpit --rsource -j DROP
iptables -A INPUT -i if0 -p tcp --dport 22 -j ACCEPT
这样做的目的是,模块会将连接到端口 22 的每一次尝试recent
以及 IP 和一些其他内容列在名称“tarpit”下(如果您感兴趣,请查看/proc/net/xt_recent/tarpit
)。显然,您可以使用其他名称。
要列出或删除 IP,请使用:
echo "+123.123.123.123" > /proc/net/xt_recent/tarpit
echo "-123.123.123.123" > /proc/net/xt_recent/tarpit
此速率限制将尝试次数限制为 300 秒内 5 次。请注意,具有现有连接的用户不受此限制的困扰,因为他们已经建立了连接并被允许创建更多连接(甚至超过速率限制)。
根据您的喜好调整规则,但确保按该顺序添加它们(即,添加时按此顺序使用它们,插入时按相反顺序使用它们)。
这极大地减少了噪音。它还提供了实际的安全性(防止暴力破解),这与更改端口的感知安全性不同。但是,如果在您的环境中可行,我仍然建议更改端口。它也会大大降低噪音水平...
您仍然可以将它与 fail2ban 结合使用,尽管我没有它并且只有上述规则也运行得很好。
编辑:
这样做可能会导致自己被锁定,因此您可以添加类似下面的内容,通过敲击特定端口来清除禁令:
iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove
答案4
是的。这现在很正常。
如果可能,请仅将公钥身份验证用于管理目的。在您的工作站上生成私钥:
$ ssh-keygen -t dsa
复制粘贴内容〜/.ssh/id_dsa.pub到你的服务器〜/.ssh /授权密钥(以及 /root/.ssh/authorized_keys,如果您需要直接 root 登录)。
配置服务器/etc/ssh/sshd_config仅接受公钥认证:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password
如果你有太多服务器,你可以使用木偶运行公钥和配置。