การจัดการกฎไฟร์วอลล์ Windows กับ PowerShell

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

สารบัญ:

การตั้งค่าไฟร์วอลล์ Windows มักจะได้รับการจัดการโดยใช้ Snap กราฟิกกราฟิกแยกต่างหากwf.msc(แผงควบคุม -> ระบบและความปลอดภัย -> Windows Defender Firewall -> การตั้งค่าขั้นสูง) คุณสามารถดำเนินการกำหนดค่าไฟร์วอลล์ Windows และการดำเนินการจัดการการตั้งค่าส่วนใหญ่จากบรรทัดคำสั่ง PowerShell คุณสามารถใช้ในตัวความปลอดภัยโมดูลในการทำสิ่งนี้ (ซึ่งมีอยู่ในเวอร์ชันของ Windows PowerShell 5.1 หรือใหม่กว่า)

คุณสามารถแสดงรายการ cmdlets ที่มีอยู่ในโมดูล NetSecurity โดยใช้คำสั่ง:

Get-Command -Module NetSecurity

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

วิธีเปิดหรือปิดไฟร์วอลล์ Windows Defender ด้วย PowerShell

ไฟร์วอลล์ Windows Defender ถูกเปิดใช้งานโดยค่าเริ่มต้น

Get-NetFirewallProfile | Format-Table Name, Enabled

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

  • โดเมน- ถูกนำไปใช้กับคอมพิวเตอร์ที่เข้าร่วมกับโดเมน Active Directory;
  • ส่วนตัว- บ้านโซโหหรือเครือข่ายเวิร์กกรุ๊ป;
  • สาธารณะ- เครือข่ายสาธารณะ

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

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

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

หากต้องการปิดการใช้งาน Windows Firewall อย่างสมบูรณ์ให้เรียกใช้คำสั่งต่อไปนี้

Set-NetFirewallProfile -All -Enabled False

หรือระบุชื่อโปรไฟล์เฉพาะแทนทั้งหมด-

Set-NetFirewallProfile -Profile Public -Enabled False

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

Set-NetFirewallProfile -All -Enabled True

แสดงประเภทของโปรไฟล์ที่ใช้กับการเชื่อมต่อเครือข่าย:

Get-NetConnectionProfile

โปรไฟล์ Domainauthenticated ถูกนำไปใช้กับการเชื่อมต่อเครือข่าย Ethernet0 ในตัวอย่างนี้

หาก PowerShell Remoting (WINRM) ได้รับการกำหนดค่าบนคอมพิวเตอร์ระยะไกลคุณสามารถจัดการกฎไฟร์วอลล์ Windows บนคอมพิวเตอร์เหล่านั้นได้ ในตัวอย่างนี้เราจะใช้ CMDLET ของ Invoke-Command เพื่อเชื่อมต่อกับคอมพิวเตอร์ระยะไกลในรายการและปิดการใช้งานไฟร์วอลล์บนพวกเขา

$computers = @('WKS01', 'WKS02', 'WKS03')
Invoke-Command -ComputerName $computers {Set-NetFirewallProfile -All -Enabled False}

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

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}

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

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

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

DisabledInterfaceAliases : {Ethernet0}

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

Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%system32LogFilesFirewallpfirewall.log’

มี 9 PowerShell Cmdlets เพื่อจัดการกฎไฟร์วอลล์บน Windows:

  • ใหม่-NetFirewallRule
  • Copy-NetFirewallRule
  • ปิดการใช้งาน NetFirewallRule
  • เปิดใช้งาน NetFirewallRule
  • get-netfirewallRule
  • remove-netfirewallRule
  • Rename-NetFirewallRule
  • Set-NetfirewallRule
  • show-netfirewallrule

ลองมาดูตัวอย่างง่ายๆของวิธีการเปิดพอร์ตในไฟร์วอลล์ Windows

ตัวอย่างเช่นหากคุณต้องการอนุญาตการเชื่อมต่อ TCP ที่เข้ามาในพอร์ต 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 Firefoxfirefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox browser” -Description “Block Firefox browser” -Direction Outbound

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

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

หากต้องการอนุญาตให้ ICMP pings สำหรับที่อยู่ 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 จากไฟล์ข้อความธรรมดาไปยังกฎไฟร์วอลล์ (หนึ่งที่อยู่ IP ต่อบรรทัด):

$ips=Get-Content C:tempip.txt
Get-NetFirewallrule -DisplayName 'AllowRDP'|Set-NetFirewallRule -RemoteAddress $ips

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

อนุญาตให้การเชื่อมต่อที่เข้ามาทั้งหมดจากที่อยู่ IP ที่ระบุ สิ่งนี้จะเพิ่มที่อยู่ IP ลงใน Whitelist ไฟร์วอลล์:

$IP = '192.168.1.20'
New-NetFirewallRule -DisplayName "Allow $IP" -Direction Inbound -Action Allow -RemoteAddress $IP

การปรับเปลี่ยนกฎไฟร์วอลล์ Windows ที่มีอยู่โดยใช้ PowerShell

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

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

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

$ips = @("192.168.2.15", "192.168.2.17",”192.168.100.15”)
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$current_ips += $ips
Get-NetFirewallrule -DisplayName 'HTTP-Inbound'|Set-NetFirewallRule -RemoteAddress $current_ips

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

Get-NetFirewallrule -DisplayName 'Http_inbound'|Get-NetFirewallAddressFilter

ลบหนึ่งที่อยู่ IP ออกจากกฎไฟร์วอลล์:

$removeip = "192.168.100.5"
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$filterIP = $current_ips | Where-Object{ $_ -notin $removeip }
Get-NetFirewallrule -DisplayName 'HTTP-Inbound'|Set-NetFirewallRule -RemoteAddress $filterIP

วิธีเปิด/ปิด/ลบกฎไฟร์วอลล์ Windows ด้วย PowerShell

คุณสามารถใช้ไฟล์ปิดการใช้งาน NetFirewallRuleและเปิดใช้งาน NetFirewallRulecmdlets เพื่อเปิดใช้งานและปิดการใช้งานกฎไฟร์วอลล์

Disable-NetFirewallRule –DisplayName 'HTTP-Inbound'

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

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

ในการลบกฎไฟร์วอลล์ให้ใช้ไฟล์remove-netfirewallRulecmdlet

Remove-NetFirewallRule -DisplayName 'HTTP-Inbound'

หากต้องการรีเซ็ตกฎไฟร์วอลล์ Microsoft ทั้งหมดและกู้คืนการตั้งค่าเริ่มต้นให้เรียกใช้คำสั่งต่อไปนี้

netsh advfirewall reset

หรือ:

(New-Object -ComObject HNetCfg.FwPolicy2).RestoreLocalFirewallDefaults()

สิ่งนี้จะลบการตั้งค่าที่ผู้ใช้กำหนดทั้งหมดรวมถึงกฎไฟร์วอลล์ Microsoft Defender เฉพาะกฎการเข้าถึงเครือข่ายที่สร้างขึ้นใน Windows จะยังคงอยู่

ก่อนที่จะรีเซ็ตกฎไฟร์วอลล์คุณสามารถส่งออกการตั้งค่าปัจจุบันไปยังไฟล์

netsh advfirewall export "C:Backupfirewall-config.wfw"

ในภายหลังคุณสามารถกู้คืนการตั้งค่าไฟร์วอลล์เก่าโดยการนำเข้าไฟล์กฎ:

netsh advfirewall import "C:Backupfirewall-config.wfw"

PowerShell: รายการกฎที่ใช้งานอยู่ใน Windows Firewall

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

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}

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

Related Posts