Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Bài viết này đưa ra kiến thức cơ bản về cách quản lý cài đặt và quy tắc của Windows Defender Firewall with Advanced Security tích hợp bằng PowerShell. Chúng ta sẽ xem xét cách bật/tắt tường lửa cho các hồ sơ mạng khác nhau, tạo hoặc xóa quy tắc tường lửa và viết một script PS nhỏ để có một bảng thuận tiện hiển thị tập hợp quy tắc tường lửa hoạt động hiện tại.

Cách Quản Lý Hồ Sơ Mạng Windows Firewall từ PowerShell?

Có ba loại hồ sơ mạng trong Windows Firewall:

  • Domain – được áp dụng cho máy tính trong miền Active Directory
  • Private – mạng gia đình hoặc doanh nghiệp
  • Public – mạng công cộng

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Network Location Awareness (NLA) giữ thông tin về các loại mạng trong cơ sở dữ liệu của nó. Bạn có thể thay đổi hồ sơ mạng (vị trí) của mình nếu nó đã được phát hiện không chính xác.

Mỗi hồ sơ mạng (vị trí) có thể khác nhau về tập hợp quy tắc tường lửa được sử dụng. Theo mặc định, tất cả các giao diện mạng của máy tính được bảo vệ bởi tường lửa, và cả ba loại hồ sơ đều được áp dụng cho chúng.

Để bật cả ba hồ sơ mạng: Domain, Public và Private, sử dụng lệnh này:

Set-NetFirewallProfile -All -Enabled True

Hoặc thiết lập hồ sơ cụ thể thay vì All:

Set-NetFirewallProfile -Profile Public -Enabled True

Để tắt tường lửa cho cả ba vị trí mạng, sử dụng lệnh:

Set-NetFirewallProfile -All -Enabled False

Sử dụng cmdlet Set-NetFirewallProfile, bạn có thể thay đổi các tùy chọn hồ sơ (hành động mặc định, ghi log, đường dẫn và kích thước file log, cài đặt thông báo, v.v.).

Bạn có thể biết rằng trong các phiên bản OS hiện đại, Windows Firewall được bật cho tất cả các hồ sơ. Tất cả kết nối ra được phép và kết nối vào bị chặn (trừ các quy tắc được phép) trong cài đặt hồ sơ.

Hãy thay đổi hành động mặc định cho hồ sơ Public để chặn tất cả kết nối vào.

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

Bạn có thể hiển thị cài đặt hồ sơ hiện tại như sau:

Get-NetFirewallProfile -Name Public

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Nếu bạn quản lý cài đặt Windows Firewall của mình bằng GPO, bạn có thể hiển thị cài đặt hồ sơ kết quả hiện tại như sau:

Get-NetFirewallProfile -policystore activestore

Đảm bảo rằng tất cả cài đặt tường lửa được áp dụng cho tất cả các giao diện mạng của máy tính.

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Nếu tất cả các giao diện được bảo vệ, lệnh sẽ trả về:

DisabledInterfaceAliases : {NotConfigured}

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Bạn có thể vô hiệu hóa hồ sơ giao diện cụ thể (để hiển thị danh sách tên giao diện, sử dụng Get-NetIPInterface):

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Như bạn thấy, hồ sơ Public không còn được áp dụng cho Ethernet0:

DisabledInterfaceAliases : {Ethernet0}

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Bạn có thể thiết lập tùy chọn ghi log kết nối ở cấp độ hồ sơ. Theo mặc định, log Windows Firewall được lưu trong %systemroot%\system32\LogFiles\Firewall, và kích thước file là 4MB. Bạn có thể bật ghi log tất cả kết nối và thay đổi kích thước file tối đa:

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

Cách Tạo, Chỉnh Sửa hoặc Xóa Quy Tắc Windows Firewall với PowerShell?

Có 9 cmdlet để quản lý quy tắc tường lửa của bạn:

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

Hãy xem xét một số ví dụ đơn giản về cách mở cổng trong Windows Firewall.

Ví dụ: nếu bạn muốn cho phép kết nối TCP đến cổng 80 và 443 cho hồ sơ Domain và Private, sử dụng lệnh này:

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

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Bạn có thể cho phép hoặc chặn truy cập mạng cho một ứng dụng. Ví dụ: bạn muốn chặn kết nối ra cho 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

Để cho phép kết nối RDP đến trên cổng 3389 từ một địa chỉ IP duy nhất:

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

Để cho phép ping (ICMP) cho địa chỉ từ subnet IP hoặc dải IP được chỉ định, sử dụng các lệnh này:

$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

Trong bài viết trước, chúng ta đã chỉ cách chặn truy cập trang web cả bằng địa chỉ IP và tên DNS trang web/miền bằng PowerShell.

Để chỉnh sửa quy tắc tường lửa hiện có, cmdlet Set-NetFirewallRule được sử dụng. Ví dụ: để cho phép kết nối đến từ địa chỉ IP được chỉ định cho quy tắc được tạo trước đó:

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

Nếu bạn muốn thêm nhiều địa chỉ IP vào quy tắc tường lửa, sử dụng script này:

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

Để hiển thị tất cả địa chỉ IP trong một quy tắc tường lửa:

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

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Bạn có thể bật/tắt quy tắc tường lửa bằng cmdlet Disable-NetFirewallRule và Enable-NetFirewallRule.

Disable-NetFirewallRule –DisplayName 'WEB-Inbound'

Để cho phép ICMP (ping), chạy lệnh này:

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

Để xóa quy tắc tường lửa, cmdlet Remove-NetFirewallRule được sử dụng.

Liệt Kê Quy Tắc Windows Firewall với PowerShell

Bạn có thể hiển thị danh sách quy tắc tường lửa hoạt động cho lưu lượng đến của bạn như sau:

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

Nếu bạn muốn hiển thị danh sách quy tắc chặn ra:

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

Để hiển thị tên ứng dụng trong quy tắc:

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

Cấu Hình Quy Tắc Windows Firewall với PowerShell

Như bạn thấy, cmdlet Get-NetFirewallRule không hiển thị cổng mạng và địa chỉ IP cho các quy tắc tường lửa của bạn. Để hiển thị thông tin chi tiết về các kết nối được phép đến (ra) theo cách thuận tiện hơn hiển thị số cổng, sử dụng script PowerShell sau:

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

Cấu Hình Quy Tắc Windows Firewall với PowerShell

PowerShell cung cấp nhiều cơ hội để quản lý quy tắc Windows Firewall từ command prompt. Bạn có thể tự động chạy script PowerShell để mở/đóng cổng nếu các sự kiện nhất định xảy ra. Trong bài tiếp theo, chúng ta sẽ xem xét một giải pháp đơn giản dựa trên PowerShell và Windows Firewall để tự động chặn các địa chỉ IP cố gắng brute-force mật khẩu từ xa qua RDP trên máy chủ Windows VDS của bạn.