防止 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”安装。 我必须将 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.