Ця стаття присвячена основам управління настройками і правилами вбудованого Windows Firewall з командного рядка PowerShell. Ми розглянемо, як вмикати / вимикати брандмауер для різних профілів, створювати і видаляти правила брандмауера, і розглянемо невеликий скрипт, що дозволяє сформувати зручну таблицю з поточним набором активних правил брандмауера.

Ви можете управляти настройками Windows Firewall з графічної консолі Control Panel -> System and Security -> Брандмауер Windows Defender. Однак починаючи з Windows 8.1 (Windows Server 2012R2) для управління вбудованим брандмауером в систему був доданий вбудований PowerShell модуль NetSecurity.

Раніше для управління правилами і настройками брандмауера Windows використовувалася команда netsh advfirewall firewall .

У модулі NetSecurity в Windows 10 є 85 команд. Ви можете вивести їх список:

Get-Command -Module NetSecurity

модуль NetSecurity для управління Windows Defender Firewall з PowerShell

Управління мережевими профілями брандмауера Windows з PowerShell

У Windows Firewall є три типи мережевих профілів:

  • Domain (Доменний) – застосовується до комп’ютерів, включених в домен Active Directory;
  • Private (Приватний) – домашні чи робочі мережі;
  • Public (Загальний) – загальнодоступні мережі.

Windows Defender Firewall управління з панелі управління

Інформація про типи мереж зберігається службою Network Location Awareness (NLA) в базі даних. Ви можете змінити профіль мережі, якщо він визначився некоректно.

Кожен профіль може відрізнятися використовуваним набором правил брандмауера. За замовчуванням всі мережеві інтерфейси комп’ютера захищені фаейрволом і до них застосовуються всі три типи профілів.

Щоб включити всі три мережевих профілю Domain, Public і Private, використовуйте команду:

Set-NetFirewallProfile -All -Enabled True

Або вкажіть конкретний профіль замість All:

Set-NetFirewallProfile -Profile Public -Enabled True

Щоб відключити фаєрвол для всіх трьох мережевих профілів, використовується команда:

Set-NetFirewallProfile -All -Enabled False

За допомогою командлета Set-NetFirewallProfile ви можете змінити параметри профілю (дія за замовчуванням, журнал роботи, шлях і розмір файлу журналу, налаштування сповіщень і т.д.).

Як ви, напевно, знаєте, за замовчуванням Windows Firewall включений в сучасних ОС для всіх профілів. В налаштуваннях профілів дозволені всі вихідні підключення і блокується входять (крім дозволених).

Змінимо дію по-умолчнію для профілю Public – заблокувати всі вхідні підключення.

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

Поточні параметри профілю можна вивести так:

Get-NetFirewallProfile -Name Public

настройки за замовчуванням для public профілю Windows Firewall

Якщо ви керуєте налаштуваннями Windows Firewall через GPO, ви можете вивести поточні результуючі настройки профілів так:

Get-NetFirewallProfile -policystore activestore

Перевіримо, що всі параметри брандмауера застосовуються до всіх мережевих інтерфейсу комп’ютера.

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Якщо все інтерфейси захищені, команда повинна повернути:

DisabledInterfaceAliases : {NotConfigured}

Get-NetFirewallProfile

Можна відключити певний профіль для інтерфейсу (вивести список імен інтерфейсів можна за допомогою командлета Get-NetIPInterface).

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Як ви бачите, тепер профіль Public не застосовується до інтерфейсу Ethernet0:

DisabledInterfaceAliases : {Ethernet0}

Set-NetFirewallProfile - ізсеніть настройки профілю Firewall

Ви можете налаштувати параметри логування здійснювати підключення до мережі на рівні кожного профілю. За замовчуванням журнали Windows Firewall зберігаються в каталозі% systemroot% system32 LogFiles Firewall, розмір файлу – 4 Мб. Ви можете змінити включити журнал підключень і збільшити максимальний розмір файлу:

Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%system32LogFilesFirewallpfirewall.log’

Створення, редагування та видалення правил Windows Firewall з PowerShell

