ამ სტატიაში ვისაუბრებ PowerShell-ით  Windows Defender Firewall -ის მართვაზე. ჩვენ განვიხილავთ, თუ როგორ უნდა ჩავრთოთ და გამოვრთოთ firewall, შევქმნათ, დავარედაქტიროთ ან წავშალოთ,  დავაბექაფოთ და აღვადგინოთ Firewall წესები.

როგორც წესი, Windows Firewall-ის პარამეტრები იმართება გრაფიკული ინტერფეისით Control Panel -> System and Security -> Windows Defender Firewall -> Advanced settings (ან Run-დან wf.msc). Windows Firewall-ის კონფიგურაციის და მართვის უმეტესი ოპერაცია შეიძლება  შესრულდეს ასევე Powershell-ის NetSecurity მოდულის მეშვეობითაც (მოდული  ხელმისაწვდომია Windows PowerShell 5.1-დან). cmd-ის შემთხვევაში გამოიყენება ბრძანება netsh advfirewall firewall, თუმცა PowerShell უფრო მოქნილ და თანამედროვე გადაწყვეტილებად მიიჩნევა.

Windows PowerShell-ის მეშვეობით თქვენ შეგიძლიათ მართოთ არა მარტო ლოკალური, არამედ დაშორებული კომპიუტერის Firewall-ც.

გაითვალისწინეთ, რომ Firewall-თან დაკავშირებული ბრძანებების უმეტესი წილის შესასრულებლად საჭიროა PowerShell ადმინის უფლებებით იყოს გაშვებული.

NetSecurity მოდულის cmdlet-ების (ბრძანებების) ნახვა შეგიძლიათ ბრძანებით:

Get-Command -Module NetSecurity

Firewall-ის ჩართვა/გამორთვა

სტანდარტულად Windows Firewall ჩართულია. ამაში შეგვიძლია დავრწმუნდეთ ბრძანებით:

Get-NetFirewallProfile | Format-Table Name, Enabled

Windows Firewall-ი მუშაობს სამი ტიპის ქსელთან:

  • Domain – Active Directory Domain-ში გაწევრიანებული კომპიუტერები
  • Private – სახლის, ოფისის ქსელები
  • Public – საჯარო სივრცეებში არსებული ქსელები (კაფეების, რესტორნების და ა.შ.)

ნაგულისხმევად, Windows Firewall ატარებს ყველა სტანდარტულ (ხოლო მისთვის უცნობ კავშირის მოთხოვნაზე მომხმარებელს ეკითხება) გამავალ და ბლოკავს ყველა შემომავალ კავშირს (გარდა მომხმარებლის მიერ ნებადართულისა) ქსელის თითოეული  პროფილისთვის.

თითოეულ ქსელის პროფილს (ადგილმდებარეობას) შეიძლება ჰქონდეს Firewall-ის rule (წესი). როგორც წესი, კომპიუტერის ყველა ქსელური ინტერფეისი დაცულია firewall-ით.

Firewall-ის სრულად გასათიშად გამოიყენეთ ბრძანება:

Set-NetFirewallProfile -All -Enabled False

კონკრეტული პროფილისთვის Firewall-ის გასათიშად გამოიყენეთ ბრძანება:

Set-NetFirewallProfile -Profile Public -Enabled False

Firewall-ის ჩასართავად გამოიყენეთ ბრძანება

Set-NetFirewallProfile -All -Enabled True

ქსელის მიმდინარე პროფილის საჩვენებლად გამოიყენეთ ბრძანება:

Get-NetConnectionProfile

Firewall წესების მართვა

არსებობს 9 Powershell сmdlet, რომელიც დაგეხმარებათ Windows-ზე Firewall წესების (rules) მართვაში

  • New-NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Rename-NetFirewallRule
  • Set-NetFirewallRule
  • Show-NetFirewallRule

сmdlet სახელები პირდაპირ მიგვანიშნებენ მათ შესაძლებლობებზე, ამიტომ პირდაპირ გადავიდეთ მაგალითების გარჩევაზე

 წესების დამატება Firewall-ში

წესების დასამატებლად გამოიყენება ბრძანება:

New-NetFirewallRule

მაგალითისთვის სისტემაში არსებობს რაიმე Web სერვისი და შესაბამისად თქვენ გინდათ დაუშვათ შემომავალი 80 (HTTP) და 443 (HTTPS) პორტები:

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

თუ გინდათ გახსნათ შემომავალი RDP წვდომა მხოლოდ 192.168.1.100 მისამართისთვის სტანდარტულ პორტზე:

New-NetFirewallRule -DisplayName “AllowRDP” –RemoteAddress 192.168.1.100 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow

ICMP პინგის  IP მისამართების და ქვექსელების (subnet) კონკრეტული დიაპაზონიდან დასაშვებად, შექმენით შემდეგი წესი:

$ipebi = @(“192.168.1.1-192.168.1.100”, ”10.1.0.0/16”)
New-NetFirewallRule -DisplayName “Allow inbound Ping” -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress $ipebi -Action Allow

პირველ რიგში ჩვენ შევქმენით ცვლადი $ipebi, რომელშიც მივუთითეთ ჩვენთვის ყველა სასურველი IP მისამართი და საბნეტი, შემდეგ უკვე ეს ცვლადი მივუთითეთ ჩვენ ახალ წესში.

კონკრეტული აიპის სრულად დასაშვებად (whitelist), გამოიყენეთ წესი:

$IP = ‘192.168.1.20’
New-NetFirewallRule -DisplayName “Allow $IP” -Direction Inbound -Action Allow -RemoteAddress $IP3

არსებული წესის მოდიფიცირება

თუ გსურთ შეცვალოთ firewall-ის არსებული წესი, გამოიყენეთ Set-NetFirewallRule cmdlet. ზემოთ ჩვენ დავუშვით Firewall-ში Web პორტები. ასეთი სახით ეს წესი ყველა შემომავალ კავშირის მოთხოვნას დააკმაყოფილებს. თუ ჩვენ გვინდა ვებ სერვისებზე წვდომა მხოლოდ ერთ IP-ს ქონდეს, წესი უნდა დავარედაქტიროთ:

Get-NetFirewallrule -DisplayName ‘HTTP-Inbound’ | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10

არსებული წესების ჩართვა/გამორთვა და წაშლა

წესების გამორთვა/ჩართვისთვის გამოიყენეთ შესაბამისად Disable-NetFirewallRule და Enable-NetFirewallRule

ასე მაგალითად, ჩვენთვის უკვე ნაცნობი ვებ სერვისების რულის გასათიშად:

Disable-NetFirewallRule –DisplayName ‘HTTP-Inbound’

გათიშული რულის ჩასართავად:

Enable-NetFirewallRule -DisplayName ‘HTTP-Inbound’

წესის სრულად წაშლისთვის

Remove-NetFirewallRule -DisplayName ‘HTTP-Inbound’

Firewall-ის აქტიური წესების ჩვენება

გამავალი წესების სანახავად აკრიფეთ

Get-NetFirewallRule  -Enabled True -Direction Outbound

და ჩასქროლეთ ბოლომდე

თქვენ შეგიძლიათ ნახოთ მაგალითად ამკრძალავი წესების სიაც:

Get-NetFirewallRule  -Enabled True -Action Block

როგორც ხედავთ, Get-NetFirewallRule cmdlet არ აჩვენებს ქსელის პორტებს და IP მისამართებს. პორტის ნომრებით დაშვებული შემომავალი (გამავალი) კავშირების შესახებ დეტალური ინფორმაციის საჩვენებლად, გამოიყენეთ შემდეგი PowerShell სკრიპტი:

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

Firewall-ის წესების დარესეტება, დაბექაფება, აღდგენა

netsh advfirewall reset ბრძანებით თქვენ შეგიძლიათ დაარესეტოთ Firewall-ი

დარესეტების წინ თუ გინდათ წესების ბექაფის აღება გამოიყენეთ netsh advfirewall export

netsh advfirewall export “D:\firewall-backup.wfw”

ბექაფის აღდგენა შეგიძლიათ netsh advfirewall import

netsh advfirewall import “D:\firewall-backup.wfw”