Tìm kiếm trang web

Định cấu hình Quy tắc tường lửa của Windows bằng PowerShell


Bài viết này cung cấp thông tin cơ bản về cách quản lý cài đặt và quy tắc của Tường lửa bảo vệ Windows tích hợp với Bảo mật nâng cao bằng PowerShell. Chúng tôi sẽ xem xét cách bật/tắt tường lửa cho các cấu hình mạng khác nhau, tạo hoặc xóa quy tắc tường lửa và viết một tập lệnh PS nhỏ để có một bảng tiện lợi hiển thị bộ quy tắc tường lửa đang hoạt động hiện tại.

Bạn có thể quản lý cài đặt Tường lửa của Windows từ bảng điều khiển đồ họa: Bảng điều khiển -> Hệ thống và Bảo mật -> Tường lửa của Bộ bảo vệ Windows. Tuy nhiên, bắt đầu với Windows 8.1 (Windows Server 2012 R2), bạn có thể sử dụng mô-đun PowerShell NetSecurity tích hợp sẵn để quản lý tường lửa.

Trước đây, lệnh sau được sử dụng để quản lý các cài đặt và quy tắc Tường lửa của Windows:

netsh advfirewall firewall

Có 85 lệnh có sẵn trong mô-đun NetSecurity trên Windows 10. Bạn có thể hiển thị toàn bộ danh sách:

Get-Command -Module NetSecurity

Làm cách nào để quản lý cấu hình mạng tường lửa Windows từ PowerShell?

Có ba loại cấu hình mạng trong Windows Firewall:

  • Miền - được áp dụng cho các máy tính trong miền Active Directory

  • Riêng tư - mạng gia đình hoặc công ty

  • Công cộng - mạng công cộng

Nhận thức Vị trí Mạng (NLA) lưu 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 cấu hình mạng (vị trí) nếu nó được phát hiện không chính xác.

Mỗi cấu hình mạng (vị trí) có thể khác nhau tùy theo bộ 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 đều được bảo vệ bởi tường lửa và cả ba loại cấu hình đều được áp dụng cho chúng.

Để bật cả ba cấu hình mạng: Miền, Công khai và Riêng tư, hãy sử dụng lệnh này:

Set-NetFirewallProfile -All -Enabled True

Hoặc đặt cấu hình cụ thể thay vì Tất cả:

Set-NetFirewallProfile -Profile Public -Enabled True

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

Set-NetFirewallProfile -All -Enabled False

Sử dụng lệnh ghép ngắn Set-NetFirewallProfile, bạn có thể thay đổi các tùy chọn cấu hình (hành động mặc định, ghi nhật ký, đường dẫn đến và kích thước của tệp nhật ký, cài đặt thông báo, v.v.).

Bạn có thể biết rằng trong các phiên bản hệ điều hành hiện đại, Tường lửa của Windows được bật cho tất cả các cấu hình. Tất cả các kết nối gửi đi đều được cho phép và các kết nối gửi đến bị chặn (ngoại trừ những kết nối được phép) trong cài đặt cấu hình.

Hãy thay đổi hành động mặc định cho hồ sơ Công khai để chặn tất cả các kết nối gửi đến.

Set-NetFirewallProfile -Name Public -DefaultInboundAction Block

Bạn có thể hiển thị cài đặt cấu hình hiện tại như sau:

Get-NetFirewallProfile -Name Public

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

Get-NetFirewallProfile -policystore activestore

Đảm bảo rằng tất cả cá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ề như sau:

DisabledInterfaceAliases : {NotConfigured}

Bạn có thể tắt cấu hình giao diện cụ thể (để hiển thị danh sách tên giao diện, hãy sử dụng Get-NetIPInterface):

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

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

DisabledInterfaceAliases : {Ethernet0}

Bạn có thể đặt các tùy chọn ghi nhật ký kết nối mạng ở cấp độ cấu hình. Theo mặc định, nhật ký Tường lửa của Windows được lưu trữ trong %systemroot%\system32\LogFiles\Firewall và kích thước tệp là 4MB. Bạn có thể bật tất cả ghi nhật ký kết nối và thay đổi kích thước tệp tối đa:

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

Làm cách nào để tạo, chỉnh sửa hoặc xóa quy tắc tường lửa của Windows bằng PowerShell?

Có 9 lệnh ghép ngắn để quản lý các 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 các kết nối TCP gửi đến cổng 80 và 443 cho cấu hình Miền và Riêng tư, hãy sử dụng lệnh này:

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

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 các kết nối ra ngoài 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

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

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

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

$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 tôi đã chỉ ra cách chặn truy cập trang web theo cả địa chỉ IP và tên miền/trang DNS bằng PowerShell.

Để chỉnh sửa quy tắc tường lửa hiện có, lệnh ghép ngắn Set-NetFirewallRule được sử dụng. Ví dụ: để cho phép các kết nối gử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, hãy sử dụng tập lệnh sau:

$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ả các địa chỉ IP trong quy tắc tường lửa:

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

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

Disable-NetFirewallRule -DisplayName 'WEB-Inbound'

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

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

Để xóa quy tắc tường lửa, lệnh ghép ngắn Remove-NetFirewallRule được sử dụng.

Liệt kê các quy tắc tường lửa của Windows với PowerShell

Bạn có thể hiển thị danh sách các quy tắc tường lửa đang hoạt động cho lưu lượng truy cập vào của mình 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 các quy tắc chặn gửi đi:

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}

Như bạn có thể thấy, lệnh ghép ngắn Get-NetFirewallRule không hiển thị các 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 vào (ra) được phép theo cách hiển thị số cổng thuận tiện hơn, hãy sử dụng tập lệnh 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

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

Bài viết liên quan