怎么查看防火墙规则

系统问题

软件连不上网、端口不通、远程桌面进不来,很多人第一反应就是“是不是防火墙拦了”。那具体怎么查看防火墙规则?坦白讲,Windows 里入口不止一个,能看到的范围差别挺大,点错地方容易白折腾半天。下面按“先看大概、再看全量、最后做筛选”的顺序捋一遍。

最快的入口:Windows 安全中心只能看个大概

打开“设置”→“隐私和安全性”→“Windows 安全中心”→“防火墙和网络保护”,能看到域网络、专用网络、公用网络三个配置文件的开关状态。往下点“允许应用通过防火墙”,就是那份最常见的应用放行清单。

这个列表只包含应用级的放行项,端口规则、IP 范围限制、自定义服务规则统统不在这里。把它当成快速确认工具就行,别指望它反映全部策略。

Windows 安全中心“防火墙和网络保护”页面

要看全量规则,老老实实打开 wf.msc

按 Win+R 输入 wf.msc 回车,这是高级安全 Windows Defender 防火墙控制台,也是查规则最正统的地方。左侧三个节点:入站规则、出站规则、连接安全规则。中间那一大列就是全部规则,每条显示名称、组、配置文件、已启用状态和操作(允许还是阻止)。

想看清一条规则的完整内容,双击它。属性窗口分几个选项卡:

  • 常规:规则名称、是否启用、允许还是阻止连接
  • 程序和服务:这条规则绑定的是哪个 exe,还是某个系统服务
  • 协议和端口:TCP/UDP/ICMP 之类,本地端口和远程端口
  • 作用域:本地 IP、远程 IP 的范围限制,能看出规则是不是只对某个网段生效
  • 高级:适用于哪几个配置文件、是否允许边缘遍历
  • 用户和计算机:限制只有特定账户或域内计算机才能触发

wf.msc 高级安全 Windows Defender 防火墙的入站规则列表界面

入站规则的属性窗口

规则成百上千条,靠排序和筛选救场

系统自带的规则加上各种软件塞进来的,几百条是常态。别一条条翻,点列标题就能按名称、组、配置文件排序。右侧操作栏里有“筛选依据”,可以只显示已启用的、只显示某配置文件下的、只显示阻止类规则。

要存档或者拿去比对,用右侧的“导出策略”,会生成一个 .wfw 文件。说句心里话,这文件本质是 XML,用记事本或者浏览器打开能看,但可读性一般,规则多的时候还是直接在控制台里筛更省事。

命令行派:PowerShell 一条命令列全部

按 Win+X 选“终端(管理员)”,或者搜 PowerShell 右键以管理员身份运行。管理员权限是必须的,普通权限下读不全甚至直接报错。

列出全部规则:

Get-NetFirewallRule | Format-Table DisplayName, Enabled, Direction, Action

找某个程序的规则,用通配符过滤名称:

Get-NetFirewallRule -DisplayName "*wechat*"

麻烦的地方在于,Get-NetFirewallRule 本身不显示端口和 IP。要拿这些细节得管道往下接:

  • Get-NetFirewallPortFilter:协议、本地端口、远程端口
  • Get-NetFirewallAddressFilter:本地和远程地址范围
  • Get-NetFirewallApplicationFilter:关联的 exe 路径

组合起来看某条规则的完整面貌,可以写成 Get-NetFirewallRule -DisplayName "*远程桌面*" | Get-NetFirewallPortFilter

PowerShell 中 Get-NetFirewallRule 命令的输出表格

netsh 老命令,服务器上照样好使

netsh 没被废弃,文本输出对老运维特别友好。以管理员身份打开命令提示符:

netsh advfirewall firewall show rule name=all

输出是纯文本,中文系统直接给你中文字段:规则名称、已启用、方向、配置文件、分组、本地IP、远程IP、协议、本地端口、远程端口、边缘遍历、操作。信息量和 wf.msc 里的属性页基本对得上。

查单条规则,名字里有括号或空格要加引号:

netsh advfirewall firewall show rule name="远程桌面 - 用户模式(TCP-In)"

只想快速扫一遍名称和动作,用 findstr 过滤:

netsh advfirewall firewall show rule name=all | findstr /i "规则名称 操作"

要留档就直接重定向到文件:netsh advfirewall firewall show rule name=all > d:\fw.txt,通知栏里几百条规则一下午就能比完。

命令提示符中 netsh advfirewall firewall show rule name=all 的输出内容

几种方式到底怎么选

方式 能看到什么 权限要求 适合场景
Windows 安全中心 三个配置文件开关、应用放行清单 普通用户 快速确认某个软件有没有被放行
wf.msc 全部入站/出站/连接安全规则及完整参数 普通用户可看,改动需管理员 逐条核对、手工调试规则
PowerShell 全部规则,可管道拼接端口、地址、程序过滤器 管理员 批量筛选、脚本化统计
netsh 全部规则的文本明细 管理员 导出留档、远程会话里操作

只想知道某个程序是不是被拦了

这种情况不用逐个翻规则。按这个顺序走:先在 Windows 安全中心的“允许应用通过防火墙”里找程序名,勾上了说明没被应用规则挡住;没勾上,去 wf.msc 里用名称搜索框搜这个程序,看有没有一条操作是“阻止”的规则。

这里有个坑:允许规则和阻止规则同时命中一个程序时,阻止优先。所以看到“允许”的条目也别急着下结论,得确认没有对应的阻止项。

第三方杀软接管了防火墙

装了卡巴斯基、火绒、360 这类带网络防护的软件后,Windows 安全中心里可能显示“由某某管理”,防火墙页面变灰。wf.msc 依然能打开,但里面显示的规则不一定代表实际生效的策略。

碰上这种,去第三方软件自己的防火墙或网络防护模块里看,那才是真正在管事的地方。判断谁在管事很简单:看 Windows 安全中心防火墙页面顶部有没有挂“由 XX 管理”的字样。

Linux 上的查看命令

如果你是 SSH 上去看服务器,Windows 这套完全不适用,按发行版选命令:

  • Ubuntu/Debian:sudo ufw status verbose,加 numbered 还能显示规则编号方便删除
  • CentOS/RHEL/Fedora:sudo firewall-cmd --list-all,想看所有区域用 --list-all-zones
  • 直查内核层:sudo iptables -L -n -v,新的 nftables 体系则用 sudo nft list ruleset

注意 ufw、firewall-cmd 是上层封装,iptables 才是底层。三者同时装的时候要对上号,不然会出现“上层显示放行、底层却在丢包”的情况。

macOS 上的查看方式

图形界面在“系统设置”→“网络”→“防火墙”,点“选项”能看到允许传入连接的应用列表。命令行更细一点:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate 看总开关,--listapps 列出所有被管理的应用,--getblockall 看是否开启了全部阻止模式。

macOS 的这套应用层防火墙颗粒度比 Windows 粗得多,没有端口级别的手工规则,需要精细控制通常得靠 pf 或者第三方工具。

操作系统种类多样、版本繁杂,本文内容可能无法完全匹配你的具体环境,不保证完全正确或普遍适用,仅供操作参考。