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








