本入门指南将向您介绍基本的 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 服务器所需的最基本步骤。根据服务器的用途,可以并且应该启用额外的安全层。这些层可以包括诸如单独的应用程序配置、入侵检测软件和启用访问控制(例如,双因素身份验证)之类的东西。
6 条评论