如果您怀疑内置的Windows Defender防火墙正在阻止网络连接(来自特定程序或服务),则完全禁用它是一个坏主意。取而代之的是,您可以记录通过Windows Defender防火墙的所有网络流量,标识过滤/丢弃的数据包,查找端口和源/目标IP地址,然后创建适当的允许规则。
在本文中,我们将展示如何在Windows防火墙中启用网络连接记录以及如何分析日志。
内容:
Windows Defender防火墙允许记录成功和阻塞的网络连接。可以为每个网络配置文件单独启用记录(Private
,,,,Public
, 或者Domain Network
)。默认情况下,在Windows防火墙中禁用了流量记录。打开防火墙的交通调试:
- 打开快照带有高级安全MMC的Windows防火墙((
wf.msc
)。 - 右键单击控制台的根,然后选择特性;
- 然后转到Windows网络配置文件的选项卡,您要为其启用登录(领域,,,,私人的, 或者公共资料)。要检查Windows中分配给活动网络接口的网络配置文件,请使用命令:
Get-NetConnectionProfile
- 在“配置文件”选项卡上,单击定制按钮在记录部分。
- 在这里,您可以配置以下设置:
姓名(日志文件):默认情况下%systemroot%system32LogFilesFirewallpfirewall.log
尺寸限制:将最大对数大小从4 MB增加到20 MB(20480
KB)
日志删除数据包:是否有必要记录删除数据包连接?
日志成功的连接:记录所有成功的网络连接可能会导致非常大的日志文件。
要有效地监视和了解哪个网络配置文件(域,私人或公共)正在阻止或允许特定的网络连接,您可以配置Windows防火墙以在单独的日志文件中记录每个配置文件的活动。例如:
%windir%system32logfilesfirewallpfirewall_domain.log
%windir%system32logfilesfirewallpfirewall_private.log
%windir%system32logfilesfirewallpfirewall_public.log
Windows防火墙记录选项也可以通过PowerShell配置:
Set-NetFireWallProfile -Profile Public -LogBlocked True -LogMaxSize 20480 -LogFileName "%systemroot%system32LogFilesFirewallpfirewall.log" -Verbose
列出当前所有配置文件的防火墙记录设置:
Get-NetFirewallProfile| select Name, Enabled, Log*|ft
还可以通过GPO在Windows防火墙中启用记录选项。
用PowerShell解析Windows防火墙日志
现在,所有网络连接都通过Windows防火墙记录到纯文本文件。您可以手动打开日志文件,也可以使用PowerShell搜索日志文件中的特定连接(windows等效于GREP和TAIL命令是Select-String
CMDLET)。
例如,实时显示以下命令所有过滤(Drop)网络连接到TCP端口445(SMB):
Get-Content C:WindowsSystem32LogFilesFirewallpfirewall.log -wait | Select-String -pattern "DROP.*TCP.*445"
使用以下日志文件格式:
date time action protocol src-ip dst-ip src-port dst-port size tcpflags tcpsyn tcpack tcpwin icmptype icmpcode info path pid
使用此PowerShell函数,该函数在方便的外浏览图图形表中显示日志,分析防火墙日志文件:
了解更多:两种配置Windows防火墙以允许SQL Server访问的方法
function Get-WindowsFirewallLog {
param(
[parameter(Position=0,Mandatory=$false)]
[ValidateScript({Test-Path $_})]
[string]$LogFilePath = "$env:SystemRootSystem32LogFilesFirewallpfirewall.log"
)
$headerFields = @("date","time", "action","protocol","src-ip","dst-ip","src-port","dst-port","size", "tcpflags","tcpsyn", "tcpack","tcpwin","icmptype","icmpcode", "info","path")
$firewallLogs = Get-Content $LogFilePath | ConvertFrom-Csv -Header $headerFields -Delimiter ' '
$firewallLogs | Out-GridView
}
Get-WindowsFirewallLog
在活动查看器中查看Windows防火墙日志
有时将Windows防火墙连接日志写入事件查看器而不是文本文件更方便。这可以通过在本地GPO中启用审计政策来实现:
- 打开本地GPO编辑器(
gpedit.msc
) - 转到计算机配置 - > Windows设置 - >安全设置 - >高级审核策略配置 - >系统审核策略 - 本地组策略对象 - >对象访问
- 可以使用阻止的连接事件发送到事件查看器审核过滤平台数据包下降政策。启用失败策略设置中的选项。
- 审核过滤平台连接参数用于记录Windows防火墙中的成功连接。此审核策略很少使用,因为启用它可以导致许多事件写入日志(这需要增加事件查看器日志的最大大小)
- 更新计算机上的GPO设置:
gpupdate /force
可以使用命令启用此审核策略:
Auditpol /set /category:"System" /SubCategory:"Filtering Platform Packet Drop" /failure:enable
查看当前的Windows防火墙审核策略设置:
auditpol /get /subcategory:"Filtering Platform Packet Drop","Filtering Platform Connection"
要查看Windows防火墙事件,请打开活动查看器(eventvwr.msc
)。扩展Windows日志 - >安全性。启用事件过滤器过滤平台数据包下降类别。
Windows防火墙阻止的所有连接将在活动查看器中提供。这些事件有最终5152
(Windows过滤平台已阻止了一个数据包)。事件描述包括网络数据包信息:协议编号(TCP - 6
,UDP17
,ICMP1
),IP地址和源/目标端口,方向(入站,出站),进程名称(用于传出连接)。
使用Get-WineVent PowerShell CMDLET在事件查看器中搜索和过滤Windows防火墙事件。以下powershell脚本找到了端口3388上的Windows防火墙阻止的所有连接尝试,并返回了连接时间和源的表格:
$destinationPort = "3388"
$filterXml = @"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=5152)]]
and
*[EventData[Data[@Name="DestPort"] and (Data="$destinationPort")]]
</Select>
</Query>
</QueryList>
"@
$FirewallLogs = @()
$events=Get-WinEvent -FilterXml $filterXml
foreach ($event in $events) {
$eventXml = [xml]$event.ToXml()
$SourceAddress = $eventXml.Event.EventData.Data | Where-Object { $_.Name -eq 'SourceAddress' } | Select-Object -ExpandProperty '#text'
$DestPort = $eventXml.Event.EventData.Data | Where-Object { $_.Name -eq 'DestPort' } | Select-Object -ExpandProperty '#text'
$FirewallLog = New-Object PSObject -Property @{
SourceAddress= $SourceAddress
Time=$event.TimeCreated
DestPort=$DestPort
}
$FirewallLogs += $FirewallLog
}
$FirewallLogs
启用防火墙日志记录使您可以检查所有允许的网络连接和删除网络连接,帮助识别Windows防火墙规则中的错误并创建准确的网络连接。