防止 Linux 系统被入侵

还没有读者喜欢这篇文章。
Can government agencies be innovative?

Opensource.com

我们经常听到安全漏洞,用户名和密码被盗并在网上公布。 大多数情况下,显示的是大多数密码非常简单,或者是先前版本的迭代(例如,12345 紧接着 123456 进行下一次更改)。 实施密码要求可以帮助您避免在您的环境中使用弱密码。 这些强制更改有利有弊,但归根结底,身份验证仍然存在缺陷。

在 Linux 中管理密码和安全相关问题非常重要,但是您可以采取一些简单的步骤来使您的系统更安全。 下面介绍了一些可以考虑的选项。 首先,让我们看一下如何管理这些密码和帐户,然后看一下人们尝试访问这些帐户的频率。 最后,我们将介绍一些可以限制这些尝试的方法。

Linux 密码管理

使用 passwd 命令更改用户密码非常简单,但是它可以做更多的事情。 您是否知道您也可以使用它来锁定和解锁帐户? 如何通过标准输入(stdin)传递密码?

更改密码

passwd [用户名]

通过标准输入(stdin)更改密码

echo “Some_STRONG_PASSWORD” | passwd --stdin root

锁定和解锁密码

passwd -l [用户名] passwd -u [用户名]

文件

当您使用密码时,/etc/passwd/etc/shadow 文件都会更新。 passwd 文件包含很多信息,但具有讽刺意味的是,不包含实际的密码哈希值。 哈希值包含在 /etc/shadow 文件中。

为什么要有 /etc/shadow 文件?

早期,哈希密码存储在 /etc/password 文件中,但是存在一个问题:每个人都需要能够读取此文件。 每个人都可以访问您的密码哈希值不是一件好事。 因此,实际的哈希值已移至 /etc/shadow 文件,该文件只能由特权用户读取。

尝试入侵的频率有多高?

您是否想知道有多少人尝试登录到您的公共服务器? last 命令向我们显示了成功尝试的次数。 lastb 命令向我们显示了不成功的尝试次数。 例如,我的服务器在过去 12 小时内有 7,464 次不成功的尝试。

额外提示:last 和 lastb 命令分别写入 /var/log/wtmp/var/log/btmp 文件。 如果您发现这些文件被清零,则可能存在问题。

我们还能做什么?

我们已经看到,可能会有大量尝试登录到公共系统的行为。 那么,我们能做什么呢? 我们可以采取一些措施来限制或减轻尝试的次数。

更改端口

我们可以做的第一件事是更改 SSH 监听的端口。 这可以减少一些尝试,但是也有像 nmap 这样的工具可以扫描开放端口。

防火墙

防火墙(iptables、UFC 和 firewalld)很棒。 他们的目标是将对 SSH 的访问限制到较小的服务器集。 缺点是,如果您的 IP 更改或您尝试从新位置登录,有时您可能会把自己锁在外面。

Fail2Ban

通过 lastb 命令,我们可以使用像 Fail2Ban 这样的工具,在一定数量的不成功尝试后自动阻止 IP。

我希望这有助于您深入了解服务器上的密码,并为您提供一些限制攻击媒介的方向。

User profile image.
Alex Juarez 是 Rackspace 的首席工程师,在该公司工作了 11 年。 Alex 喜欢所有开源事物,以及培训和指导他人,并且非常有资格担任 RHCA/RHCI。 Alex 在许多区域和全国性的开源会议上发表过演讲,分享知识并鼓励人们学习更多。

14 条评论

感谢这篇精彩的文章。 我从中学习到了一些好东西。 您还提醒了我 lastb 命令,我完全忘记了它。

我通过 wtmp 记录的黑客尝试次数比您少得多,主要是因为我在防火墙上使用了 Fail2Ban。 我曾经一次被 Fail2Ban 阻止了多达 300 个左右的 IP 地址。 通常这个数字大约是十几个左右,但是攻击似乎是成波进行的。

再次感谢您分享您的专业知识。

很棒的文章! 网络和机器安全与 Linux 和任何其他系统一样重要。 随着 Linux 在小型企业中作为服务器应用程序越来越受欢迎,我们仍然必须采取额外的步骤,以确保降低漏洞的可能性。