Для управління правилами брандмауера є 9 командлетів:

  • New-NetFirewallRule
  • Копіювати NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Перейменувати-NetFirewallRule
  • Set-NetFirewallRule
  • Show-NetFirewallRule

Розглянемо неськолко простих прикладів відкриття портів в Windows Firewall.

Наприклад, ви хочете дозволити вхідні TCP підключення на порти 80 і 443 для профілів Domain і Private, скористайтеся такою командою:

New-NetFirewallRule -DisplayName 'WEB-Inbound' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')

New-NetFirewallRule - створити нове правило Windows Firewall за допомогою PowerShell

Ви можете дозволити або заблокувати трафік для конкретної програми. Наприклад, ви хочете заблокувати вихідні з’єднання для FireFox:

New-NetFirewallRule -Program “C:Program Files (x86)Mozilla Firefoxfirefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox” -Description “Block Firefox” -Direction Outbound

Дозволимо входить RDP підключення по порту 3389 тільки з IP однієї адреси:

New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.1.55 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow

Щоб дозволити ping для адрес із зазначеної підмережі, використовуйте команди:

$ips = @("192.168.1.50-192.168.1.60", "192.165.2.22-192.168.2.200", ”10.10.0.0/16”)

New-NetFirewallRule -DisplayName "Allow inbound ICMPv4" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress $ips -Action Allow

New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -Direction Inbound -Protocol ICMPv6 -IcmpType 8 -RemoteAddress $ips -Action Allow

Щоб відредагувати наявне правило брандмауера, використовується командлет Set-NetFirewallRule. Наприклад, ви хочете дозволити вхідні підключення з зазначеного IP адреси для раніше створеного правила:

Get-NetFirewallrule -DisplayName 'WEB-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.20

Якщо потрібно додати в правило брандмауера кілька IP адрес, використовуйте такий скрипт:

$ips = @("192.168.1.50", "192.165.2.22",”192.168.1.20”)

Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $ips

Вивести всі IP адреси, які містяться в правилі брандмауера:

Get-NetFirewallrule -DisplayName 'Allow inbound ICMPv4'|Get-NetFirewallAddressFilter

Get-NetFirewallrule - Get-NetFirewallAddressFilter - отримати IP адреси для правила

Ви можете вмикати / вимикати правила брандмауера за допомогою командлетів Disable-NetFirewallRule і Enable-NetFirewallRule.

Disable-NetFirewallRule –DisplayName 'WEB-Inbound'

Щоб дозволити ICMP (ping), виконайте команду:

Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In

Щоб видалити правило брандмауер використовується командлет Remove-NetFirewallRule.

Висновок правил Windows Firewall через PowerShell

Список активних правил для вхідного трафіку можна вивести так:

Get-NetFirewallRule | where {($_.enabled -eq $True) -and ($_.Direction -eq "Inbound")} |ft

Якщо, наприклад, нам потрібно вивести список блокуючих вихідних правил:

Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound

Якщо потрібно відобразити ім’я програми в правилі:

Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound | %{$_.Name; $_ | Get-NetFirewallApplicationFilter}

Get-NetFirewallRule висновок правил Windows Firewall

Як ви бачите командлет Get-NetFirewallRule не виводить порти мережеві порти і IP адреси для правил брандмауера. Щоб вивести всю інформацію про дозволені входять (виходять) підключених в більш зручному вигляді з відображенням номерів портів, використовуйте такий скрипт:

Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |
Format-Table -Property Name,
@{Name="Protocol";Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},
@{Name="LocalPort";Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}},
@{Name="RemotePort";Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},
@{Name="RemoteAddress";Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},
Enabled,Profile,Direction,Action

Get-NetFirewallRule вивести IP адреса і ім'я порту

PowerShell надає широкі можливості по управлінню правилами Windows Firewall з командного рядка. Ви можете автоматично запускати скрипти PowerShell для відкриття / закриття портів при виникненні певних подій. У наступній статті ми розглянемо просту систему на базі PowerShell і Windows Firewall для автоматичного блокування IP адрес, з яких виконується віддалений перебір паролів по RDP на Windows VDS сервері.

Leave a Reply

Your email address will not be published. Required fields are marked *