ค้นหาเว็บไซต์

การกำหนดค่ากฎไฟร์วอลล์ Windows ด้วย PowerShell


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

คุณสามารถจัดการการตั้งค่า Windows Firewall ได้จากคอนโซลกราฟิก: แผงควบคุม -> ระบบและความปลอดภัย -> ไฟร์วอลล์ Windows Defender อย่างไรก็ตาม เริ่มต้นด้วย Windows 8.1 (Windows Server 2012 R2) คุณสามารถใช้โมดูล PowerShell NetSecurity ในตัวเพื่อจัดการไฟร์วอลล์

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

netsh advfirewall firewall

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

Get-Command -Module NetSecurity

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

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

  • โดเมน - ใช้กับคอมพิวเตอร์ในโดเมน Active Directory

  • ส่วนตัว - เครือข่ายภายในบ้านหรือองค์กร

  • สาธารณะ - เครือข่ายสาธารณะ

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

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

หากต้องการเปิดใช้งานโปรไฟล์เครือข่ายทั้งสาม: โดเมน สาธารณะ และส่วนตัว ให้ใช้คำสั่งนี้:

Set-NetFirewallProfile -All -Enabled True

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

Set-NetFirewallProfile -Profile Public -Enabled True

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

Set-NetFirewallProfile -All -Enabled False

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

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

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

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"

อย่างที่คุณเห็น ไม่มีการใช้โปรไฟล์สาธารณะกับ Ethernet0 อีกต่อไป:

DisabledInterfaceAliases : {Ethernet0}

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

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

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

มี 9 cmdlets เพื่อจัดการกฎไฟร์วอลล์ของคุณ:

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

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

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

New-NetFirewallRule -DisplayName 'HTTP-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 browser” -Description “Block Firefox browser” -Direction Outbound

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

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

ในการอนุญาต ping (ICMP) สำหรับที่อยู่จากซับเน็ต IP หรือช่วง 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

ในการแก้ไขกฎไฟร์วอลล์ที่มีอยู่ จะใช้ Set-NetFirewallRule cmdlet ตัวอย่างเช่น เพื่ออนุญาตการเชื่อมต่อขาเข้าจากที่อยู่ 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

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

Disable-NetFirewallRule -DisplayName 'WEB-Inbound'

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

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

หากต้องการลบกฎไฟร์วอลล์ จะใช้ cmdlet Remove-NetFirewallRule

การแสดงรายการกฎไฟร์วอลล์ Windows ด้วย 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 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

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

บทความที่เกี่ยวข้อง