Linux 网络与防火墙基础

LinuxBeginner
立即练习

简介

网络故障排查的关键,是一次只检查一个层次。先确认主机身份,再依次检查网络接口和地址、路由选择、基本连通性、名称解析、监听套接字、应用响应,最后检查本机的防火墙策略。

在本实验中,你将在 Ubuntu 主机上按照这一顺序进行操作。系统已准备好一个 HTTP 服务,仅监听回环地址的 8088 端口,你可以安全地使用它练习 sscurl 和 UFW 规则操作。你不会修改主机的网络接口配置、默认路由、DNS 设置或 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 表示每次回复最多等待两秒:

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 响应。你了解到,每个层次都在回答不同的问题,而某一边界发生故障后,可以据此缩小下一步排查范围。

你还检查了 UFW 状态,并在不影响远程访问的前提下安全地管理了一条范围严格限定的回环规则。这些操作习惯将帮助你在不进行大范围、破坏性修改的情况下诊断和保护网络服务。