每天进行数百次闯入尝试是否正常?

Kyl*_*yle 196 security linux firewall ssh

我刚刚检查了我的服务器/var/log/auth.log,发现我每天收到 500 多个失败的密码/入侵尝试通知!我的网站很小,而且它的 URL 很模糊。这是正常的吗?我应该采取什么措施吗?

Hol*_*ust 207

可悲的是,在今天的互联网上,这很正常。有成群的僵尸网络试图登录他们在整个 IP 网络中找到的每台服务器。通常,他们对知名帐户(如 root 或某些应用程序帐户)使用简单的字典攻击。

攻击目标不是通过 Google 或 DNS 条目找到的,但攻击者只是尝试某个子网中的每个 IP 地址(例如,已知的根服务器托管公司)。因此,您的 URL(因此是 DNS 条目)相当模糊并不重要。

这就是为什么如此重要的原因:

  • 不允许根登录在SSH(HOWTO
  • 在任何地方使用强密码(也在您的 Web 应用程序中)
  • 对于 SSH,如果可能,请使用公钥身份验证并完全禁用密码身份验证(howto

此外,您可以安装fail2ban,它会扫描 authlog,如果它从某个 IP 发现一定数量的失败登录尝试,它将继续将该 IP 添加到/etc/hosts.denyiptables/netfilter 以锁定攻击者几分钟。

除了 SSH 攻击之外,扫描您的网络服务器以查找易受攻击的网络应用程序(一些博客应用程序、CMS、phpmyadmin 等)也变得很普遍。因此,请确保使这些内容保持最新并进行安全配置!

  • 并将 ssh 的端口从 22 移动到 222。这很好用。 (46认同)
  • +1,仅限公钥认证:) (40认同)
  • 诸如fail2ban之类的应用程序可以在很大程度上帮助“暂时”阻止那些机器人在早上愚蠢的时间访问您的服务器:-)我已将我的设置设置为在24小时内禁止3次不正确的尝试。 (21认同)
  • 像这样阻止攻击者是浪费时间。如果您禁用 root 登录,很有可能没人会猜到您的正确登录名,更不用说密码了。SSH 本身已经对密码请求进行了速率限制,因此即使他们知道您的用户名(随机机器人不会),如果您有一个合适的密码,他们也永远不会猜到。 (4认同)
  • @STATUS_ACCESS_DENIED:fail2ban 采取的操作只是要运行的 shell 命令列表。因此,它非常灵活且易于使用任何自定义配置正常工作。最好的参考是下载它并查看`action.d/iptables.conf`。 (3认同)
  • 我建议 [DenyHosts](http://denyhosts.sourceforge.net/) 它与中央服务器共享服务器的入侵尝试日志。这允许您通过告诉 DenyHosts 您想要阻止在上周左右的时间里有 6 次或更多失败尝试记录的共享主机来“主动”阻止主机。它会在给定的时间段后自动清除被阻止的主机,并相应地清除它的 iptables 规则。 (2认同)
  • 尝试使用 ipsets 代替 iptables 规则或 hosts.deny。您制定一个 iptables 规则来阻止集合中的每个 IP/网络,然后将 IP 添加到集合中。ipset 实现非常快:比 iptables 规则链快得多。 (2认同)

Bar*_*Vos 58

几个 100 就好了……上个月我发现我的一台服务器有 40k 次失败的尝试。我经历了绘制它们的麻烦:地图

一旦我更改了 ssh 端口并实施了端口敲门,这个数字就会下降到 0 :-)

  • 通过默默无闻的安全得到了糟糕的包装。只要它是整体战略的_一部分而不是整个战略,它就完全没问题。毕竟,除了晦涩难懂的字符串之外,还有什么密码? (18认同)
  • @jftuga 我首先从日志中获取了所有 IP。`grep '密码失败' /var/log/secure* | grep sshd | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9 ]\{1,3\}' | 排序 | uniq`(如果要允许重复,请删除末尾的 | uniq)。然后,您可以将它们放入 CSV 文件并将其上传到 zeemaps.com。我见过比我更好的地图,他们会使用计数为地图着色(每个县的尝试次数为绿色到红色),但我还没有想到那个 (9认同)
  • @Joel Coel,它是一个 _secret_ 字符串,而不是通过模糊问题实现的大多数安全性 - 一个晦涩但不一定是秘密的过程。 (5认同)
  • “实施端口敲门”是什么意思?是否有我可以通过 apt-get 安装的应用程序来执行此操作?数字下降到 0 听起来不错 (3认同)
  • 不错的地图。我很想知道如何做到这一点! (2认同)

0xC*_*22L 29

除了只允许公钥身份验证和禁止 root 登录之外,我还使用了“tarpit”。

其中netfilter有一个recent模块,您可以将其与 ( INPUTchain) 一起使用:

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
Run Code Online (Sandbox Code Playgroud)

它的作用是,每次尝试连接到端口 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
Run Code Online (Sandbox Code Playgroud)

此速率将尝试限制为 300 秒内 5 次。请注意,具有现有连接的用户不会受到该限制的困扰,因为他们已经建立了连接并且可以创建更多连接(甚至超过速率限制)。

根据您的喜好调整规则,但请确保按该顺序添加它们(即添加时按此顺序使用它们,插入时则以相反的顺序使用它们)。

这极大地降低了噪音。与更改端口的感知安全性不同,它还提供了实际的安全性(防止暴力破解)。但是,如果在您的环境中可行,我仍然建议更改端口。它也会大大降低噪音水平......

您仍然可以将它与fail2ban结合使用,尽管没有它并且只有上述规则我一直运行得很好。

