概述
本文讲解在 Windows Server 上配置 Windows Defender Firewall(原 Windows Firewall)的方法。内容包含:域/专用/公用三类档案(Profile)的设计指引、入站/出站策略优化、日志采集与分析,以及通过 GPO 与脚本实现的集中化与自动化运维。
变量约定
| 变量名 | 示例 | 说明 |
|---|---|---|
<<SERVER_NAME>> |
SRV-CORE01 |
目标服务器主机名 |
<<LOG_PATH>> |
C:\FirewallLogs\pfirewall.log |
防火墙日志输出路径 |
<<OU_NAME>> |
Servers |
OU 名称 |
Step 1: 认识档案并制定应用方案
Windows Defender 防火墙包含三类档案:
| 档案 | 用途 | 典型环境 |
|---|---|---|
| 域(Domain) | 已加入 Active Directory 的网络 | 企业 LAN、VPN |
| 专用(Private) | 可信的独立网络 | 测试、封闭网络 |
| 公用(Public) | 不可信网络 | 公共 Wi-Fi、实验/虚拟环境 |
各档案可分别配置,并会按网络标识自动切换。
检查命令:
# 查看各档案状态与默认策略
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction
Step 2: 基础策略(默认行为)
默认情况下:入站阻止、出站允许。
可保持此策略,或按需引入出站白名单控制。
# 显式设置默认策略
Set-NetFirewallProfile -Profile Domain,Private,Public `
-DefaultInboundAction Block `
-DefaultOutboundAction Allow `
-NotifyOnListen True
提示: 高安全场景建议将
-DefaultOutboundAction设为Block,仅按需放行必要的出站通信(如 DNS、NTP、WSUS),即“白名单”模式。
Step 3: 规则操作与管理
列表与筛选
# 所有规则
Get-NetFirewallRule
# 名称包含 “RDP” 的规则
Get-NetFirewallRule | Where-Object DisplayName -Like "*RDP*"
# 仅显示已启用的规则
Get-NetFirewallRule | Where-Object Enabled -eq "True"
新建规则
# 允许入站 RDP (TCP/3389),仅限域档案
New-NetFirewallRule -DisplayName "Allow RDP (Domain)" `
-Direction Inbound -Protocol TCP -LocalPort 3389 `
-Action Allow -Profile Domain
# 允许出站 NTP (UDP/123)
New-NetFirewallRule -DisplayName "Allow NTP Outbound" `
-Direction Outbound -Protocol UDP -LocalPort 123 `
-Action Allow -Profile Domain,Private,Public
参数表(示例与取值)
| 项目 | 参数 | 示例 | 可接受的格式/值 |
|---|---|---|---|
| 方向 | -Direction |
Inbound / Outbound |
Inbound, Outbound |
| 动作 | -Action |
Allow / Block |
Allow, Block |
| 协议 | -Protocol |
TCP / UDP / ICMPv4 / ICMPv6 / Any |
如上;ICMP 可配合 -IcmpType 细分 |
| 本地端口 | -LocalPort |
80 / 1024-2048 / 80,443,8080 |
单端口、范围、逗号分隔列表 |
| 远程端口 | -RemotePort |
53 / 1000-2000 / 53,67,68 |
单端口、范围、逗号分隔列表 |
| 远程地址 | -RemoteAddress |
192.168.1.1 / 192.168.0.0/24 / Any |
单 IP、CIDR、范围、列表、Any |
| 本地地址 | -LocalAddress |
10.0.0.1 / 10.0.0.0/16 / Any |
单 IP、CIDR、范围、列表、特殊关键字、Any |
| 程序 | -Program |
C:\Program Files\App\App.exe |
可执行文件完整路径 |
| 服务 | -Service |
W32Time |
Windows 服务名 |
| 档案 | -Profile |
Domain,Private |
Domain, Private, Public 组合 |
| 接口类型 | -InterfaceType |
Ethernet / Wireless / RemoteAccess |
支持的接口类型 |
例:仅允许来自可信 IP 的 HTTP 入站
New-NetFirewallRule -DisplayName "Allow HTTP from Trusted IP" `
-Direction Inbound -Protocol TCP -LocalPort 80 `
-RemoteAddress 192.168.1.100 `
-Action Allow -Profile Domain,Private
例:放行指定程序的出站
New-NetFirewallRule -DisplayName "Allow Outbound for App.exe" `
-Direction Outbound -Program "C:\Program Files\App\App.exe" `
-Action Allow -Profile Domain,Private,Public
例:放行指定服务的入站
New-NetFirewallRule -DisplayName "Allow Service XYZ Inbound" `
-Direction Inbound -Service "W32Time" `
-Action Allow -Profile Domain,Private
例:在无线接口上阻止出站
New-NetFirewallRule -DisplayName "Block Outbound on Wireless" `
-Direction Outbound -InterfaceType Wireless `
-Action Block -Profile Public
修改、启停与删除
# 临时禁用
Disable-NetFirewallRule -DisplayName "Allow RDP (Domain)"
# 重新启用
Enable-NetFirewallRule -DisplayName "Allow RDP (Domain)"
# 修改(如将档案限定为 Domain 与 Private)
Set-NetFirewallRule -DisplayName "Allow RDP (Domain)" -Profile Domain,Private
# 删除
Remove-NetFirewallRule -DisplayName "Allow RDP (Domain)"
导出 / 导入规则集
# 导出防火墙策略
netsh advfirewall export "C:\Backup\FirewallPolicy.wfw"
# 导入防火墙策略
netsh advfirewall import "C:\Backup\FirewallPolicy.wfw"
Step 4: 日志采集与审计
记录允许/拒绝事件并监控异常通信。
# 同时记录 Allow/Block,最大 32MB
Set-NetFirewallProfile -Profile Domain,Private,Public `
-LogAllowed True -LogBlocked True `
-LogFileName "<<LOG_PATH>>" -LogMaxSizeKilobytes 32767
实时查看:
Get-Content "<<LOG_PATH>>" -Tail 20 -Wait
注意: 开启
LogAllowed=True会显著增加日志量。生产环境可仅在关键档案(如 Public)启用,配合日志轮转与归档。-LogMaxSizeKilobytes上限为 32767 KB,超出将报错。
Step 5: 通过 GPO 实现集中管理
可使用 GroupPolicy 模块的 cmdlet 直接编辑/自动化防火墙策略。
关键命令:Set-GPRegistryValue、Get-GPO、New-GPO、New-GPLink、Set-GPInheritance。
新建 GPO 并应用域档案的日志设置
-
创建或获取 GPO
$gpo = New-GPO -Name "Firewall-Policy-Domain"若编辑现有 GPO:
Get-GPO -Name "<GPO 名称>"。 -
通过 GPO 注册表项下发配置
# 启用域档案日志 Set-GPRegistryValue -Name $gpo.DisplayName ` -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile" ` -ValueName "EnableLogging" -Type DWord -Value 1 # 日志路径与大小 Set-GPRegistryValue -Name $gpo.DisplayName ` -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\Logging" ` -ValueName "LogFilePath" -Type String -Value "%systemroot%\system32\logfiles\firewall\pfirewall.log" Set-GPRegistryValue -Name $gpo.DisplayName ` -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\Logging" ` -ValueName "LogFileSize" -Type DWord -Value 32767
这些设置在使用
New-GPLink将 GPO 关联到 OU 后生效。
关联到 OU(New-GPLink)
向 -Target 传入 OU 的 DN(或域 DN)。
Import-Module ActiveDirectory
$gpo = Get-GPO -Name "Firewall-Policy-Domain"
# 按名称查找 OU 并获取其 DN
$ou = Get-ADOrganizationalUnit -LDAPFilter '(name=<<OU_NAME>>)' `
-SearchBase (Get-ADDomain).DistinguishedName -SearchScope Subtree |
Select-Object -First 1
$ouDn = $ou.DistinguishedName
# 将 GPO 链接到 OU(启用;是否 Enforced 可选)
New-GPLink -Name $gpo.DisplayName -Target $ouDn -LinkEnabled Yes -Enforced No
前提: 管理端需安装 ActiveDirectory 与 GroupPolicy(RSAT)模块。
Step 6: 周期性验证与故障排查
# 查看当前有效规则
Get-NetFirewallRule | Where-Object {$_.Enabled -eq "True"} |
Select-Object DisplayName, Direction, Action, Profile
# 端口连通性测试
Test-NetConnection -ComputerName <<SERVER_NAME>> -Port 3389
总结
Windows Defender 防火墙在 Windows Server 上提供稳健的网络防护。通过对入/出站的显式控制、日志分析与基于 GPO/PowerShell 的集中与自动化治理,可同时提升可见性与安全性;尤其是出站白名单与集中策略,能更好地契合零信任时代的加固要求。
