Linux 网络与防火墙基础

LinuxBeginner
立即练习

简介

逐层检查网络状态,可以更容易地排查网络问题。先确认主机身份,然后检查网络接口和地址、路由选择、基本连通性、名称解析、监听套接字、应用响应,最后检查本机防火墙策略。

在本实验中,你将在 Ubuntu 主机上按这个顺序完成操作。预先准备好的 HTTP 服务仅监听回环接口的 8088 端口,为使用 sscurl 和练习 UFW 规则提供了安全目标。你不会修改主机的网络接口配置、默认路由、DNS 设置或 SSH 服务。启用 UFW 前,你会明确保留 SSH 访问。

识别主机

在本步骤中,你将检查主机名和本地名称记录。这些信息可以帮助程序识别当前主机。

进入实验工作目录:

cd /home/labex/project/network-lab

输出当前主机名:

hostname

显示 systemd 已知的静态、瞬态和操作系统身份信息:

hostnamectl

Static hostname 是已配置的主机名。在云端培训机器中,瞬态主机名可能会在启动时分配。

检查本地主机映射:

cat /etc/hosts

回环名称 localhost127.0.0.1::1 表示同一台主机,不需要通过外部网络进行通信。以紧凑格式显示分配给主机的 IP 地址:

hostname -I

保存主机名和地址列表:

printf 'hostname=%s\naddresses=%s\n' "$(hostname)" "$(hostname -I | xargs)" > host-identity.txt
cat host-identity.txt

检查网络接口和 IP 地址

在本步骤中,你将识别网络接口、链路状态、IPv4 地址、前缀和地址作用域。

使用简要的链路视图:

ip -brief link

lo 是回环接口。另一个通常名为 eth0ens... 的接口负责将虚拟机连接到网络。UP 表示该接口已在管理上启用。

以紧凑格式显示地址:

ip -brief address

类似 192.0.2.10/24 的地址同时包含 IPv4 地址和前缀长度。前缀表示哪些开头的位用于标识本地网络。

详细检查回环接口:

ip address show dev lo

IPv4 地址 127.0.0.1/8 的作用域为 scope host,因此只在本机内部有效。查找默认路由使用的接口:

primary_if=$(ip route show default | awk 'NR==1 {print $5}')
echo "Primary interface: $primary_if"
ip address show dev "$primary_if"

ifconfig 是较旧的接口工具,但现有运维手册和故障排查说明中仍经常使用它。将它的输出与你刚才查看的现代 ip 输出进行比较:

ifconfig

同时保存旧工具的视图:

ifconfig > ifconfig-addresses.txt

保存简要的接口快照:

ip -brief address > interface-addresses.txt
cat interface-addresses.txt

读取路由表

在本步骤中,你将识别默认网关,并询问 Linux 到达某个目标地址时会使用哪条路由。

显示主路由表:

ip route

已连接路由表示直接连接的网络。以 default via 开头的行会在没有更具体的路由匹配时使用。

询问内核到达公共目标地址时会如何路由。此命令会报告选中的网关、接口和源地址,但不会发送数据包:

ip route get 1.1.1.1

提取默认网关和接口:

gateway=$(ip route show default | awk 'NR==1 {print $3}')
primary_if=$(ip route show default | awk 'NR==1 {print $5}')
echo "Default gateway: $gateway via $primary_if"

保存路由摘要:

printf 'gateway=%s\ninterface=%s\n' "$gateway" "$primary_if" > route-summary.txt
cat route-summary.txt

测试网络连通性

在本步骤中,你将使用 ping 测试逐步扩大的网络边界,同时了解某些网络可能会阻止诊断数据包。

先从回环接口开始。选项 -c 2 发送两个请求,-W 2 表示每个请求最多等待 2 秒:

ping -c 2 -W 2 127.0.0.1

回环测试成功,说明本地 IP 协议栈能够响应。接下来获取并测试默认网关:

gateway=$(ip route show default | awk 'NR==1 {print $3}')
ping -c 2 -W 2 "$gateway" || echo "The gateway does not answer ICMP echo requests"

这里的备用提示很重要,因为路由器可能能够转发流量,但拒绝响应 ping。测试公共 IP 地址,不依赖 DNS:

