安装 Linux 服务器后要做的 12 件事

Cloud 计算已经彻底改变了服务器场景。 许多平台都提供免费的 Linux 云服务器,您可以通过这些云平台在几分钟内部署您的 Linux 服务器。

当您启动新服务器时,特别是如果它在 Internet 上可见,那么坏人会立即使用它,通过他们的自动化机器人脚本搜索暴露的服务器以查找错误配置和漏洞。

安装 Linux 服务器后,您必须做一些事情,以确保您的服务器不会受到损害。

这是什么的屏幕截图 Fail2ban 最近在我的一台服务器上看到过。

212 次错误登录尝试和 6 个被阻止的 IP 地址。 来自试图登录我的服务器的未经授权的人员或脚本的所有流量。

几个关键的第一步将帮助您保护您的新服务器版本免受损害。

我在这里考虑了两个最流行的 Linux 服务器发行版: Ubuntu中央操作系统/红色的帽子。 请检查您运行的是哪个 Linux。

大多数建议在这里都是通用的,除非特别提及,否则应该适用于其他 Linux。

以下是我建议您检查以确保 Linux 服务器的安全性的事项。 我提供了单独的步骤,但如果您想快速完成, 我还创建了一个脚本,您可以在您部署的任何新服务器上快速运行它.

1.确保设置了非root用户

Root是万能的,你不需要一直拥有root权限。

root 也是几乎每个 Linux 系统上的有效用户名。 这意味着如果它启用了远程身份验证,攻击者的一半工作,获得一个有效的用户名就完成了。

此外,如果攻击者可以以 root 身份登录,则无需进一步的权限即可在系统上执行任何操作。

由于这些原因,最好以非 root 用户身份登录并禁用 root 登录以使用 SSH 进行远程访问(稍后解释)。

怎么做?

我假设您在系统上以 root 身份登录。

使用 useradd 命令添加新用户。 将 替换为您选择的用户名。

useradd <username>

使用 passwd 命令为新添加的用户设置密码:

passwd <username>

2.确保非root用户有 sudo 允许

由于您将使用 Secure Shell (SSH) 远程登录此帐户,因此您将希望能够执行需要 root 访问权限的特权活动。 这意味着该帐户必须具有 sudo 权限。

怎么做?

创作过程 sudo Ubuntu 和 CentOS 上的用户相似,但您要添加用户的组不同。

您应该以 root 身份登录以执行此步骤。

CentOS 和红帽, 这 wheel group 是用于给用户的标准组 sudo 权限。 使用 usermod 命令将用户添加到该组:

usermod -aG wheel <username>

Ubuntu 使用 sudo 要管理的组 sudo 用户。

usermod -aG sudo <username>

3. 启用基于密钥的 SSH 身份验证

启用基于密钥的 SSH 身份验证非常重要,这样当我们禁用基于密码的身份验证时它才能正常工作。

破解、暴力破解或泄露密码是不良行为者获取系统访问权限的一种非常常见的方式。 鱼叉式网络钓鱼是一种极具针对性的垃圾邮件,可以诱使毫无戒心的用户提供凭据,但它只是获取凭据的一种常用方法。

如果有人在启用了基于密钥的身份验证并且禁用了基于密码的身份验证以通过 SSH 进行远程访问的系统上获取了您的用户名和密码,则该被盗密码将不再使他们能够访问该服务器。

通过启用基于密钥的身份验证并在稍后的步骤中禁用基于密码的身份验证,您已经大大减少了 SSH 被用于攻击您的机会。 这是保护 SSH 服务器的基本方法之一。

怎么做?

我想你已经在你的服务器上启用了 SSH。 您需要做的是在您的个人计算机上生成 SSH 密钥(您将从那里登录到服务器)。

获得 SSH 密钥后,您应该将公钥添加到我们服务器上的非 root 用户的 authorized_keys 中。

注意力! 不要丢失个人计算机上的 ssh 密钥。 备份这些密钥。 如果您稍后禁用基于密码的身份验证并丢失 SSH 密钥,您将被锁定在自己的服务器之外。

4. 确保允许 SSH 通过 ufw 防火墙

在系统上启用防火墙之前,应确保允许 SSH。 否则,如果您远程访问它,您可能会被锁定在系统之外。

怎么做?

Ubuntu 使用简单的防火墙 (ufw),而 CentOS/Red Hat 使用 防火墙.

CentOS/红帽,使用 firewall-cmd 命令:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

在 Ubuntu 上,使用 ufw 命令,如下所示:

sudo ufw allow ssh

5.启用防火墙(仅在允许SSH后)

防火墙确保只有您特别允许的流量才能流入您的服务器。 如果恶意攻击者在您的服务器上获取了恶意软件并试图通过不允许的端口进行通信,或者如果意外启用了一项服务,则不能使用它来破坏您的服务器或进一步破坏它。

怎么做?

在 CentOS/Red Hat 系统上,启用 firewalld systemd 服务:

sudo systemctl start firewalld
sudo systemctl enable firewalld

在 Ubuntu 上,使用以下命令:

sudo ufw enable

6.设置SSH不显示banner

攻击者可能会破坏您的服务器的一种方式是通过运行您的服务的软件中的错误。 横幅可以显示有关您正在运行的 OpenSSH 版本或操作系统的信息。 向坏人提供信息毫无意义。 让他们为之努力!

怎么做?

