Ця стаття присвячена основам управління настройками і правилами вбудованого 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 (Загальний) - загальнодоступні мережі.
Кожен профіль може відрізнятися використовуваним набором правил брандмауера. За замовчуванням всі мережеві інтерфейси комп'ютера захищені фаейрволом і до них застосовуються всі три типи профілів.
Щоб включити всі три мережевих профілю 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
Щоб відредагувати наявне правило брандмауера, використовується командлет 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 сервері.