配置 Windows 防火墙

概述

本文讲解在 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-GPRegistryValueGet-GPONew-GPONew-GPLinkSet-GPInheritance

新建 GPO 并应用域档案的日志设置

  1. 创建或获取 GPO

    $gpo = New-GPO -Name "Firewall-Policy-Domain"
    

    若编辑现有 GPO:Get-GPO -Name "<GPO 名称>"

  2. 通过 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

前提: 管理端需安装 ActiveDirectoryGroupPolicy(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 的集中与自动化治理,可同时提升可见性与安全性;尤其是出站白名单与集中策略,能更好地契合零信任时代的加固要求。