CentOS/Red Hat 中的默认行为是不显示横幅,因此无需执行任何操作。

在 Ubuntu 上,您可以使用:

sudo echo "DebianBanner no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

7.禁用所有SSH转发

虽然管理员使用 SSH 转发来加密可能传递明文的流量的情况并不少见,但如果您不使用它,则应将其关闭。 不良行为者可能会使用转发来加密流量,因此您更难以查看,或者使用授权端口和服务获取本来会被阻止通过的流量。

怎么做?

CentOS/红帽,一个将以下内容添加到 /etc/ssh/sshd_config

DisableForwarding yes

乌班图, 添加 DisableForwarding yes10-my-sshd-settings.conf 文件:

sudo echo "DisableForwarding yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

8.禁用通过SSH的root登录

几乎每个 Linux 系统上都有一个 root 用户。 允许该帐户使用 SSH 的风险是双重的。

  1. 该用户名是已知的并且经常被坏人尝试。
  2. 如果攻击者以 root 身份进入,她将拥有完整的系统访问权限。

禁止使用 root 帐户进行 SSH 连接可以消除这两种风险。

怎么做?

CentOS/红帽找到线 PermitRootLogin yes/etc/ssh/sshd_config 并将其更改为:

PermitRootLogin no

在 Ubuntu 上,添加 PermitRootLogin no10-my-sshd-settings.conf 文件:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

9.禁用基于密码的SSH认证

在 SSH 中禁用密码身份验证之前,请确保您已按照步骤 3 中的说明配置和测试了基于密钥的身份验证。

禁用基于密码的身份验证会阻止恶意行为者试图猜测您的密码,或对您进行社交工程以输入您的凭据或以任何方式窃取您的凭据的恶意行为者使用 SSH 进入您的服务器。

攻击者必须拥有您的公钥和私钥才能访问您的服务器。

怎么做?

CentOS/红帽找到线 PasswordAuthentication yes/etc/ssh/sshd_config 并将其更改为:

PasswordAuthentication no

Ubuntu, 添加 PasswordAuthentication no10-my-sshd-settings.conf 文件:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

10. 忽略 rhosts

rhosts 与 rsh 相关联,rsh 是一种被安全 shell 取代的传统协议。 如果用户试图创建恶意 rhosts 文件,此设置明确忽略它。

怎么做?

CentOS/红帽找到线 #IgnoreRhosts yes/etc/ssh/sshd_config 并将其更改为:

IgnoreRhosts yes

Ubuntu, 添加 IgnoreRhosts yes10-my-sshd-settings.conf 文件:

sudo echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

11.安装fail2ban并配置它来保护SSH

Fail2ban 密切关注已配置服务(如 SSH)的日志文件,并在一定时间段内尝试一定次数后阻止恶意用户的 IP 地址连接到您的服务器。

如果攻击者在 3 小时内尝试失败超过 5 次,她的 IP 地址将被阻止 12 小时, example.

Fail2ban 也可以配置为保护其他服务,例如由 nginx 网络服务器或 Apache 网络服务器。

怎么做?

您可以按照我们关于使用 Fail2Ban 的详细指南进行操作。

12. 配置自动安全更新(针对 Red Hat 和 CentOS)

如前所述,如果漏洞足够严重,带有漏洞利用的过时服务可以让攻击者无需登录即可进入您的服务器! 快速应用安全更新以降低这种风险至关重要。

怎么做?

对于默认 Ubuntu 服务器 安装时,会启用自动安全更新,因此无需对更新执行任何操作。

要在 CentOS / Red Hat 上配置自动更新,您将安装一个名为 dnf-自动 并使用以下命令为其启用计时器:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

您可以通过运行检查计时器:

sudo systemctl status dnf-automatic.timer

在 Loaded: 行下查找“loaded”,在 Active: 行下查找“active”。

可能会有更多或更少的步骤,具体取决于您的个人喜好以及您通常设置服务器的目的。

奖励脚本:Linux 服务器上的前 10 秒

按照承诺, 这是脚本 在您为基于密钥的身份验证设置和配置非 root 用户后,我写了上面提到的所有步骤。

该脚本可以在 Ubuntu 20.04 和 CentOS/Red Hat 8 上运行。

请注意,无论您多么信任脚本的来源,都不应盲目运行从 Internet 下载的随机 shell 脚本。 您必须阅读脚本并尝试理解它的作用。

整个脚本是开源的,每个人都可以使用,可以查看 这里. 你可以 下载,阅读然后运行 bash 脚本。

这是在 Ubuntu 20.04 服务器上运行后的屏幕截图。

看,您可以多么轻松地完成一些基本步骤来保护您在 CentOS 中构建的新服务器, 红色的帽子,或 Ubuntu 只需运行一个脚本!

也欢迎您提供有关脚本或请求功能的反馈。

结论

这些只是一些非常基本的安全检查,但您必须在安装 Linux 服务器后执行这些操作。

在多台服务器上手动执行这些操作可能会很痛苦,而且会不必要地耗费时间。 在这里,您可以利用脚本并使用我的“Linux 服务器上的前 10 秒”脚本或创建自己的脚本。

这是我的一些建议。 你呢? 您有什么要添加到此列表中的吗? 请在评论部分提供您的建议。

作者 泰德·勒罗伊 是一名企业安全架构师,为企业提供各种信息和物理安全指导。