在Linux和Windows操作系统中,防火墙是保障网络安全的重要屏障,通过查看防火墙状态可以确认其是否正常运行、规则配置是否生效等,不同系统、不同防火墙工具的查看命令存在差异,以下将详细介绍常见环境下查看防火墙状态的具体命令及操作方法,并辅以表格对比和实际场景说明,帮助用户快速掌握相关技能。

Linux系统中查看防火墙状态命令
Linux系统常用的防火墙工具包括iptables、firewalld(CentOS 7+、RHEL 7+默认)以及ufw(Ubuntu等Debian系发行版默认),不同工具对应的命令和操作逻辑有所不同。
基于iptables的防火墙(传统Linux发行版)
iptables是Linux内核集成的数据包过滤工具,通过规则链控制网络流量,查看其状态需使用iptables命令结合-L(列出规则)、-n(以数字形式显示地址和端口,避免DNS解析延迟)、-v(显示详细信息)等选项。
-
基本状态查看
sudo iptables -L -n -v
执行后会显示当前所有规则链(INPUT、OUTPUT、FORWARD等)的规则数量、匹配数据包/字节数、目标动作(ACCEPT、DROP、REJECT等),若输出中“pkts”和“bytes”列均为0,可能表示规则未生效或无流量通过;若“Chain INPUT (policy ACCEPT)”显示默认策略为ACCEPT,则未匹配规则的默认动作为允许通过。
(图片来源网络,侵删) -
检查防火墙是否运行
若iptables未加载规则或服务未启动,可能提示“Chain INPUT (policy ACCEPT) pkts bytes target prot opt in out source destination”且无规则详情,可通过以下命令确认iptables服务状态:sudo systemctl status iptables # 对于systemd系统
或
sudo service iptables status # 对于SysVinit系统
若服务未运行,需先启动:
sudo systemctl start iptables,并设置开机自启:sudo systemctl enable iptables。 -
简化输出(仅显示规则数量)
若仅需查看规则总数而非详情,可使用-S选项以规则语法形式输出:
(图片来源网络,侵删)sudo iptables -S
基于firewalld的防火墙(CentOS 7+、RHEL 7+、Fedora等)
firewalld是动态管理防火墙的工具,支持区域(Zone)和运行时/永久配置,查看状态需使用firewall-cmd命令。
-
查看防火墙运行状态
sudo firewall-cmd --state
输出
running表示防火墙已启动,not running表示未启动。 -
显示详细配置信息(包括区域、规则、服务)
sudo firewall-cmd --list-all
此命令会输出当前活跃区域(默认为public)、目标动作(默认为DROP)、允许的服务(如ssh、http等)、端口规则、富规则等详细信息。
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client ports: 8080/tcp protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
-
查看所有区域及其默认策略
sudo firewall-cmd --get-active-zones # 查看活跃区域 sudo firewall-cmd --get-zones # 查看所有区域
-
检查特定服务或端口是否开放
sudo firewall-cmd --query-service ssh # 查看ssh服务是否开放(返回yes/no) sudo firewall-cmd --query-port 8080/tcp # 查看8080端口是否开放
基于ufw的防火墙(Ubuntu、Debian等)
ufw(Uncomplicated Firewall)是简化版防火墙工具,命令更直观,默认处于禁用状态(部分Ubuntu版本可能已启用)。
-
查看防火墙状态
sudo ufw status
输出可能为:
Status: active(已启用)、Status: inactive(已禁用),或Status: inactive (v6)(仅IPv6启用)。 -
显示详细规则(包括编号、方向、协议、端口等)
sudo ufw status verbose
示例输出:
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6)
-
查看规则编号(用于删除或修改规则)
sudo ufw status numbered
输出会为每条规则添加编号,如:
[ 1] 22/tcp ALLOW IN Anywhere [ 2] 80/tcp ALLOW IN Anywhere
Windows系统中查看防火墙状态命令
Windows系统防火墙分为“Windows Defender 防火墙”(控制面板界面)和“高级安全Windows Defender防火墙”(管理单元),可通过命令行或图形界面查看状态。
使用netsh命令(命令提示符或PowerShell)
netsh是Windows网络配置的命令行工具,可查看防火墙状态和规则。
-
查看防火墙基本状态
netsh advfirewall show allprofiles
输出会显示域配置、专用配置、公用配置的防火墙状态(如“状态: ON”)、防火墙超时设置等。
-
查看当前防火墙规则
netsh advfirewall firewall show rule name=all
此命令会列出所有规则,包括规则名称、方向(入站/出站)、协议、端口、操作(允许/阻止)等,输出较长,可结合
findstr筛选:netsh advfirewall firewall show rule name=all | findstr "80"
-
PowerShell命令(推荐,功能更强大)
在PowerShell中,可使用Get-NetFirewallRulecmdlet:Get-NetFirewallRule | Format-Table Name, DisplayName, Enabled, Direction, Action -AutoSize
输出所有规则的名称、显示名称、启用状态、方向、操作等信息,筛选特定规则:
Get-NetFirewallRule -DisplayName "Remote Desktop*" | Format-Table *
图形界面查看(辅助参考)
-
Windows Defender防火墙(基础设置)
控制面板 → 系统和安全 → Windows Defender防火墙 → 点击左侧“启用或关闭Windows Defender防火墙”,可查看当前各网络类型(域、专用、公用)的防火墙状态。 -
高级安全防火墙(详细规则)
控制面板 → 系统和安全 → Windows Defender防火墙 → 高级安全,打开管理单元,可查看入站/出站规则、连接安全规则等,支持筛选和编辑。
不同防火墙工具命令对比
为方便快速查阅,以下将常见防火墙状态查看命令整理为表格:
| 操作系统 | 防火墙工具 | 基本状态查看命令 | 详细信息查看命令 | 备注 |
|---|---|---|---|---|
| Linux | iptables | sudo iptables -L -n -v |
sudo iptables -S(规则语法) |
需确保iptables服务已启动 |
| Linux | firewalld | sudo firewall-cmd --state |
sudo firewall-cmd --list-all |
支持区域动态管理 |
| Linux | ufw | sudo ufw status |
sudo ufw status verbose |
默认禁用,需手动启用 |
| Windows | netsh(CMD) | netsh advfirewall show allprofiles |
netsh advfirewall firewall show rule |
适用于命令提示符 |
| Windows | PowerShell | Get-NetFirewallProfile |
Get-NetFirewallRule | Format-Table * |
功能更强大,支持对象筛选 |
相关问答FAQs
Q1: 为什么执行sudo iptables -L -n -v后显示“Chain INPUT (policy ACCEPT) pkts bytes target prot opt in out source destination”且无规则?
A: 此现象通常有两种原因:一是iptables服务未启动,可通过sudo systemctl status iptables确认,若未启动则执行sudo systemctl start iptables;二是当前无任何自定义规则,仅显示默认策略(ACCEPT表示未匹配规则时允许数据包通过),若需添加规则,可使用iptables -I INPUT -p tcp --dport 22 -j ACCEPT(允许SSH连接)等命令。
Q2: Ubuntu系统中如何确认ufw防火墙是否成功阻止了特定IP的访问?
A: 可通过以下步骤验证:
- 首先添加阻止规则,假设要阻止IP
168.1.100:sudo ufw deny from 192.168.1.100
- 查看规则是否生效:
sudo ufw status numbered
确认规则中包含“deny from 192.168.1.100”。
- 从被阻止的IP主机尝试访问Ubuntu服务器的指定端口(如SSH的22端口),若连接失败,则说明规则生效;也可在Ubuntu服务器上查看日志:
sudo tail -f /var/log/ufw.log | grep "192.168.1.100"
日志中应包含“BLOCKED”相关信息。
