本入门指南将向你介绍基本的 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 服务器所需的最基本要求。 可以并且应该启用其他安全层,具体取决于服务器的使用方式。 这些层可以包括诸如单独的应用程序配置、入侵检测软件以及启用访问控制(例如,双重身份验证)之类的内容。
6 条评论