编辑:

这样做可以将您自己锁定,因此您可以添加类似以下内容,让您通过敲击特定端口来清除您的禁令:

iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove
Run Code Online (Sandbox Code Playgroud)

  • 我使用它并偶尔设法阻止自己,所以想设置另一个端口,您可以“敲”以清除您的禁令。 (2认同)

Jac*_*cob 15

您可以实施fail2ban或类似的方法,例如将 SSH 锁定到您的 IP。可悲的是,bots 一直试图暴力访问,所以这是很正常的,你需要确保你有一个好的密码。

  • 如果您使用 SSH,请考虑使用公钥身份验证。这比密码认证更安全。 (3认同)

jkj*_*jkj 12

是的。这在今天很正常。

如果可能,请仅将公钥身份验证用于管理目的。在您的工作站上生成私钥:

$ ssh-keygen -t dsa
Run Code Online (Sandbox Code Playgroud)

~/.ssh/id_dsa.pub的内容复制到你的服务器~/.ssh/authorized_keys(和 /root/.ssh/authorized_keys,如果你需要直接 root 登录)。

将您的服务器/etc/ssh/sshd_config 配置为仅接受公钥身份验证:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password
Run Code Online (Sandbox Code Playgroud)

如果你有太多的服务器,你可以使用Puppet来运行它们的公钥和配置。

查看Denyhostsfail2ban以阻止重复的 SSH 登录尝试,如果您需要完整的 IDS/IPS ,请查看Snort

  • @Deleted 帐户:您可以为 SSH 私钥设置密码。 (5认同)
  • 我不建议在 SSH 中使用公钥身份验证来访问您的服务器。如果您的工作站受到威胁,或者更糟的是被盗,那么现在有人无需密码就可以开放访问您的服务器。公钥身份验证更适用于您需要脚本或程序之类的东西,以便能够在不需要密码的情况下通过 SSH 访问另一个系统的情况,因此您不必在脚本/程序中嵌入纯文本密码。 (2认同)
  • “注册用户”的评论是错误的。澄清一下:始终为您的私钥设置一个好的密码,不要将私钥存储在任何服务器上。将私钥保存在您自己的工作站上。一旦您将密钥添加到 ssh-agent 程序并输入您的密码,您就可以登录到每个安装了公钥的系统,而无需再次输入您的密码。在 ssh 客户端中启用代理转发,以便您可以从服务器登录到服务器。私钥被盗是很糟糕的事情,但是有了一个不错的密码,它并不像被盗密码那么糟糕。 (2认同)

小智 8

使用http://denyhosts.sourceforge.net/

是的,您应该使用公钥身份验证并禁用密码身份验证。


ada*_*amo 6

尝试是机械化的,所以数字看起来还可以(是的,与某些站点相比,它们很高,而与其他站点相比则很低)。您应该采取通常必须的步骤: 您每天都将您的站点视为攻击目标,即使您没有检测到攻击;没有检测到攻击,并不意味着它不存在


Jam*_*hek 6

我想说只得到 500 有点低。

在前任雇主处,其中一位计算机安全研究人员将源源不断的闯入尝试称为“宇宙噪音的互联网等价物”。他将其描述为正常、持续的恶意流量流,它在互联网上搜索系统并自动利用脚本来试图劫持系统。僵尸网络和其他恶意系统会不断地扫描和重新扫描互联网,寻找易受攻击的系统,就像 SETI 一样。


小智 6

是的,

这很常见,但这并不意味着你不应该打好仗。以下是有关如何使服务器更安全的一些步骤。

避免与 DNS 关联的 IP 地址

您可以通过禁用对与域名关联的任何 IP 地址的 SSH 访问,在共享或托管环境中大大减少此数量。未列出的非域 IP 地址收到的此类流量较少,因此请购买未列出的 IP,并且仅将此 IP 用于 SSH 访问。

使用 VPN 进行所有 SSH 访问

如果您所在的环境可以将IPsec /VPN实施到服务器环境中的专用网络,那么这是理想的选择。禁用所有 SSH 互联网访问,确保您有一个集成的熄灯解决方案。设置您的 VPN,并且只允许从您的 VPN 进行 SSH 访问。

为 SSH 访问实施 IP 地址规则

如果 VLAN 不是一个选项,请将您的路由器或防火墙规则配置为仅允许来自已知 IP 地址范围的 SSH 连接。

如果您按照这些步骤操作,您将在晚上睡得更轻松,因为您知道有人必须破坏您的托管公司网络才能通过 SSH 访问服务器。


小智 5

看到数百个失败的 SSH 连接很正常。

如果您可以选择,我只需将 SSH 端口更改为非标准端口即可。它不一定会使您的服务器更安全,但它确实会清理日志(并让您看到任何人故意试图闯入!)


JRW*_*JRW 5

除了使用像fail2ban这样的自动锁定机制之外,您还有一个选择:实际联系攻击者的滥用地址ISP。这似乎完全是徒劳的,但在脚本小子的情况下,他们的 ISP 非常愿意对他们采取行动。

要查找滥用地址,请从arin.net开始并使用 whois 查找 IP 地址。您可能会被重定向到另一个区域注册中心,但最终您可以找到包含该地址的 IP 块的负责 ISP。查找abuse@ 地址或直接向技术联系人发送邮件。

向他们发送带有相关日志文件条目的礼貌消息(确保删除任何私人信息),并要求他们对违规主机采取行动。

  • 我们曾经这样做过。然而,花费的时间与获得的收益相比非常小,这并不重要。 (4认同)