iptables -L -n -v
** (传统iptables
),* **nft list ruleset
** (较新的nftables
),* **firewall-cmd --list-all
** (firewalld
服务),* **ufw status verbose
** (Ubuntu的ufw
),使用systemctl status firewalld
或ufw status
检查防火墙服务是否运行。了解您的 Linux 防火墙设置至关重要,无论是为了排查网络连接问题、加强系统安全,还是确保服务正常运行,Linux 系统主要使用几种防火墙工具,检测方法也因工具而异,以下是详细的检测步骤和方法:
检测防火墙服务状态(通用第一步)
首先需要确认系统上正在运行哪种防火墙服务,以及其是否处于活动状态。
-
检查
iptables
服务状态 (Systemd系统 – CentOS 7/RHEL 7, Fedora, Ubuntu 16.04+等):sudo systemctl status iptables
- 如果看到
Active: active (running)
,说明传统的iptables
服务正在运行并管理规则。 - 如果看到
Active: inactive (dead)
或Unit iptables.service could not be found
,则通常意味着iptables
服务未启用或未安装(现代系统可能默认使用nftables
或firewalld
)。
- 如果看到
-
检查
firewalld
服务状态 (默认用于 CentOS 7+/RHEL 7+, Fedora Workstation/Server, 部分 Ubuntu/Debian):sudo systemctl status firewalld
Active: active (running)
表示firewalld
守护进程正在运行。Active: inactive (dead)
表示firewalld
已停止。
-
检查
nftables
服务状态 (逐渐取代iptables
, 是 Ubuntu 20.04+/Debian Buster+ 等的默认后端,也用于较新 Fedora/CentOS Stream):sudo systemctl status nftables
- 同样,
active (running)
表示服务运行中。
- 同样,
-
检查
ufw
状态 (Ubuntu/Debian 的简化前端,底层通常调用iptables
或nftables
):sudo ufw status
Status: active
表示 UFW 已启用并管理防火墙规则。Status: inactive
表示 UFW 已禁用(但底层iptables/nftables
可能有独立规则)。- 添加
verbose
参数查看更多细节:sudo ufw status verbose
查看具体的防火墙规则
确定了活动的防火墙服务后,需要查看其具体的规则配置。
检测 iptables
规则
iptables
规则按表(Tables)和链(Chains)组织,最常用的是 filter
表(负责过滤数据包)。
-
查看所有表(
nat
,filter
,mangle
等)的所有链规则 (最常用):sudo iptables -L -v -n
-L
: 列出规则。-v
: 显示详细信息(数据包计数、字节计数、接口等),对诊断非常有用。-n
: 以数字形式显示 IP 地址和端口(避免 DNS 反向查询,速度更快且更准确)。- 查看特定表:
sudo iptables -t <table_name> -L -v -n
(sudo iptables -t nat -L -v -n
)。
-
查看规则时显示行号 (便于后续引用/删除):
sudo iptables -L -v -n --line-numbers
检测 firewalld
配置
firewalld
使用区域(Zones)和服务(Services)的概念,配置更动态。
-
查看默认区域和活动区域:
sudo firewall-cmd --get-default-zone sudo firewall-cmd --get-active-zones
-
查看指定区域(如
public
)的详细配置 (规则、服务、端口等):sudo firewall-cmd --zone=public --list-all
- 这会显示该区域允许的服务 (
services
)、允许的端口 (ports
)、启用的协议 (protocols
)、源地址 (sources
)、端口转发 (forward-ports
)、富规则 (rich rules
) 等。
- 这会显示该区域允许的服务 (
-
查看所有永久(Permanent)配置 (重启后生效的配置):
sudo firewall-cmd --permanent --list-all sudo firewall-cmd --permanent --list-all-zones # 查看所有永久区域配置
- 重要提示:
firewalld
有运行时(Runtime)和永久(Permanent)两种配置,运行时配置立即生效但重启后丢失;永久配置需要重载或重启服务才生效,使用--permanent
查看的是永久配置,不加该参数查看的是当前运行时配置,使用sudo firewall-cmd --reload
将永久配置加载为运行时配置。
- 重要提示:
-
查看富规则 (Rich Rules – 更复杂的规则):
sudo firewall-cmd --list-rich-rules sudo firewall-cmd --permanent --list-rich-rules
检测 nftables
规则
nftables
是 iptables
的现代替代品,语法更简洁高效。
-
查看所有规则集 (Ruleset):
sudo nft list ruleset
- 这是查看
nftables
完整配置的标准方法,会输出所有表、链和规则。
- 这是查看
-
查看特定表(如
inet filter
)的规则:sudo nft list table inet filter
检测 ufw
规则
如前所述,ufw status
是基础。
- 查看详细规则 (包括底层
iptables/nftables
生成的规则):sudo ufw status verbose sudo ufw show raw # 显示 UFW 管理的底层 iptables/nftables 规则 (更技术性)
补充检测方法
-
使用
netstat
或ss
检查监听端口:
防火墙规则定义了哪些流量可以进入,但前提是系统上有服务在监听那个端口,结合两者判断。sudo netstat -tulpn # 查看监听中的 TCP/UDP 端口及对应进程 sudo ss -tulpn # `ss` 是更现代的替代品,功能类似,通常更快
-
使用
nmap
进行外部或内部端口扫描:
从网络上的另一台机器(或本机扫描本机)扫描目标 Linux 机器的端口开放情况,这是从外部视角验证防火墙规则是否按预期工作的金标准。- 安装 nmap (如未安装):
sudo apt install nmap
(Debian/Ubuntu) /sudo yum install nmap
(CentOS/RHEL) - 从外部机器扫描目标机器的 IP (
168.1.100
):nmap -sT -p- 192.168.1.100 # `-sT`: TCP Connect 扫描 (常用), `-p-`: 扫描所有 1-65535 端口 (耗时) nmap -sT -p 22,80,443 192.168.1.100 # 扫描常用端口
- 从本机扫描本机 (
localhost
或0.0.1
):nmap -sT -p- localhost
- 注意: 扫描
localhost
(0.0.1
) 通常不受防火墙规则限制,因为流量不经过物理网络接口,扫描本机的实际 IP 地址或主机名才能真实反映防火墙对来自外部(或同网络其他主机)流量的控制效果。
- 注意: 扫描
- 安装 nmap (如未安装):
重要提示与故障排查思路
- 默认策略 (Default Policy): 检查链(
INPUT
,FORWARD
,OUTPUT
)的默认策略是ACCEPT
(允许) 还是DROP
(丢弃) /REJECT
(拒绝),这决定了没有匹配任何规则的流量如何处理。sudo iptables -L -v -n
的输出顶部会显示链及其默认策略。 - 规则顺序: 防火墙规则按顺序匹配,第一条匹配的规则生效,确保你的允许规则放在拒绝规则之前(如果默认策略是拒绝)。
- 服务未运行 vs 防火墙阻止: 如果一个端口在
nmap
扫描中显示为关闭 (closed
) 或过滤 (filtered
),但netstat/ss
显示服务确实在监听 (LISTEN
),那么防火墙很可能阻止了该端口的访问。netstat/ss
没有显示监听,则是服务本身没有运行或没有监听那个端口。 - 区域绑定 (firewalld): 确认网卡接口绑定到了正确的
firewalld
区域 (sudo firewall-cmd --get-active-zones
)。 - 保存配置:
iptables
: 规则默认重启失效,需使用发行版特定的命令保存 (如 Ubuntu/Debian:sudo netfilter-persistent save
或sudo iptables-save > /etc/iptables/rules.v4
; CentOS 6/RHEL 6:sudo service iptables save
)。firewalld
:--permanent
配置已保存到文件,--reload
即可应用,运行时修改需显式添加--permanent
并--reload
才能持久化。nftables
:sudo nft list ruleset > /etc/nftables.conf
(路径可能因发行版而异),然后确保nftables
服务启用 (sudo systemctl enable --now nftables
)。ufw
: 规则修改后通常自动保存。
- 备份配置: 在进行任何重大修改前,强烈建议备份当前防火墙配置(如
sudo iptables-save > iptables-backup.txt
,sudo cp /etc/firewalld/zones/public.xml public.xml.backup
等)。
检测 Linux 防火墙设置是一个多步骤的过程:首先识别正在运行的防火墙服务 (systemctl status
, ufw status
),然后使用对应的命令深入查看其具体规则 (iptables -L -v -n
, firewall-cmd --list-all
, nft list ruleset
, ufw status verbose
),结合监听端口检查 (netstat -tulpn
, ss -tulpn
) 和外部端口扫描 (nmap
) 来验证防火墙的实际效果,理解默认策略、规则顺序和服务绑定是正确解读检测结果的关键,始终牢记备份配置并在生产环境中谨慎操作。
引用说明:
- 本文档中涉及的命令行工具 (
iptables
,firewall-cmd
,nft
,ufw
,systemctl
,netstat
,ss
,nmap
) 的功能描述和常用参数参考了各工具的官方手册页 (man
pages) 以及主流 Linux 发行版 (如 Red Hat Enterprise Linux, CentOS, Fedora, Ubuntu, Debian) 的官方文档。 - Linux 防火墙概念(如 Netfilter, 表/链/规则, Zones/Services)的阐述基于 Linux 内核文档和相关项目 (
firewalld
,nftables
) 的官方说明。 - E-A-T (专业性、权威性、可信度) 原则的实践,体现在内容基于广泛认可的技术文档、强调正确操作流程(如备份)、提供清晰的风险提示以及避免主观臆断。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/28016.html