Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

บทความนี้ให้พื้นฐานเกี่ยวกับวิธีจัดการการตั้งค่าและกฎของ Windows Defender Firewall with Advanced Security สำหรับการใช้งานโดยใช้ PowerShell เราจะพิจารณาวิธีเปิด/ปิดไฟร์วอลล์สำหรับโปรไฟล์เครือข่ายต่างๆ สร้างหรือลบกฎไฟร์วอลล์ และเขียนสคริปต์ PS ขนาดเล็กเพื่อรับตารางที่สะดวกแสดงชุดกฎไฟร์วอลล์ที่ใช้งานอยู่ปัจจุบัน

คุณสามารถจัดการการตั้งค่า Windows Firewall จาก graphic console: Control Panel → System and Security → Windows Defender Firewall อย่างไรก็ตาม เริ่มจาก Windows 8.1 (Windows Server 2012 R2) คุณสามารถใช้ built-in NetSecurity PowerShell module เพื่อจัดการไฟร์วอลล์ได้

ก่อนหน้านี้ คำสั่งต่อไปนี้ถูกใช้เพื่อจัดการกฎและการตั้งค่า Windows Firewall: netsh advfirewall firewall

มีคำสั่ง 85 คำสั่งในโมดูล NetSecurity บน Windows 10 คุณสามารถแสดงรายการทั้งหมด:

Get-Command -Module NetSecurity

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

วิธีจัดการโปรไฟล์เครือข่าย Windows Firewall จาก PowerShell

มีสามประเภทของโปรไฟล์เครือข่ายใน Windows Firewall:

  • Domain – ใช้กับคอมพิวเตอร์ในโดเมน Active Directory
  • Private – เครือข่ายบ้านหรือองค์กร
  • Public – เครือข่ายสาธารณะ

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

Network Location Awareness (NLA) เก็บข้อมูลเกี่ยวกับประเภทเครือข่ายในฐานข้อมูลของมัน คุณสามารถเปลี่ยนโปรไฟล์เครือข่าย (location) ของคุณได้หากถูกตรวจจับอย่างไม่ถูกต้อง

แต่ละโปรไฟล์เครือข่าย (location) อาจแตกต่างกันไปในชุดกฎไฟร์วอลล์ที่ใช้ โดยค่าเริ่มต้น อินเทอร์เฟซเครือข่ายทั้งหมดของคอมพิวเตอร์ได้รับการปกป้องโดยไฟร์วอลล์ และทั้งสามประเภทของโปรไฟล์ถูกนำไปใช้กับพวกเขา

เพื่อเปิดใช้งานทั้งสามโปรไฟล์เครือข่าย: Domain, Public และ Private ให้ใช้คำสั่งนี้:

Set-NetFirewallProfile -All -Enabled True

หรือตั้งค่าโปรไฟล์เฉพาะแทน All:

Set-NetFirewallProfile -Profile Public -Enabled True

เพื่อปิดใช้งานไฟร์วอลล์สำหรับทั้งสาม network location ให้ใช้คำสั่ง:

Set-NetFirewallProfile -All -Enabled False

โดยใช้ Set-NetFirewallProfile cmdlet คุณสามารถเปลี่ยนตัวเลือกโปรไฟล์ (การดำเนินการเริ่มต้น, logging, เส้นทางและขนาดของไฟล์ log, การตั้งค่าการแจ้งเตือน ฯลฯ)

คุณอาจรู้ว่าในเวอร์ชัน OS สมัยใหม่ Windows Firewall เปิดใช้งานสำหรับทุกโปรไฟล์ การเชื่อมต่อออก (outbound) ทั้งหมดได้รับอนุญาต และการเชื่อมต่อเข้า (inbound) ถูกบล็อก (ยกเว้นที่อนุญาต) ในการตั้งค่าโปรไฟล์

ลองเปลี่ยนการดำเนินการเริ่มต้นสำหรับโปรไฟล์ Public ให้บล็อกการเชื่อมต่อเข้าทั้งหมด

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

คุณสามารถแสดงการตั้งค่าโปรไฟล์ปัจจุบันได้ดังนี้:

Get-NetFirewallProfile -Name Public

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

หากคุณจัดการการตั้งค่า Windows Firewall โดยใช้ GPO คุณสามารถแสดงการตั้งค่าโปรไฟล์ที่ได้ผลลัพธ์ได้ดังนี้:

Get-NetFirewallProfile -policystore activestore

ตรวจสอบให้แน่ใจว่าการตั้งค่าไฟร์วอลล์ทั้งหมดถูกนำไปใช้กับอินเทอร์เฟซเครือข่ายทั้งหมดของคอมพิวเตอร์

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

หากอินเทอร์เฟซทั้งหมดได้รับการปกป้อง คำสั่งจะคืนค่าดังนี้:

DisabledInterfaceAliases : {NotConfigured}

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