好提示。 我更进一步,不仅更改端口,而且使用类似 fail2ban 的东西来监视日志,并且任何尝试在端口 22 上连接的 IP 都会被完全禁止我们的子网 2 周。 阻止了大多数脚本小子。 因此,如果您使用 nmap 扫描我,那么只要您触摸到正常的 SSH 端口,您就会消失。

在“我们还能做什么?”下,您从未提及 knock 守护程序 (knockd)。 这是阻止对您的系统进行攻击的最简单的方法,因为在您给出正确的敲击之前,端口甚至没有打开。

此外,在我的任何服务器上,您都找不到包含 passwd 或 user 或 home 或 admin(如 wp-admin 中)或几个其他单词的文件或子目录。 因此,当有人 http 到 mysite.com/../../../../../../etc/passwd 时,我的 403.php 会将他们的 IP 添加到我的 htaccess 文件中,并拒绝来自 ...

99% 的第三方软件包(即 Zencart)使用子目录“admin”安装。 我必须 mv admin nancy,然后找到对“admin”的所有引用并对其进行编辑 - 有时会很麻烦。

echo “Some_STRONG_PASSWORD” | passwd -stdin root

永远不要使用此命令。 明文密码可能会记录在 shell 的历史记录文件中,并且如果 echo 不是 shell 中的内置命令,则密码可能会短暂地对其他进程可见。

呃。 不要更改端口。 这是一个操作上的噩梦,因为然后您必须始终配置所有使用 ssh 的东西来使用新端口。 并且从经验来看,无论如何都会找到这些新端口。 您要做的不是更改端口,而是需要公钥身份验证,这完全消除了密码的问题(而这才是真正的问题)。

好文章。 我还想指出,更改端口(对于 ssh)不应该是安全的最终目的。 它可以阻止不太智能的自动扫描程序,但是如今,这些更改很容易被发现。 您可以通过向 iptables 为指定的端口添加 REJECT 规则来混淆端口扫描程序。 这可能会使扫描程序误以为被扫描的端口是一个已关闭且未使用的端口。

此外,不建议通过标准输入(stdin)使用 passwd 命令在命令行中输入。 这可能会存储在您 shell 的历史记录文件中。

在我看来,任何公共 ssh 服务器都必须具有 fail2ban。

我拥有多台服务器,它们整天都在遭受暴力破解尝试。 如果没有 fail2ban,总有一天会有人找到 root 密码。 在不久的将来,我肯定会禁止来自中国和俄罗斯的一些 ISP,因为它们是 95% 的来源。

我想知道使用密钥进行 ssh 是否更安全,因为如果密钥被盗,它可能是一样的。

禁止单个 IP 有其局限性,因为云:可以自动使用临时计算机进行扫描,直到它被禁止,然后使用另一台计算机,依此类推。
某些云提供商中的“滥用”服务将有很多工作要做...

一个问题可能来自 IPv6,如果它没有得到很好的管理。 有时默认情况下会激活它,而没有 fail2ban 机制:危险。

我一直在问自己,为什么 fail2ban 没有原生集成到 sshd 中?

在 /etc/ssh/ssd_config 中

PermitRootLogin no
AllowUsers username1 username2

超过 90% 的暴力登录尝试都尝试 root - 将其作为选项删除

我很惊讶没有提到双重身份验证。 我的家庭服务器只能从已知的 IP 地址访问,不允许 root 登录,仅使用密钥对身份验证,最后是双重身份验证。 这是一个每分钟以同步方式生成六位数密钥的系统,因此只有您可以在任何给定时刻知道它。 搜索“Google 验证器与 Linux”以获取易于遵循的说明。

我也广泛使用“fail2ban”。
我还将 SSH 配置为禁止所有交互式身份验证。 换句话说,如果您没有 SSH 密钥,您就无法进入。
所有不需要 shell 的帐户都将其 shell 字段设置为 /usr/sbin/nologin 或 /usr/bin/false。

可能值得注意的是,/var/log/btmp 用于控制台登录。 如果您对登录失败的 ssh 尝试感兴趣,您可能想查看 /var/log/auth.log 文件,因为我认为这是 Debian 和类似 Debian 系统下的默认设置。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.