保护 Linux 服务器的 7 个步骤

通过七个简单步骤加固您的 Linux 服务器。
222 位读者喜欢这篇文章。
computer servers processing data

Opensource.com

本入门指南将向您介绍基本的 Linux 服务器安全知识。虽然它侧重于 Debian/Ubuntu,但您可以将此处介绍的所有内容应用于其他 Linux 发行版。我也鼓励您研究这些材料,并在适用的情况下进行扩展。

1. 更新您的服务器

保护服务器的第一件事是更新本地存储库,并通过应用最新的补丁来升级操作系统和已安装的应用程序。

在 Ubuntu 和 Debian 上

$ sudo apt update && sudo apt upgrade -y

在 Fedora、CentOS 或 RHEL 上

$ sudo dnf upgrade

2. 创建新的特权用户帐户

接下来,创建一个新的用户帐户。您永远不应该以 root 身份登录到您的服务器。相反,创建您自己的帐户(“<user>”),赋予它 sudo 权限,并使用它登录到您的服务器。

首先创建一个新用户

$ adduser <username>

通过将 sudo 组 (-G) 附加 (-a) 到用户的组成员资格,为您的新用户帐户赋予 sudo 权限

$ usermod -a -G sudo <username>

3. 上传您的 SSH 密钥

您将需要使用 SSH 密钥登录到您的新服务器。您可以使用 ssh-copy-id 命令将您预先生成的 SSH 密钥上传到您的新服务器

$ ssh-copy-id <username>@ip_address

现在您可以登录到您的新服务器,而无需输入密码。

4. 保护 SSH 安全

接下来,进行以下三项更改

  • 禁用 SSH 密码身份验证
  • 限制 root 用户远程登录
  • 限制对 IPv4 或 IPv6 的访问

使用您选择的文本编辑器打开 /etc/ssh/sshd_config,并确保这些行

PasswordAuthentication yes
PermitRootLogin yes

看起来像这样

PasswordAuthentication no
PermitRootLogin no

接下来,通过修改 AddressFamily 选项将 SSH 服务限制为仅使用 IPv4 或 IPv6。要将其更改为仅使用 IPv4(对于大多数人来说应该足够了),请进行此更改

AddressFamily inet

重启 SSH 服务以启用您的更改。请注意,在重启 SSH 服务器之前,最好与您的服务器建立两个活动连接。额外的连接允许您在重启出现问题时修复任何问题。

在 Ubuntu 上

$ sudo service sshd restart

在 Fedora 或 CentOS 或任何使用 Systemd 的系统上

$ sudo systemctl restart sshd

5. 启用防火墙

现在您需要安装防火墙、启用它并配置它,使其仅允许您指定的网络流量。Uncomplicated Firewall (UFW) 是 iptables 的一个易于使用的界面,它大大简化了配置防火墙的过程。

您可以使用以下命令安装 UFW

$ sudo apt install ufw

默认情况下,UFW 拒绝所有传入连接,并允许所有传出连接。这意味着您服务器上的任何应用程序都可以访问互联网,但任何尝试访问您服务器的内容都无法连接。

首先,确保您可以通过启用对 SSH、HTTP 和 HTTPS 的访问来登录

$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw allow https

然后启用 UFW

$ sudo ufw enable

您可以使用以下命令查看允许和拒绝的服务

$ sudo ufw status

如果您想禁用 UFW,您可以通过键入以下命令来完成

$ sudo ufw disable

您还可以使用 firewall-cmd,它已经安装并集成到某些发行版中。

6. 安装 Fail2ban

Fail2ban 是一个检查服务器日志以查找重复或自动化攻击的应用程序。如果找到任何攻击,它将更改防火墙以阻止攻击者的 IP 地址,可以是永久性的,也可以是指定的时间。

您可以通过键入以下命令安装 Fail2ban

$ sudo apt install fail2ban -y

然后复制包含的配置文件

$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

并重启 Fail2ban

$ sudo service fail2ban restart

就是这样。该软件将持续检查日志文件以查找攻击。过一段时间后,该应用程序将建立一个相当大的被禁止 IP 地址列表。您可以通过请求 SSH 服务的当前状态来查看此列表

$ sudo fail2ban-client status ssh

7. 移除未使用的面向网络的服务

几乎所有 Linux 服务器操作系统都启用了一些面向网络的服务。您会希望保留其中大多数服务。但是,您可能想要移除一些服务。您可以使用 ss 命令查看所有正在运行的网络服务

$ sudo ss -atpu

ss 的输出将因您的操作系统而异。这是一个您可能会看到的示例。它显示 SSH (sshd) 和 Nginx (nginx) 服务正在监听并准备好连接

tcp LISTEN 0 128 *:http *:* users:(("nginx",pid=22563,fd=7))
tcp LISTEN 0 128 *:ssh *:* users:(("sshd",pid=685,fd=3))

如何移除未使用的服务(“<service_name>”)将因您的操作系统及其使用的软件包管理器而异。

要在 Debian/Ubuntu 上移除未使用的服务

$ sudo apt purge <service_name>

要在 Red Hat/CentOS 上移除未使用的服务

$ sudo yum remove <service_name>

再次运行 ss -atup 以验证未使用的服务不再安装和运行。

最终想法

本教程介绍了加固 Linux 服务器所需的最基本步骤。根据服务器的用途,可以并且应该启用额外的安全层。这些层可以包括诸如单独的应用程序配置、入侵检测软件和启用访问控制(例如,双因素身份验证)之类的东西。

接下来阅读
User profile image.
大家好!我是 Patrick,我是一位退休的 IT 工程师、前 IBM 员工、作家、开源倡导者、游戏玩家和自称的超级极客。我也对太空技术和探索、UNIX、命令行、复古游戏机和复古电脑(如 Atari 2600、Commodore 64 和 Amiga)非常感兴趣。

6 条评论

您应该考虑您希望有多开放。对世界上任何 IP 地址开放可能看起来很方便,但您不太可能需要这样做。
我忘记它们在哪里了,但也有登录尝试的日志,您应该密切关注。令人惊讶的是,在您向外界开放服务器后不久,人们就开始尝试登录它。

这绝对是真的。我为我的企业设置了一个 PBX(电话服务器)。不到一周后,一些中国 IP 地址正在尝试输入管理员命令!这真是一个令人大开眼界的经历。

回复 ,作者:Greg P

嗨,Greg。是的,能够从任何 IP 连接是一种权衡。我至少会添加一些解释为什么您可能想要将其限制为单个已知 IP 的内容。谢谢!

回复 ,作者:Greg P

方法 4 和 6 是亮点,感谢您提供的这份很棒的入门列表。

感谢 Patrick 的文章。您向我介绍了 Fail2Ban。只是有一点,您用来检查状态的命令
`sudo fail2ban-client status ssh`
应该是
`sudo fail2ban-client status sshd`

© . All rights reserved.