怎么查看防火墙规则
软件连不上网、端口不通、远程桌面进不来,很多人第一反应就是“是不是防火墙拦了”。那具体怎么查看防火墙规则?坦白讲,Windows 里入口不止一个,能看到的范围差别挺大,点错地方容易白折腾半天。下面按“先看大概、再看全量、最后做筛选”的顺序捋一遍。
最快的入口:Windows 安全中心只能看个大概
打开“设置”→“隐私和安全性”→“Windows 安全中心”→“防火墙和网络保护”,能看到域网络、专用网络、公用网络三个配置文件的开关状态。往下点“允许应用通过防火墙”,就是那份最常见的应用放行清单。
这个列表只包含应用级的放行项,端口规则、IP 范围限制、自定义服务规则统统不在这里。把它当成快速确认工具就行,别指望它反映全部策略。

要看全量规则,老老实实打开 wf.msc
按 Win+R 输入 wf.msc 回车,这是高级安全 Windows Defender 防火墙控制台,也是查规则最正统的地方。左侧三个节点:入站规则、出站规则、连接安全规则。中间那一大列就是全部规则,每条显示名称、组、配置文件、已启用状态和操作(允许还是阻止)。
想看清一条规则的完整内容,双击它。属性窗口分几个选项卡:
- 常规:规则名称、是否启用、允许还是阻止连接
- 程序和服务:这条规则绑定的是哪个 exe,还是某个系统服务
- 协议和端口:TCP/UDP/ICMP 之类,本地端口和远程端口
- 作用域:本地 IP、远程 IP 的范围限制,能看出规则是不是只对某个网段生效
- 高级:适用于哪几个配置文件、是否允许边缘遍历
- 用户和计算机:限制只有特定账户或域内计算机才能触发


规则成百上千条,靠排序和筛选救场
系统自带的规则加上各种软件塞进来的,几百条是常态。别一条条翻,点列标题就能按名称、组、配置文件排序。右侧操作栏里有“筛选依据”,可以只显示已启用的、只显示某配置文件下的、只显示阻止类规则。
要存档或者拿去比对,用右侧的“导出策略”,会生成一个 .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。

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,通知栏里几百条规则一下午就能比完。

几种方式到底怎么选
| 方式 | 能看到什么 | 权限要求 | 适合场景 |
|---|---|---|---|
| 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 或者第三方工具。