微信优化

weixinyouhua

如何查看防火墙配置,防火墙配置查询命令详解?

2026-08-31 12:21:22

查看防火墙配置的核心方法是先确定操作系统和防火墙类型,再使用对应的查询命令或管理界面,Linux服务器多用firewalld和iptables,Windows系统则依赖netsh与PowerShell命令。

查看防火墙配置前,先判断系统用的是哪套防火墙

不同操作系统甚至不同发行版,默认防火墙工具都不一样,搞错了对象去查配置,很容易出现“命令不存在”或者“查了半天查了个空”的情况,业内专家指出,绝大部分服务器配置混乱的根源,其实是对防火墙工具本身缺乏清晰的认知。

快速判断方法:

  • Linux系统执行 firewall-cmd --state,如果返回running,说明用的是firewalld
  • 返回not running,再试 systemctl status iptables,检查iptables服务是否存在
  • CentOS 7及以上版本默认使用firewalld,CentOS 6及更早版本使用iptables
  • Ubuntu 18.04之后默认使用ufw(底层调用的还是iptables)
  • Windows Server和Windows 10/11桌面系统,使用Windows Defender防火墙

针对不同系统的查看防火墙配置命令整理

Linux查看防火墙配置:firewalld篇

firewalld是目前红帽系发行版(CentOS、Rocky Linux、AlmaLinux、Fedora)的主力防火墙,它的配置查看方式非常直观,分为运行时配置和永久配置两个维度。

使用firewall-cmd这个命令,你能快速看到当前所有生效规则:

  • firewall-cmd --list-all:展示当前默认zone下所有放行服务、端口、伪装状态和规则
  • firewall-cmd --list-all-zones:一次性列出全部zone的完整配置,适合排查多网卡场景
  • firewall-cmd --get-active-zones:查看当前实际生效的zone是哪一个,多网卡服务器建议重点看这条
  • firewall-cmd --zone=public --list-ports:只看public区域放行的端口,适合快速确认某端口是否开着
  • firewall-cmd --query-service=http:判断HTTP服务是否在放行列表里,返回yes或no

永久配置需要通过--permanent参数区分:

firewall-cmd --permanent --list-all
firewall-cmd --permanent --zone=public --list-ports

运行时配置和永久配置不一致的场景非常常见,定期对比这两个输出是运维排查问题的基础动作。

iptables查看防火墙配置:规则链与详细计数

虽然firewalld是主流,但大量线上服务器依然使用纯iptables方案,查看iptables配置的核心命令有这几个:

  • iptables -L -n -v:列出所有规则链,-n不做DNS反解(速度更快),-v显示匹配次数和字节数
  • iptables -t nat -L -n -v:查看NAT表规则,端口转发和SNAT/DNAT的配置都在这里
  • iptables -t mangle -L -n:查看mangle表,涉及TOS、TTL等特殊标记时才会用到
  • service iptables status:查看iptables服务运行状态和当前规则(老版本系统适用)
  • 如何查看防火墙配置,防火墙配置查询命令详解?

iptables -L -n -v输出中的关键信息,需要掌握怎么看:

  • target:规则动作,ACCEPT表示放行,DROP表示丢弃,REJECT表示拒绝并回包
  • prot:协议类型,tcp、udp、icmp或all
  • opt:附加选项,通常为空
  • source和destination:源地址和目标地址,0.0.0.0/0代表所有地址
  • 最后的计数器和字节数,能反映规则实际被命中了多少次,这对判断规则是否真正起作用非常有价值

查看iptables配置文件本身也是一种查配置方式,规则文件通常保存在/etc/sysconfig/iptables,执行cat /etc/sysconfig/iptables就能看到持久化的规则内容,不过需要注意,运行时正在生效的规则和文件里保存的规则可能不一致,因为修改文件后需要重启服务才会加载,而iptables -L看到的是内存中正在执行的规则。

ubuntu查看防火墙配置:ufw的前端逻辑

Ubuntu系统默认使用ufw这个前端工具,底层仍然调用iptables,查看配置的常用命令:

ufw status
ufw status verbose
ufw status numbered
  • ufw status:如果返回inactive,说明防火墙根本没开
  • ufw status verbose:显示默认策略(允许入站还是拒绝入站)、日志级别、已放行端口
  • ufw status numbered:规则带序号显示,方便后续用ufw delete 序号精确删除规则

有的云服务器商镜像会绕过ufw,直接把规则写到iptables里,这种情况下通过ufw的linux查看防火墙配置命令查不到任何信息,需要回到iptables的查询方式。

Windows查看防火墙配置:netsh与PowerShell双路径

Windows环境下的防火墙配置查询,主要依赖两条路径:netsh命令和PowerShell的NetSecurity模块,2012年之后引入的PowerShell命令功能更完整,特别是在Windows Server 2016及之后的版本,推荐优先使用PowerShell方式。

netsh命令一览:

netsh advfirewall firewall show rule name=all
netsh advfirewall show allprofiles
netsh advfirewall show domainprofile
netsh advfirewall show privateprofile
netsh advfirewall show publicprofile

netsh advfirewall firewall show rule name=all会输出所有防火墙规则,包括入站和出站,输出内容非常长,通常会配合findstr过滤:

netsh advfirewall firewall show rule name=all | findstr "规则名称 操作 已启用"

