用 PowerShell 写可审查的规则
Windows 防火墙的图形界面适合单机操作,但不适合批量与审查:规则的条件、作用范围与生效档案难以统一核对。New-NetFirewallRule 支持更丰富的过滤条件——地址、端口、协议、程序、用户、接口类型与网络档案,写成脚本后规则可版本化、可批量下发、可逐条复核。加固场景中最常用的是“限定来源地址”这一项,把远程管理端口从全域可访问收窄到指定网段。
基本信息
| 加固项 | 精细化入站白名单 |
|---|---|
| 适用平台 | Windows(PowerShell 3.0 及以上,含 Server 核心版) |
| 权限要求 | 本地管理员 |
| 达标判据 | 敏感端口仅对指定网段可达,无遗留宽规则 |
| 常用参数 | -Direction、-Action、-Protocol、-LocalPort、-RemoteAddress、-Profile |
典型使用场景
- RDP、WinRM 等管理端口限制到运维网段
- 数据库与业务端口只允许应用服务器访问
- 批量下发统一规则到多台服务器
- 排查规则冲突,确认哪条规则在放行
- 变更前导出规则留档,便于回滚与审计
示例:仅放行办公网段访问 RDP
示例:仅放行办公网段访问 RDP
New-NetFirewallRule -DisplayName 'RDP-Management-Only' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3389 -RemoteAddress 10.20.0.0/16 -Profile Domain
Get-NetFirewallRule -DisplayName 'RDP*' | Get-NetFirewallPortFilter | Select-Object LocalPort
Get-NetFirewallRule -DisplayName 'RDP*' | Get-NetFirewallAddressFilter | Select-Object RemoteAddress
Get-NetFirewallRule -DisplayName 'RDP-Management-Only' | Select-Object DisplayName, Enabled, Profile, Action清理宽规则与留档
清理宽规则与留档
Get-NetFirewallRule -Direction Inbound -Action Allow | Where-Object {$_.DisplayName -like '*RDP*'} | Select-Object DisplayName, Enabled # 找出同名宽规则
Remove-NetFirewallRule -DisplayName 'RDP-AllNetworks' # 回收放行全域的旧规则
netsh advfirewall export C:\evidence\fw-$(Get-Date -Format yyyyMMdd).wfw # 导出留档
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction # 顺带确认档案默认策略常用参数与含义
| 参数 | 作用 | 注意事项 |
|---|---|---|
| -Direction Inbound | 规则方向 | 入站白名单是加固重点 |
| -RemoteAddress | 限定来源地址 | 支持网段与多个地址,逗号分隔 |
| -Profile Domain | 限定生效的档案 | 不写则对全部档案生效 |
| -Action Allow / Block | 允许或阻止 | Block 规则优先级高于 Allow |
| -LocalPort | 本地端口 | 可写多端口或端口段 |
| -Program | 限定程序路径 | 适合只允许特定程序通信的场景 |
规则命名建议统一前缀(业务名加端口),便于批量查询、审查与回收。批量下发前先导出一份现有规则留档,出问题时可以对比与回滚;同时注意查看档案默认策略,入站默认允许时再多白名单规则也挡不住其他端口。
不加 -Profile 的规则会对域、专用、公用三个档案全部生效——如果本意只是域内管理,就必须显式写 -Profile Domain,否则在公用网络环境下规则同样起作用。此外,收窄 -RemoteAddress 之后一定要清理同名的宽规则,否则原来的全域放行仍然存在,限源等于白做。