保护你的 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 身份登录到你的服务器。 相反,创建你自己的帐户("<用户>"),赋予它 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) 和 Ngnix (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

方法 4 和 6 是一个宝石,感谢你提供的精彩入门列表。

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

Creative Commons License 本作品采用 Creative Commons Attribution-Share Alike 4.0 International License 授权。
© . All rights reserved.