PowerShell方式更灵活,支持结构化筛选:

Get-NetFirewallRule -Enabled True
Get-NetFirewallRule -Direction Inbound | Where-Object {$_.Action -eq 'Allow'}
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction

实际使用建议:业务服务器建议直接执行Get-NetFirewallProfile确认三个配置文件的状态,再根据具体端口查规则,比如排查80端口放行情况,用Get-NetFirewallRule | Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 80}

如何查看防火墙配置,防火墙配置查询命令详解?

,能精准定位到端口对应的规则条目。

不同场景下查看防火墙配置的差异化做法

本地服务器与远程云服务器的查看差异

如果人在机房或通过KVM连到服务器,直接执行命令即可,但运维绝大多数场景是通过SSH远程登录的,这时候查看防火墙配置有一个前提:别把自己关在门外。

强烈建议在查看并修改配置之前,先确认当前SSH端口(通常是22)处于放行状态,部分云平台的防火墙控制台与操作系统内部的防火墙是独立的两层,云厂商的安全组规则优先于系统防火墙执行,稳妥的查看顺序应该是:先去云控制台看安全组规则,再登录系统内查看防火墙配置。

CentOS系统查看防火墙配置的完整操作流程

以一台CentOS 7/8/9云服务器为例,推荐的实操路径:

  1. 执行systemctl status firewalld,确认防火墙服务有没有在跑
  2. 执行firewall-cmd --get-active-zones,确认网卡绑定的zone
  3. 执行firewall-cmd --list-all,查看当前zone的完整配置
  4. 执行firewall-cmd --permanent --list-all,核对永久配置与运行时配置的差异
  5. 如果业务端口没放行,用firewall-cmd --add-port=8080/tcp --permanent补充规则,然后firewall-cmd --reload让配置生效

这五步基本能覆盖一台新接手服务器的常规排查工作,也是检查是否有异常端口对外开放的最直接方法。

查看修改后的防火墙配置,如何确认规则生效

修改完防火墙规则后的确认环节不能省,很多配置问题实际是修改后没有正确生效,或者被下游的某条规则拦截了,建议从以下三个维度验证:

  • 配置层面:重新执行查看命令,确认规则已经写入并处于enabled状态
  • 端口层面:本地执行ss -lntp | grep 端口号,确认服务本身在监听
  • 连通性层面:换一台外部机器,用telnet或nc -vz 服务器IP 端口测试实际连通性

云服务器场景还需要额外确认安全组的放行策略,安全组没放行,系统防火墙查得再仔细,外部访问依然不通这是查配置时最容易被忽略的一层。

防火墙配置查询命令对比表

操作系统/防火墙类型 核心查询命令 适用场景
Linux firewalld firewall-cmd --list-all 查看当前zone放行策略
Linux firewalld firewall-cmd --permanent --list-all 查看永久配置
Linux iptables iptables -L -n -v

如何查看防火墙配置,防火墙配置查询命令详解?

查看所有规则链及命中计数

Linux iptables iptables -t nat -L -n -v 查看NAT转发规则
Ubuntu ufw ufw status verbose 查看默认策略和放行端口
Windows netsh netsh advfirewall firewall show rule name=all 查看所有防火墙规则
Windows PowerShell Get-NetFirewallRule 结构化筛选入站/出站规则
Windows PowerShell Get-NetFirewallProfile 查看三个配置文件状态

查看防火墙配置的常见误区与排查思路

只查规则不查状态。很多新手执行iptables -L看到一堆规则就觉得配置没问题,其实防火墙服务可能根本没启动,规则根本没加载,先确认服务运行状态,再去看规则内容。

只看系统防火墙不看安全组和ACL。服务器外部流量到达系统网卡之前,要先经过云安全组、物理防火墙或交换机ACL,这些网络层的访问控制在系统内查不到,需要登录云控制台或在网络设备上执行查看,能通到系统层的流量才是系统防火墙规则的管辖范围。

配置文件和实际规则混为一谈。永久配置和临时配置的区别前面提到过,遇到重启后规则丢失的问题,基本都能归结到没有正确保存永久配置,iptables的规则默认不落盘,忘记了service iptables save,一重启就回到解放前。

查看防火墙配置相关的问题解答

查看防火墙配置命令在Windows和Linux上通用吗?

完全不通用,Windows核心使用netsh和PowerShell的NetSecurity模块,Linux则根据发行版差异分为firewalld、iptables、ufw三种主要体系,跨平台运维可以通过Ansible这类自动化工具统一封装,但底层调用的依然是各系统原生命令,云服务器管理后台也会提供安全组配置界面,与系统内防火墙彼此独立,排查时需要分别检查这两层配置。

配置防火墙时,端口始终无法访问,怎么排查?

按三层顺序检查,先确认系统防火墙有没有放行对应端口,Linux执行firewall-cmd --list-ports或iptables -L -n,Windows执行Get-NetFirewallPortFilter筛选本地端口,再确认云安全组或物理防火墙的入站策略是否允许该端口,最后用ss -lntp确认服务本身在正常监听,大多数情况下,端口不通都是安全组未放行或系统防火墙规则顺序错误导致的,防火墙规则是顺序匹配的,前面的DROP规则会截断后面的ACCEPT规则,调整规则顺序需要先把规则导出备份再重新排列。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待