Управління правилами Windows Firewall за допомогою PowerShell

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

зміст:

  • Управління мережевими профілями брандмауера Windows з PowerShell
  • Створення, редагування та видалення правил Windows Firewall з PowerShell
  • Висновок правил Windows Firewall через PowerShell

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

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

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

Get-Command -Module NetSecurity

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

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

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

Інформація про типи мереж зберігається службою 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

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

Get-NetFirewallProfile -policystore activestore

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

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

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

DisabledInterfaceAliases: NotConfigured

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

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

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

DisabledInterfaceAliases: Ethernet0

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

Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName '% systemroot% \ system32 \ LogFiles \ Firewall \ pfirewall.log'

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

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

  • New-NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Rename-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')

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

New-NetFirewallRule -Program "C: \ Program Files (x86) \ Mozilla Firefox \ firefox.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

У попередній статті ми показували як за допомогою PowerShell можна заблокувати доступ до сайтів не тільки по IP адресою, але і по DNS імені домену / сайту.

Щоб відредагувати наявне правило брандмауера, використовується командлет 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

Ви можете вмикати / вимикати правила брандмауера за допомогою командлетів 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 не виводить порти мережеві порти і 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

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