คุณสามารถปิดใช้งานโปรไฟล์อินเทอร์เฟซเฉพาะได้ (เพื่อแสดงรายการชื่ออินเทอร์เฟซ ใช้ Get-NetIPInterface):

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

如你所見 Public profile ไม่ได้ถูกนำไปใช้กับ Ethernet0 อีกต่อไป:

DisabledInterfaceAliases : {Ethernet0}

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

คุณสามารถตั้งค่าตัวเลือกการบันทึกการเชื่อมต่อเครือข่ายที่ระดับโปรไฟล์ได้ โดยค่าเริ่มต้น Windows Firewall logs จะถูกเก็บไว้ที่ %systemroot%\system32\LogFiles\Firewall และขนาดไฟล์คือ 4MB คุณสามารถเปิดใช้งานการบันทึกการเชื่อมต่อทั้งหมดและเปลี่ยนขนาดไฟล์สูงสุดได้:

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

วิธีสร้าง แก้ไข หรือลบกฎ Windows Firewall ด้วย PowerShell

มี 9 cmdlets สำหรับจัดการกฎไฟร์วอลล์ของคุณ:

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

มาพิจารณาตัวอย่างง่ายๆ ของวิธีเปิดพอร์ตใน Windows Firewall

ตัวอย่างเช่น หากคุณต้องการอนุญาตการเชื่อมต่อ TCP เข้า (inbound) ไปยังพอร์ต 80 และ 443 สำหรับโปรไฟล์ Domain และ Private ให้ใช้คำสั่งนี้:

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

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

คุณสามารถอนุญาตหรือบล็อกการเข้าถึงเครือข่ายสำหรับแอป ตัวอย่างเช่น คุณต้องการบล็อกการเชื่อมต่อออก (outbound) สำหรับ Firefox:

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

เพื่ออนุญาตการเชื่อมต่อ RDP เข้า (inbound) บนพอร์ต 3389 จากที่อยู่ IP เดียวเท่านั้น:

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

เพื่ออนุญาต ping (ICMP) สำหรับที่อยู่จาก subnet หรือช่วง IP ที่ระบุ ให้ใช้คำสั่งเหล่านี้:

$ips = @("192.168.2.15-192.168.2.40", "192.168.100.15-192.168.100.200", ”10.1.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

ในบทความก่อนหน้า เราแสดงวิธีการบล็อกการเข้าถึงไซต์ทั้งโดยที่อยู่ IP และโดยชื่อ DNS ของไซต์/โดเมนโดยใช้ PowerShell

เพื่อแก้ไขกฎไฟร์วอลล์ที่มีอยู่ ใช้ cmdlet Set-NetFirewallRule ตัวอย่างเช่น เพื่ออนุญาตการเชื่อมต่อเข้าจากที่อยู่ IP ที่ระบุสำหรับกฎที่สร้างไว้ก่อนหน้านี้:

Get-NetFirewallrule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10

หากคุณต้องการเพิ่มที่อยู่ IP หลายรายการเข้าไปในกฎไฟร์วอลล์ ให้ใช้สคริปต์นี้:

$ips = @("192.168.2.15", "192.168.2.17",”192.168.100.15”)
Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $ips

เพื่อแสดงที่อยู่ IP ทั้งหมดในกฎไฟร์วอลล์:

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

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

คุณสามารถเปิด/ปิดกฎไฟร์วอลล์โดยใช้ cmdlets Disable-NetFirewallRule และ Enable-NetFirewallRule

Disable-NetFirewallRule –DisplayName 'WEB-Inbound'

เพื่ออนุญาต ICMP (ping) ให้รันคำสั่งนี้:

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

เพื่อลบกฎไฟร์วอลล์ ให้ใช้ cmdlet Remove-NetFirewallRule

การแสดงรายการกฎ Windows Firewall ด้วย PowerShell

คุณสามารถแสดงรายการกฎไฟร์วอลล์ที่ใช้งานอยู่สำหรับ traffic เข้า (inbound) ได้ดังนี้:

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

หากคุณต้องการแสดงรายการกฎบล็อกออก (outbound blocking):

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

เพื่อแสดงชื่อแอปในกฎ:

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

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

如你所見 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

การกำหนดค่ากฎ Windows Firewall ด้วย PowerShell

PowerShell ให้โอกาสมากมายในการจัดการกฎ Windows Firewall จาก command prompt คุณสามารถรันสคริปต์ PowerShell เพื่อเปิด/ปิดพอร์ตโดยอัตโนมัติหากเกิดเหตุการณ์บางอย่าง ในบทความต่อไป เราจะพิจารณาวิธีแก้ปัญหาแบบง่ายๆ ที่ใช้ PowerShell และ Windows Firewall เพื่อบล็อกที่อยู่ IP ที่พยายาม brute-force รหัสผ่านผ่าน RDP บน Windows VDS server ของคุณโดยอัตโนมัติ