查看防火墙状态与策略
端口不通时,先确认防火墙这一关到底是不是拦住了。Windows 防火墙按域、专用、公用三套配置文件分别生效,当前网络类型决定采用哪一套,因此只查一套就下结论容易出错。需要确认两点:该配置文件是否开启,以及默认入站动作是允许还是阻止。默认阻止时,只有显式放行的入站流量能进来,这也解释了为什么服务明明在监听却连不上。
基本信息
| 适用平台 | Windows Server 2008 及以上、Windows 7 及以上 |
|---|---|
| 传统写法 | netsh advfirewall show allprofiles |
| PowerShell 写法 | Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction |
| 三套配置 | 域、专用、公用,按当前网络类型生效 |
| 关注字段 | 状态是否开启、默认入站动作、默认出站动作、日志设置 |
| 权限 | 查看一般无需提升,部分设置项需要管理员 |
典型使用场景
- 端口不通时确认防火墙是否为拦截方
- 确认当前生效的配置文件,避免只看一套得出结论
- 核对默认入站动作,判断是否必须显式放行才能访问
- 确认第三方安全软件是否接管了防火墙行为
- 变更前后对比状态,验证规则调整是否生效
- 导出配置用于基线核对与审计
常用示例
常用示例
:: 查看三套配置文件的完整状态(CMD)
netsh advfirewall show allprofiles
:: 只看域配置
netsh advfirewall show domainprofile
:: 查看当前生效的配置文件
netsh advfirewall show currentprofile
:: 关闭指定配置文件的防火墙(需管理员,谨慎)
netsh advfirewall set privateprofile state off
:: 导出当前策略
netsh advfirewall export D:\fw\policy.wfwPowerShell 等价写法
PowerShell 等价写法
# 三套配置的状态与默认动作
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction
# 只看当前生效的一套
Get-NetFirewallProfile -PolicyStore ActiveStore | Where-Object Enabled -eq True | Select-Object Name, Enabled, DefaultInboundAction
# 查看某端口相关的规则
Get-NetFirewallRule -Direction Inbound -Enabled True | Get-NetFirewallPortFilter | Where-Object LocalPort -eq 80
# 导出全部规则供核对
Get-NetFirewallRule | Export-Csv D:\fw\rules.csv -Encoding UTF8 -NoTypeInformation字段判读
| 字段 | 含义 | 异常信号 |
|---|---|---|
| 状态 | 该配置文件是否启用 | 关键业务主机全关属高风险配置 |
| 默认入站动作 | 未被规则匹配的入站流量如何处理 | 为阻止时端口必须显式放行 |
| 默认出站动作 | 出站流量的默认处理方式 | 限制过严会导致更新与解析失败 |
| 当前配置 | 当前网络类型对应的那一套 | 排查要以它为准 |
| 日志设置 | 被丢弃流量是否记录 | 排障时可临时开启,事后关闭 |
三套配置按当前网络类型生效,服务器通常处于域配置而笔记本会随所在网络切换。只查一套就断定端口被挡,容易得出错误结论。
安装第三方安全软件后,系统防火墙显示正常但端口仍可能不通,因为流量被其它组件接管。排障时要把这类软件一并纳入考虑。