Как включить логирование и анализировать логи Windows Firewall?

Если вы подозреваете, что встроенный Windows Defender Firewall блокирует некоторые сетевые подключений (от определенной программы или сервиса), плохим решением будет его полное отключение. Вместо этого вы можете включить логирование сетевого трафика, проходящего через брандмауэр, определить заблокированные используемые порты и/или IP адреса источника/назначения и создать корректное разрешающее правило.

В этой статье мы покажем, как включить логирование сетевых подключений в Windows Firewall и выполнить поиск по логам.

Настройка логирования Windows Firewall в текстовый файл

Windows Defender Firewall позволяет записывать в лог файл как успешные так и заблокированные сетевые подключения. Логирование можно включить отдельно для каждого сетевого профиля (частная, общедоступная или доменная сеть). По умолчанию логирование трафика в брандмауэре отключено. Чтобы включить ведение логов в Windows Firewall:

  1. Откройте MMC оснастку Windows Firewall with Advanced Security ( wf.msc ).
  2. Щелкните правой кнопкой по корню консоли и выберите Properties;
  3. Затем выберите вкладку сетевого профиля Windows, для которого вы хотите включить логирование (Domain, Private или Public Profile).
    Используемый в данный момент тип сетевого профиля для сетевого подключения можно узнать с помощью команды:
    Get-NetConnectionProfile
    Get-NetConnectionProfile - определить тип сетевого профиля
  4. На вкладке профиля в секции Logging нажмите кнопку Customize.
  5. Здесь можно изменить следующие настройки:
    Файл лога: по умолчанию %systemroot%\system32\LogFiles\Firewall\pfirewall.log

    Максимальный размер лога: увеличьте с 4 Мб до 20 Мб ( 20480 Кб)

    Log dropped packets: нужно ли записывать в лог отфильтрованные сетевые пакеты

    Log successful connections: нужно ли логировать успешные сетевые подключения (может получиться очень большой лог)

Чтобы понять, какой сетевой профиль заблокировал или пропустил определенное сетевое подключение, можно писать лог файервола в отдельный файл для каждого профиля. Например:

  • %windir%\system32\logfiles\firewall\pfirewall_domain.log
  • %windir%\system32\logfiles\firewall\pfirewall_private.log
  • %windir%\system32\logfiles\firewall\pfirewall_public.log

Также можно включить эти же параметры логирования Windows Firewall с помощью PowerShell:

Set-NetFireWallProfile -Profile Public -LogBlocked True -LogMaxSize 20480 -LogFileName "%systemroot%\system32\LogFiles\Firewall\pfirewall.log" -Verbose

Вывести текущие настройки логирования брандмауэра для всех профилей:

Get-NetFirewallProfile| select Name, Enabled, Log*|ft

Включить ведение логов брандмауэра Windows Firewall

Также можно включить логирование в Windows Firewall через GPO.

Теперь Windows Firewall будет записывать в лог файлы все сетевые подключения. Вы можете открыть файл лога вручную или выполнить поиск по нему с помощью PowerShell. Командлет Select-String совмещает в себе аналог grep и tail для Windows.

Например, следующая команда будет выводить в реальном времени на экран все отфильтрованные (DROP) сетевые подключения на порт TCP порт 445 (SMB):

Get-Content C:\Windows\System32\LogFiles\Firewall\pfirewall.log -wait | Select-String -pattern "DROP.*TCP.*445"

Вывести лог Windows Firewall в реальном времени PowerShell

Используется такой формат лог файла:

date time action protocol src-ip dst-ip src-port dst-port size tcpflags tcpsyn tcpack tcpwin icmptype icmpcode info path pid

Для анализа лог файлов файервола можно воспользоваться такой PowerShell функцией, которая представит лог в виде удобной графической таблицы Out-GridView:

function Get-WindowsFirewallLog {
param(
[parameter(Position=0,Mandatory=$false)]
[ValidateScript({Test-Path $_})]
[string]$LogFilePath = "$env:SystemRoot\System32\LogFiles\Firewall\pfirewall.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 Firewall

Запись логов Windows Firewall в журнал событий Windows

По сравнению с текстовыми файлам иногда более удобно записывать логи сетевых подключений Windows Firewall в журнал событий (Event Viewer). Для этого нужно включить политики аудита в локальной GPO:

  1. Откройте редактор локальной GPO ( gpedit.msc )
  2. Перейдите в раздел Computer Configuration -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> System Audit Policies — Local Group Policy Object -> Object Access
  3. Параметр Audit Filtering Platform Packet drop позволяет включить аудит заблокированных подключений Windows Firewall. Откройте настройки политики и активируйте опцию Failure. Включить политику Audit Filtering Platform Packet drop
  4. Audit Filtering Platform Connection позволяет логировать успешные подключения. Используется эта политика аудита довольно редко, т.к. в лог будет писаться очень много событий (потребуется увеличение размеров журнала Event Viewer)
  5. Обновите настройки локальной GPO командой gpupdate /force
Такую политику аудита можно включить командой:

Auditpol /set /category:"System" /SubCategory:"Filtering Platform Packet Drop" /failure:enable

Вывести текущие настройки политика аудита Windows Firewall:

auditpol /get /subcategory:"Filtering Platform Packet Drop","Filtering Platform Connection"

Auditpol включить аудит событий брандмауэра Windows

Чтобы посмотреть события Windows Firewall, откройте Event Viewer ( eventvwr.msc ). Разверните Windows Logs -> Security. Включите фильтр событий по категории Filtering Platform Packet Drop.

В списке событий появится все сетевые подключения, заблокированные Windows Firewall. Такие события будут иметь Event ID 5152 ( The Windows Filtering Platform has blocked a packet ). В описании события можно получить сетевую информацию: номер протокола (TCP-6, UDP-17, ICMP-1), IP адрес и порт источника/приемника, направление (Inbound, Outbound), процесс (для исходящих подключений).

Событие Event ID 5152 (The Windows Filtering Platform has blocked a packet).

Для поиска и фильтрации событий Windows Firewall в Event Viewer можно использовать PowerShell командлет Get-WinEvent. Следующий PowerShell скрипт выполнит поиск всех заблокированных брандмауэром событий (попыток) подключений на порт 3388 и выведет таблицу с временем подключения и источником:

$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 Firewall

Таким образом, включив логи брандмауэра вы можете детально инспектировать все отброшенные и разрешенные взодящие/исходящие сетевые соединения, найти ошибки в своих правилах Windows Firewall и создать корректные.


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)