Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

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

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

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

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

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

รับคำสั่ง -Module NetSecurity

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

จะจัดการโปรไฟล์เครือข่ายไฟร์วอลล์ Windows จาก PowerShell ได้อย่างไร

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

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

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

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 ถูกเปิดใช้งานสำหรับโปรไฟล์ทั้งหมด อนุญาตการเชื่อมต่อขาออกทั้งหมดและการเชื่อมต่อขาเข้าจะถูกบล็อก (ยกเว้นการเชื่อมต่อที่ได้รับอนุญาต) ในการตั้งค่าโปรไฟล์

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

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

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

Get-NetFirewallProfile -Name Public

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

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

Get-NetFirewallProfile -policystore activestore

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

Get-NetFirewallProfile -ชื่อสาธารณะ | fl DisabledInterfaceAliases

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

DisabledInterfaceAliases : {NotConfigured}

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

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

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

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

DisabledInterfaceAliases : {Ethernet0}

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

คุณสามารถตั้งค่าตัวเลือกการบันทึกการเชื่อมต่อเครือข่ายได้ที่ระดับโปรไฟล์ โดยค่าเริ่มต้น บันทึก 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 เพื่อจัดการกฎไฟร์วอลล์ของคุณ:

  • ใหม่-NetFirewallRule
  • คัดลอก-NetFirewallRule
  • ปิดการใช้งาน-NetFirewallRule
  • เปิดใช้งาน-NetFirewallRule
  • รับ-NetFirewallRule
  • Remove-NetFirewallRule
  • เปลี่ยนชื่อ-NetFirewallRule
  • Set-NetFirewallRule
  • แสดง-NetFirewallRule

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

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

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

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

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

New-NetFirewallRule -Program “C:\Program Files (x86)\Mozilla Firefox\firefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox browser” -คำอธิบาย “Block Firefox browser” -Direction Outbound

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

ใหม่-NetFirewallRule -ชื่อที่แสดง "AllowRDP" –RemoteAddress 192.168.2.200 - ทิศทางขาเข้า - โปรโตคอล TCP –LocalPort 3389 - อนุญาตการดำเนินการ

หากต้องการอนุญาต 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-ขาเข้า' | รับ NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10

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

$ips =@("192.168.2.15", "192.168.2.17",”192.168.100.15”)
Get-NetFirewallrule - ชื่อที่แสดง 'เว็บขาเข้า'|Set-NetFirewallRule -RemoteAddress $ips

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

Get-NetFirewallrule -DisplayName 'อนุญาต ICMPv4 ขาเข้า' | Get-NetFirewallAddressFilter

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

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

Disable-NetFirewallRule –DisplayName 'WEB-Inbound'

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

เปิดใช้งาน-NetFirewallRule -ชื่อ FPS-ICMP4-ERQ-In

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

แสดงรายการกฎไฟร์วอลล์ Windows ด้วย PowerShell

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

รับ-NetFirewallRule | โดยที่ {($_.enabled -eq $True) -and ($_.Direction -eq "Inbound")} |ft

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

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

วิธีแสดงชื่อแอปในกฎ:

Get-NetFirewallRule -Action Block -เปิดใช้งาน True -Direction Outbound | %{$_.ชื่อ; $_ | Get-NetFirewallApplicationFilter}

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

อย่างที่คุณเห็น cmdlet ของ Get-NetFirewallRule ไม่แสดงพอร์ตเครือข่ายและที่อยู่ IP สำหรับกฎไฟร์วอลล์ของคุณ หากต้องการแสดงข้อมูลโดยละเอียดเกี่ยวกับการเชื่อมต่อขาเข้า (ขาออก) ที่อนุญาตในวิธีที่สะดวกยิ่งขึ้นในการแสดงหมายเลขพอร์ต ให้ใช้สคริปต์ PowerShell ต่อไปนี้:

Get-NetFirewallRule -Action Allow -เปิดใช้งาน 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}},
เปิดใช้งาน, โปรไฟล์, ทิศทาง, การกระทำ

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

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