介绍
端点加固是保护任何计算机系统的关键过程。它涉及减小系统的“攻击面”,使其不易受到安全威胁。加固 Linux 系统的两个基本方面是管理运行的服务和实施防火墙。
在本实验中,你将亲身体验这些重要的安全实践。你将学习如何:
- 识别并禁用对系统功能非必需的服务。
- 安装和配置 Uncomplicated Firewall (UFW),这是一个用于管理 Linux 网络过滤规则的用户友好界面。
通过本实验的学习,你将对如何对 Linux 端点应用基本的加固技术有一个实际的理解。
端点加固是保护任何计算机系统的关键过程。它涉及减小系统的“攻击面”,使其不易受到安全威胁。加固 Linux 系统的两个基本方面是管理运行的服务和实施防火墙。
在本实验中,你将亲身体验这些重要的安全实践。你将学习如何:
通过本实验的学习,你将对如何对 Linux 端点应用基本的加固技术有一个实际的理解。
在此步骤中,你将学习如何识别 Linux 系统上运行的服务并禁用那些不需要的服务。减少运行的服务数量可以最小化潜在的攻击面,因为每个服务都可能存在漏洞。
首先,让我们列出所有正在运行的服务。在某些 Linux 环境中,尤其是在容器中,systemctl 命令不可用。我们可以使用 service 命令作为替代。
在你的终端中执行以下命令,查看所有服务的状态:
service --status-all
你将看到一个服务列表。服务名称旁边的 [ + ] 表示该服务正在运行,而 [ - ] 表示该服务已停止。
[ - ] acpid
[ - ] apparmor
[ + ] apache2
[ - ] atop
[ - ] atopacct
[ + ] cron
...
请注意,作为 Web 服务器的 apache2 正在运行。对于不需要托管网站的通用端点,此服务是不必要的,应将其禁用。
要停止 apache2 服务,请使用带有 stop 参数的 service 命令。你需要 sudo 权限来管理系统服务。
sudo service apache2 stop
现在,通过再次检查其状态来确认服务已停止:
service apache2 status
输出将确认 Apache2 服务不再运行。
○ apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2025-08-05 14:44:53 CST; 2s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 5892 ExecStop=/usr/sbin/apachectl graceful-stop (code=exited, status=0/SUCCESS)
Main PID: 4800 (code=exited, status=0/SUCCESS)
CPU: 50ms
通过禁用不需要的服务,你已经采取了一个简单而有效的步骤来加固你的系统。
在这一步中,你将安装 Uncomplicated Firewall (UFW)。UFW 是强大但复杂的 iptables 防火墙的一个用户友好型前端。它提供了一种简化的方式来配置常见的防火墙规则。
首先,更新你的软件包列表并安装 ufw 软件包。
sudo apt-get update && sudo apt-get install -y ufw
安装完成后,UFW 将被安装但尚未激活。你可以使用以下命令检查其状态:
sudo ufw status
输出将显示防火墙处于非活动状态:
Status: inactive
要激活防火墙,你需要启用它。此命令将启动防火墙并配置它在系统启动时自动运行。
注意: 在远程服务器上启用防火墙时,你必须确保有一个允许 SSH 访问的规则。否则,你可能会被锁定在系统之外。对于这个 lab 环境,继续操作是安全的。
现在启用 UFW:
sudo ufw enable
系统会提示你确认操作。该命令将启用防火墙,并可能中断现有连接。
Firewall is active and enabled on system startup
我们再次检查状态,这次使用 verbose 选项以查看更多详细信息,包括默认策略。
sudo ufw status verbose
输出现在将显示防火墙处于活动状态,并列出默认策略。默认情况下,UFW 拒绝所有传入流量并允许所有传出流量,这是一个安全的起点。
Status: active
Logging: off
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
由于防火墙现在已激活并默认阻止所有传入连接,我们需要允许 SSH 访问,以确保我们可以继续远程管理系统。
添加一条规则以允许 SSH 连接:
sudo ufw allow ssh
你将看到规则已添加的确认信息:
Rule added
Rule added (v6)
这确保了在防火墙激活期间 SSH 访问仍然可用。
现在 UFW 已激活,你将学习如何创建规则来控制网络流量。我们将添加规则以允许特定的、必需的服务,同时默认阻止所有其他流量。
首先,让我们确保我们的默认策略设置正确。明确定义它们是一个好习惯。
sudo ufw default deny incoming
sudo ufw default allow outgoing
由于我们在上一步中已经配置了 SSH 访问,让我们为自定义应用程序添加一条规则。假设我们在端口 8080 上运行一个自定义 Web 应用程序。我们需要创建一条规则来允许到此特定端口的流量。
sudo ufw allow 8080/tcp
此命令专门允许 TCP 端口 8080 上的入站流量。
Rule added
Rule added (v6)
要查看当前规则列表,你可以使用带 numbered 选项的 ufw status。这使得以后管理或删除规则更加容易。
sudo ufw status numbered
输出将显示你的新规则,每个规则旁边都有一个编号。
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 8080/tcp ALLOW IN Anywhere
[ 3] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 4] 8080/tcp (v6) ALLOW IN Anywhere (v6)
你现在已经配置了防火墙,使其只允许必要的流量,从而显著提高了系统的安全性。
在此步骤中,你将学习如何启用和查看 UFW 的日志记录。日志对于监控网络流量、识别潜在的安全威胁以及对连接问题进行故障排除至关重要。
UFW 的日志记录默认是禁用的。你可以使用一个简单的命令启用它。
sudo ufw logging on
你将看到日志记录已启用的确认信息。
Logging enabled
UFW 日志写入到 /var/log/ufw.log 文件中。请注意,日志文件在启用日志记录后可能不会立即存在;它会在第一条日志条目写入时自动创建。
你可以使用带有 -f (follow) 标志的 tail 命令实时查看日志文件。如果文件尚不存在,该命令将等待它被创建:
sudo tail -f /var/log/ufw.log
此命令将显示日志的最后几行并等待新条目。在实时环境中,你会看到防火墙阻止或允许连接时日志条目出现。由于此 Lab 环境没有外部流量尝试访问它,你可能看不到任何新条目。按 Ctrl+C 停止跟踪日志。
一个典型的被阻止数据包的日志条目如下所示:
Sep 10 12:00:00 ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=01:02:03:04:05:06:07:08:09:0a:0b:0c SRC=192.168.1.10 DST=192.168.1.20 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=12345 PROTO=TCP SPT=54321 DPT=23 WINDOW=0 RES=0x00 SYN URGP=0
以下是对重要字段的快速分解:
[UFW BLOCK]: 表示防火墙执行的操作。SRC: 数据包的源 IP 地址。DST: 目标 IP 地址。PROTO: 网络协议(例如,TCP, UDP)。DPT: 目标端口。你也可以使用 grep 来搜索日志文件中的特定事件。例如,要查找所有被阻止的连接尝试,你可以运行:
sudo grep "UFW BLOCK" /var/log/ufw.log
如果日志文件尚不存在或为空,此命令将不返回任何结果,这是正常的。一旦发生防火墙活动,日志条目将被写入,然后你就可以搜索它们。此命令将过滤日志并仅显示包含字符串 "UFW BLOCK" 的行,这对于识别可疑活动的模式非常有用。
恭喜你!你已成功完成了本次关于加固 Linux 端点的实验。
在此次实验中,你获得了基础安全任务的实践经验。你已学会如何:
service 命令识别 Linux 系统上运行的服务。allow 规则。这些是任何负责维护安全且健壮的 Linux 环境的系统管理员或开发人员的基础技能。通过应用这些技术,你可以显著提高系统的安全状况。