ping -c 2 -W 2 1.1.1.1 || echo "Public ICMP is blocked or unavailable"

保存稳定的本地连通性结果,不依赖外部网络策略:

ping -c 1 -W 2 127.0.0.1 > loopback-ping.txt
tail -n 2 loopback-ping.txt

测试主机名解析

在本步骤中,你将检查解析器配置,并将主机名转换为地址。

查看标准 Linux 应用使用的解析器文件:

cat /etc/resolv.conf

该文件通常包含一行或多行 nameserver。在使用 systemd-resolved 的主机上,其中的地址可能指向本地存根解析器,而不是直接指向外部 DNS 服务器。

通过系统完整的名称服务配置解析本地主机名:

getent hosts localhost

getent 会遵循 /etc/nsswitch.conf,因此可以组合使用 /etc/hosts、DNS 和其他已配置的数据源。解析外部主机名,并请求 IPv4 套接字地址:

getent ahostsv4 example.com

如果 IP ping 成功但此查询失败,应重点检查解析器配置或 DNS 连通性。保存第一个解析出的 IPv4 记录:

getent ahostsv4 example.com | head -n 1 > dns-result.txt
cat dns-result.txt

检查监听端口和 HTTP 响应

在本步骤中,你将把监听中的 TCP 套接字与其所属进程关联起来,并测试应用协议。

预先准备好的演示服务监听回环接口的 8088 端口。使用 ss 检查监听中的 TCP 套接字。选项 -l-t-n-p 分别表示监听、TCP、数字地址和进程信息:

sudo ss -ltnp | grep ':8088'

查找 127.0.0.1:8088。绑定到回环接口表示该服务只能从本机访问。

检查该套接字背后的服务进程:

systemctl status labex-network-demo.service --no-pager

使用 curl -i 显示 HTTP 响应头和响应正文:

curl -i http://127.0.0.1:8088/

HTTP 状态 200 OK 证明的不只是端口已打开:它还表示应用接受了 HTTP 请求并返回了内容。使用静默模式 -s,只保存响应正文:

cd /home/labex/project/network-lab
curl -s http://127.0.0.1:8088/ > http-response.html
grep 'network demo ready' http-response.html

保留访问权限并启用 UFW

在本步骤中,你将检查 UFW 状态、保留远程管理访问权限、允许练习服务端口,然后启用防火墙。

UFW 是 Linux 数据包过滤规则的前端工具。检查当前状态:

sudo ufw status verbose

实验环境初始设置会使 UFW 处于未启用状态,并保持规则集为空。在远程启用主机防火墙之前,先允许你所依赖的管理路径。此虚拟机使用 TCP 端口 22 提供 SSH:

sudo ufw allow 22/tcp

现在允许发往练习服务端口的入站 TCP 流量:

sudo ufw allow 8088/tcp

启用前查看准备好的更改:

sudo ufw show added

不显示交互式确认提示,直接启用 UFW:

sudo ufw --force enable

确认防火墙已启用,并且两条允许规则都存在:

sudo ufw status verbose

由于服务绑定在回环接口上,因此防火墙变更后从本机测试该服务:

curl -fsS http://127.0.0.1:8088/

将启用后的状态保存为可观察结果:

cd /home/labex/project/network-lab
sudo ufw status verbose > firewall-status.txt
cat firewall-status.txt

操作顺序很重要:先保留管理路径,再添加所需的服务规则,启用防火墙,然后立即验证防火墙策略和应用连通性。生产主机可能使用其他 SSH 端口,因此应确认实际的管理路径,不要默认使用端口 22

总结

你按照结构化的 Linux 网络诊断链完成了操作:主机身份、网络接口和 IP 地址、路由选择、连通性、名称解析、监听套接字以及 HTTP 响应。你了解到每一层都在回答不同的问题,而某个边界的故障可以缩小下一步的排查范围。

你还保留了 SSH 访问权限,允许了练习服务端口,启用了 UFW,并验证了有效防火墙策略和应用响应。这些习惯可以帮助你在不进行大范围破坏性更改的情况下诊断和保护网络服务。