PowerShell自动化配置防火墙规则需以管理员身份运行、执行策略设为RemoteSigned、系统为专业版及以上;关键参数明确“谁、来干什么、走哪条路”,支持单条精准控制与批量封禁,须验证规则启用状态及全局防火墙开启。
用 powershell 自动化配置高级安全 windows 防火墙规则,核心在于调用 netsecurity 模块中的 cmdlet,直接操作底层策略层,不依赖图形界面,适合批量部署、版本控制和日常运维。
确认运行环境与基础权限
脚本执行前必须满足三项硬性条件,缺一不可:
- 以管理员身份启动 PowerShell(右键 → “以管理员身份运行”)
- 执行策略设为 RemoteSigned:运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force(若当前策略为 Restricted) - 系统版本为 Windows 10/11 专业版、企业版或 Server 2016+(家用版缺少完整
NetSecurity功能)
创建精准单条规则的关键参数组合
一条有效规则的本质是明确“谁、来干什么、走哪条路”。关键参数需按实际网络拓扑填写,避免默认泛化:
- 封禁某 IP 访问 RDP:
New-NetFirewallRule -DisplayName "Block RDP from 192.168.5.100" -Direction Inbound -Protocol TCP -LocalPort 3389 -RemoteAddress 192.168.5.100 -Action Block -Enabled True - 允许 Chrome 所有出站连接:
New-NetFirewallRule -DisplayName "Allow Chrome Outbound" -Direction Outbound -Program "C:\Program Files\Google\Chrome\Application\chrome.exe" -Action Allow - 开放子网访问 Web 服务:
New-NetFirewallRule -DisplayName "Allow Web from 10.0.2.0/24" -Direction Inbound -Protocol TCP -LocalPort 80,443 -RemoteAddress 10.0.2.0/24 -Action Allow -Profile Private(加-Profile可限定生效范围)
批量配置与规则复用的实用方式
手动逐条添加效率低且易出错,推荐两种可靠路径:
-
循环批量封禁多个 IP:
"192.168.1.10","192.168.1.11","192.168.1.12" | ForEach-Object { New-NetFirewallRule -DisplayName "Block $_" -Direction Inbound -RemoteAddress $_ -Action Block } -
加载预定义规则集:使用成熟封装如 WindowsFirewallRuleset,解压后运行
.\SetupFirewall.ps1,可交互启用“数据库”“远程管理”等模块——规则已分组、测试兼容性,避免重复踩坑
验证与持续维护不可省略
规则创建后必须验证是否真正生效:
- 检查规则是否存在且启用:
Get-NetFirewallRule -DisplayName "Block RDP from 192.168.5.100" | Select DisplayName, Enabled, Direction, Action - 确认防火墙全局开启(尤其 Public Profile 常被忽略):
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True - 启用日志便于排查:
Set-NetFirewallProfile -LogAllowed True -LogBlocked True -LogFileName %SystemRoot%\System32\LogFiles\Firewall\pfirewall.log - 模拟测试流量(如用 telnet 或 curl),结合
netstat -ano和事件查看器中的防火墙日志交叉验证拦截效果

















