Windows Server查询防火墙规则确认443、80端口是否被封禁
问题排查与解决方法
原命令错误原因
- 过滤逻辑位置错误:80端口的过滤规则被写在了
Format-Table的自定义列表达式中,仅会让非80端口规则的LocalPort列为空,不会过滤无关规则,因此输出了全量防火墙规则,不符合需求 - 重复调用接口:每条规则都多次调用
Get-NetFirewallPortFilter接口,执行效率极低 - 缺少443端口检测逻辑:原命令仅涉及80端口相关逻辑,未包含443端口的校验逻辑
可用实现代码
1. 列出所有阻止80端口入站的规则
# 筛选所有启用的、入站方向、动作为阻止、且本地端口包含80的防火墙规则 Get-NetFirewallRule -Enabled True -Direction Inbound -Action Block | Get-NetFirewallPortFilter | Where-Object { $_.LocalPort -eq 80 -or $_.LocalPort -eq 'Any' } | ForEach-Object { $portFilter = $_ $rule = $portFilter | Get-NetFirewallRule [PSCustomObject]@{ Name = $rule.Name DisplayName = $rule.DisplayName DisplayGroup = $rule.DisplayGroup Protocol = $portFilter.Protocol LocalPort = $portFilter.LocalPort RemotePort = $portFilter.RemotePort RemoteAddress = ($rule | Get-NetFirewallAddressFilter).RemoteAddress Enabled = $rule.Enabled Profile = $rule.Profile Direction = $rule.Direction Action = $rule.Action } } | Format-Table -AutoSize
2. 检测443端口是否被入站封禁
# 检测443端口是否被入站阻止 $block443Rules = Get-NetFirewallRule -Enabled True -Direction Inbound -Action Block | Get-NetFirewallPortFilter | Where-Object { $_.LocalPort -eq 443 -or $_.LocalPort -eq 'Any' } if ($block443Rules) { Write-Host "检测到存在阻止443端口入站的防火墙规则,规则如下:" $block443Rules | ForEach-Object { ($_ | Get-NetFirewallRule).DisplayName } } else { Write-Host "未找到直接阻止443端口入站的启用规则" }
内容的提问来源于stack exchange,提问作者Bryan-Chan
相关产品推荐
相关产品推荐

