Windows Firewall và ứng dụng nghiệp vụ ── đăng ký quy tắc nhận từ trình cài đặt

· · Windows, Firewall, Mạng, Bảo mật, Ứng dụng nghiệp vụ, Trình cài đặt, PowerShell, Hệ thống thông tin

“Máy phát triển chạy bình thường, đưa vào khách thì máy khách không nối được máy chủ.” “Lần khởi động đầu có cảnh báo gì đó, hình như người hiện trường đã hủy.” “netstat thì cổng đang chờ, nhưng PC bên cạnh không tới được.” ── Trên hiện trường triển khai ứng dụng nghiệp vụ, kiểu hỏi “không giao tiếp được” này là quá quen. Và nguyên nhân vẫn ngồi ở hàng trên là Windows Firewall (Windows Defender Firewall).

Khó chịu ở chỗ máy phát triển không thấy vấn đề. Trên máy phát triển, lúc gỡ lỗi Visual Studio bạn tự bấm cho phép, hoặc bản thân bạn là quản trị viên, nên xuất xưởng mà không nhận ra chặn nhận mặc định. Phía khách, người thao tác là người dùng thường không có quyền quản trị viên, mạng được quản bằng GPO. Không phải “cái đáng ra chạy thì không chạy”, thực tế là “máy phát triển tình cờ đang chạy”.

Bài viết này hướng tới nhà phát triển ứng dụng nghiệp vụ tự làm, khi đối mặt “khách không giao tiếp được”, và nhân viên IT doanh nghiệp vừa và nhỏ nhận những hỏi đó. Nó nắm tối thiểu hành vi mặc định và cơ chế hồ sơ của Windows Firewall, rồi sắp xếp thiết kế quy tắc nhận, thực tế đăng ký từ trình cài đặt, quy trình khoanh vùng, và lưu ý dưới quản lý GPO/Intune, dựa trên nguồn gốc tính đến tháng 8 năm 2026.

1. Kết luận trước

  • Mặc định Windows Firewall là “nhận thì chặn, gửi thì cho phép”. Lưu lượng nhận không phải hồi đáp yêu cầu bị hủy trừ khi khớp quy tắc.1
  • Quy tắc nhận chỉ cần cho ứng dụng kiểu máy chủ đang chờ cổng. Ứng dụng máy khách chỉ tự kết nối đi vẫn giao tiếp được với mặc định. Hãy khoanh vùng từ đây trước.1
  • Có ba hồ sơ (Domain/Private/Public). Domain tự áp khi phát hiện domain controller; Public là mặc định của mạng chưa nhận diện. Quy tắc bật/tắt theo từng hồ sơ.1
  • Đừng giao vận hành thật cho hộp thoại “cảnh báo quan trọng” đó. Quản trị viên hủy thì tạo quy tắc chặn; với người dùng không có quyền quản trị viên, bấm nút nào cũng tạo quy tắc chặn. Hộp thoại không hiện lại cho đến khi xóa quy tắc đã tạo.2
  • Kết luận là “quy tắc nhận của ứng dụng nghiệp vụ đăng ký từ trình cài đặt”. Bản thân Microsoft khuyến nghị đặt quy tắc trước lần khởi động đầu, và tắt thông báo nhận.2
  • Thiết kế quy tắc theo quyền tối thiểu. Lấy chương trình + giao thức + cổng làm trục, giới hạn hồ sơ vào Domain/Private, thu hẹp IP từ xa vào subnet cần thiết. Đường dẫn chương trình không dùng ký tự đại diện.23
  • Khoanh vùng theo thứ tự Test-NetConnection → Get-NetFirewallRule → pfirewall.log. Nhật ký firewall mặc định không ghi; chỉ khi bật ghi gói bị hủy thì mới ra.456
  • Tắt toàn bộ bằng dừng dịch vụ nằm ngoài hỗ trợ. Dưới quản lý GPO/Intune, “gộp quy tắc cục bộ” có thể đã tắt, khi đó quy tắc cục bộ không có hiệu. Hãy xin IT phân phối tập trung quy tắc.12

Bản đồ tri thức của bài viết này

Mặc định Windows Firewall là chặn nhận và cho phép gửi; quy tắc nhận chỉ cần cho ứng dụng nghiệp vụ kiểu máy chủ đang chờ cổng. Ứng dụng không có quy tắc mà chờ thì hiện hộp thoại cảnh báo quan trọng, và tùy thao tác có thể nung quy tắc chặn thành nguyên nhân sự cố không giao tiếp được, nên nguyên tắc là đăng ký quy tắc nhận từ trình cài đặt. Dưới quản lý GPO/Intune, gộp quy tắc cục bộ có thể tắt, khiến quy tắc đăng ký cục bộ không được áp.

Bản đồ tri thức Windows Firewall và ứng dụng nghiệp vụSơ đồ cho thấy quan hệ Windows Firewall, quy tắc nhận, ứng dụng kiểu chờ, hộp thoại cảnh báo quan trọng, trình cài đặt và quyền quản trị viên, thu hẹp quy tắc (chỉ định chương trình, giới hạn IP từ xa), gộp quy tắc cục bộ, sự cố không giao tiếp được và lệnh khoanh vùngyêu cầukhuyến nghị chocó thể gâycó thể gâycó thể gâyxác minh bằngcấu hình bằngcấu hình bằngyêu cầutriển khaisử dụngcó thể gâycó thể gâycấu hình bằngxác minh bằngxác minh bằngngăn chặncấu hình bằngcấu hình bằngyêu cầugiảm thiểugiảm thiểukhông khuyến nghịkhông khuyến nghịkhuyến nghị chokhuyến nghị chosử dụngxác minh bằngcó thể gâycó thể gâyngăn chặngiảm thiểugiảm thiểukhuyến nghị choxác minh bằngWindows FirewallQuy tắc nhậnỨng dụng nghiệp vụ kiểu chờTrình cài đặtHồ sơ mạngSự cố "không giao tiếp được"Hộp thoại "cảnh báo quan trọng"Đổi đường dẫn tệp thực thiNhật ký firewall (pfirewall.log)Group PolicyMicrosoft IntuneGộp chính sách cục bộDịch vụ firewall (MpsSvc)Quy tắc chỉ định cổngCho phép thừa của quy tắcTest-NetConnectionGet-NetFirewallRuleGiao tiếp nhận chưa yêu cầunetsh advfirewallNew-NetFirewallRuleQuyền quản trịGiới hạn IP từ xaQuy tắc chỉ định chương trìnhDừng dịch vụ MpsSvcTắt firewallNamed pipeSMB (TCP 445)Get-NetConnectionProfileQuy tắc chặnTắt thông báo nhậnQuy tắc chỉ định dịch vụGiới hạn hồ sơĐăng ký lại quy tắc lúc cập nhậtnetstat

Trong sơ đồ, đường liền nét biểu thị quan hệ luôn đúng và đường nét đứt biểu thị quan hệ có điều kiện (điều kiện nằm trong phần giải thích từng quan hệ trên trang chi tiết). Danh sách đầy đủ các quan hệ (tổng 35, kèm bằng chứng và mức chắc chắn) cùng định nghĩa các khái niệm chính được tập hợp tại trang chi tiết bản đồ tri thức (bằng tiếng Nhật). Dữ liệu: JSON-LD / Turtle

2. Nắm đúng hành vi mặc định ── nhận chặn mặc định, gửi cho phép mặc định

Trước hết nắm đúng nền. Windows Firewall là firewall kiểu host bật mặc định trên mọi ấn bản, và hành vi mặc định gom trong hai dòng sau.1

  • Nhận (inbound): chặn hết trừ khi là hồi đáp yêu cầu (solicited) hoặc khớp quy tắc
  • Gửi (outbound): cho phép hết trừ khi khớp quy tắc

Từ hai dòng đó ra khoanh vùng quan trọng nhất với ứng dụng nghiệp vụ. Quy tắc nhận chỉ cần cho “phía chờ”.

  • Ứng dụng máy khách chỉ tự kết nối tới máy chủ web nội bộ, máy chủ DB, hệ thống lõi → theo nguyên tắc không cần quy tắc. Gói về của kết nối là “hồi đáp yêu cầu” nên đi qua mặc định.
  • Ứng dụng kiểu máy chủ / dịch vụ Windows mở cổng và chờ kết nối bằng TCP, gRPC, giao thức riêng, v.v. → quy tắc nhận bắt buộc.
  • Ngoài ra, cấu hình dùng named pipe từ xa là ngoại lệ. Named pipe từ xa không đi cổng của ứng dụng mà đi qua SMB (TCP 445), nên cái cần không phải quy tắc của ứng dụng mà quy tắc phía chia sẻ tệp (SMB).
  • Ngoại lệ là môi trường bảo mật cao đổi tường minh gửi mặc định thành chặn. Cấu hình này chỉ có ở một số tổ chức, nhưng khi đó ứng dụng máy khách cũng cần xin quy tắc gửi.2
Quy tắc nhận chỉ cần cho phía đang chờChỉ kết nối với tư cách máy khách thì quy tắc nhận theo nguyên tắc không cần; mở cổng và chờ thì đăng ký quy tắc nhận từ trình cài đặtKhông chờ(chỉ kết nối với tư cách máy khách)Có chờ(kiểu máy chủ, nhận callback)Rà giao tiếp của ứng dụng mìnhCó mở cổng vàchờ kết nối không?Quy tắc nhận theo nguyên tắc không cầngói về của kết nối đi qua như 「hồi đáp」Quy tắc nhận bắt buộc→ đăng ký từ trình cài đặt (Chương 5)Ngoại lệ: môi trường bảo mật caochặn gửi mặc định thì xin quy tắc gửi

Hình 1: Mở cổng và chờ thì quy tắc nhận bắt buộc; chỉ kết nối với tư cách máy khách theo nguyên tắc không cần quy tắc.

Trường hợp “ứng dụng đáng ra là máy khách nhưng thực ra cũng đang chờ” (nhận callback kết quả, đầu nhận thông báo từ tiến trình khác, v.v.) dễ bỏ sót. Nếu cách ứng dụng tự làm đang chờ còn mơ hồ, hãy xác nhận luôn “Cách chọn giao tiếp liên tiến trình” như sắp xếp lúc thiết kế.

2.1. Hồ sơ và “vị trí mạng”

Quy tắc được áp theo hồ sơ mạng. Có ba hồ sơ.1

Hồ sơ Điều kiện áp Nơi giả định
Domain PC tham gia miền AD tự áp khi phát hiện domain controller. Không đặt tay được Mạng miền nội bộ
Private Quản trị viên đặt tay trên giao diện mạng LAN nhà / văn phòng nhỏ
Public Mặc định của mạng chưa nhận diện. Được thiết kế với giả định chặt nhất Wi-Fi công cộng, khách sạn, sân bay

Hồ sơ đang áp kiểm bằng Get-NetConnectionProfile; chuyển Private/Public bằng Set-NetConnectionProfile.1 Tai nạn quen trên hiện trường là môi trường workgroup phía khách bị phán “Public”, nên quy tắc nhận giới hạn Domain/Private không được áp. Khi “có quy tắc mà không thông”, hãy nghi khớp hồ sơ trước khi nghi nội dung quy tắc.

2.2. Thứ tự ưu tiên quy tắc

Khi có nhiều quy tắc, đánh giá không phải danh sách thứ tự có trọng số mà theo nguyên tắc nhất quán sau.2

  1. Quy tắc cho phép tường minh thắng chặn mặc định
  2. Quy tắc chặn tường minh thắng quy tắc cho phép xung đột
  3. Trong phạm vi không trái hai điều trên, quy tắc cụ thể hơn thắng

Hệ quả thực tế: “chỉ cần một quy tắc chặn ở đâu đó thì sau này thêm bao nhiêu quy tắc cho phép cũng không thắng”. Như chương sau, đúng quy tắc chặn đó được hộp thoại tạo lặng lẽ.

3. Bản chất hộp thoại “cảnh báo quan trọng” ── vì sao không giao được

Khi ứng dụng lần đầu bắt đầu chờ cổng (listen), nếu không có quy tắc cho phép cho ứng dụng đó cũng không có quy tắc do quản trị viên định nghĩa, Windows hiện hộp thoại quen “Cảnh báo bảo mật Windows quan trọng” kiểu “một số tính năng của ứng dụng này bị Windows Defender Firewall chặn”. Đặc tả hành vi rõ ràng.2

  • Hiện với người dùng có quyền quản trị viên: “Cho phép truy cập” tạo quy tắc cho phép. Nhưng bấm “Hủy” thì tạo quy tắc chặn. Thường là hai quy tắc, TCP và UDP.
  • Hiện với người dùng không có quyền quản trị viên: chọn lựa chọn nào cũng tạo quy tắc chặn.
  • Mọi trường hợp, hộp thoại không hiện lại trừ khi xóa quy tắc đã tạo, và giao tiếp cứ bị chặn.
Nhánh hộp thoại cảnh báo quan trọngKhông có quy tắc và thông báo nhận đang bật thì hộp thoại hiện; hủy hoặc thao tác của người dùng thường tạo quy tắc chặn rồi hộp thoại không hiện lạikhôngtắtbậtquản trị viên 「Cho phép truy cập」quản trị viên 「Hủy」người dùng không có quyền quản trị viên(thao tác nào cũng vậy)Ứng dụng bắt đầu chờ cổngCó quy tắc khớpứng dụng đó không?Theo quy tắc(hộp thoại không hiện)Thông báo nhậnđang bật?Chặn im lặng(không tạo quy tắc)Hộp thoại 「cảnh báo quan trọng」Tạo quy tắc cho phépTạo quy tắc chặnTạo quy tắc chặnCho đến khi xóa quy tắchộp thoại không hiện lại

Hình 2: Hủy hộp thoại hoặc thao tác của người dùng thường nung quy tắc chặn; trừ khi xóa thì hộp thoại không hiện lại.

Nghĩa là hộp thoại trông như “cơ chế xin phép người dùng”, nhưng trên hiện trường ứng dụng nghiệp vụ nó làm việc như “cơ chế nung quy tắc chặn ngay lúc người dùng thường chạm”. Nếu người triển khai khởi động lần đầu bằng tài khoản quản trị viên và cho phép trên hộp thoại, quy tắc cho phép đã tạo có hiệu trên cả PC, nên người dùng thường từ hôm sau tạm giao tiếp được. Tai nạn vẫn còn ── khi người dùng thường lần đầu giẫm chỗ chờ mà kiểm lúc triển khai chưa đụng, khi hồ sơ mạng đang áp khác lúc triển khai, và khi cập nhật làm đổi đường dẫn exe (Chương 4, 5).

Bản thân Microsoft nêu rõ thực hành tốt nhất sau cho thiết bị người không phải quản trị viên dùng.2

  1. Đặt quy tắc cần thiết trước lần khởi động đầu của ứng dụng (trình cài đặt hoặc phân phối phía quản trị)
  2. Tắt thông báo nhận (tắt thông báo thì bản thân tạo quy tắc tự động lúc chạy không còn)

Tắt thông báo bằng Set-NetFirewallProfile -NotifyOnListen False, hoặc bằng Group Policy.7 “Hộp thoại hiện thì nhờ người hiện trường bấm cho phép” không phải quy trình vận hành mà là đặt chỗ tai nạn. Quy tắc nhận đăng ký lúc cài ── đó là kết luận của bài này, và khớp khuyến nghị của Microsoft.

4. Thiết kế quy tắc nhận ── chỉ định chương trình, cổng, dịch vụ

Thiết kế nội dung quy tắc sẽ đăng ký. Cách chỉ định có khoảng ba hệ, rồi quyết dùng một mình hay kết hợp.

Cách chỉ định Hợp khi Điểm yếu / lưu ý
Chỉ định chương trình (program= / -Program) Cổng chờ động hoặc nhiều cổng. Cấu hình bản thân ứng dụng desktop chờ Chỉ chỉ định đường dẫn đầy đủ của exe, không ký tự đại diện2. Đổi đường dẫn khi cập nhật thì quy tắc mất đối tượng (mục 5.4)
Chỉ định cổng (localport= / -LocalPort) Cổng cố định. Dễ khớp đơn xin IT và thiết lập thiết bị mạng Cũng cho qua tiến trình khác chờ cùng cổng. Cần sổ cái số cổng
Chỉ định dịch vụ (-Service) Tiến trình chờ chạy như dịch vụ Windows Thu hẹp đối tượng bằng tên dịch vụ (tên ngắn)3. Không dùng được cho dạng khởi động exe trực tiếp
Kết hợp (chương trình + giao thức + cổng) Dạng cơ bản của ứng dụng nghiệp vụ trên sản xuất Càng nhiều điều kiện càng yếu trước đổi môi trường (đổi đường dẫn, cổng), nên hãy ghi nội dung quy tắc thành tài liệu2

Trên đó, chồng thêm giới hạn phạm vi. Khuyến nghị thiết kế của Microsoft cũng là “quy tắc nhận càng cụ thể càng tốt”.2

  • Giới hạn hồ sơ: quy tắc nhận của ứng dụng nghiệp vụ chỉ dùng trong công ty giới hạn Domain/Private, không bật trên Public. Tránh tai nạn cổng chờ mở ra thế giới ngay lúc notebook nối Wi-Fi ngoài công ty.
  • Giới hạn IP từ xa: nếu nguồn kết nối đã xác định, thu hẹp -RemoteAddress vào subnet đó. Với mạng nhà / nhỏ, giới hạn bằng từ khóa LocalSubnet được khuyến nghị.23
  • Hướng và số quy tắc: nếu chỉ chờ TCP thì một quy tắc TCP là đủ. Đừng tạo quán tính cả TCP lẫn UDP như hộp thoại tự tạo.

“Chỉ từ đối tác cần, tới cổng cần, chỉ chương trình cần” ── thiết kế quy tắc nhận gom trong một câu quyền tối thiểu đó.

5. Thực tế đăng ký từ trình cài đặt ── netsh và New-NetFirewallRule

5.1. Tiền đề: cần quyền quản trị viên

Thêm/xóa quy tắc firewall là đổi thiết lập cả máy tính, nên cần chạy bằng quyền quản trị viên (tiến trình đã nâng).8 Trình cài đặt thường đã chạy với quyền quản trị viên, nên đặt đăng ký quy tắc vào xử lý cài là hợp lý. Nó không thành lý do chạy bản thân ứng dụng với quyền quản trị viên. Cách nghĩ ranh giới này được nói kỹ trong “Khi nào cần quyền quản trị viên”.

5.2. Đăng ký bằng netsh advfirewall

Cổ điển nhưng dễ gọi từ mọi trình cài đặt là netsh advfirewall firewall add rule.8

rem add rule vẫn thêm dù đã có quy tắc cùng tên, nên để tái chạy lúc
rem cài lại, sửa chữa, cập nhật, hãy xóa quy tắc cùng tên rồi đăng ký lại
netsh advfirewall firewall delete rule name="MyCompany OrderServer"

rem Quy tắc cho phép nhận: chỉ định chương trình + cổng + giới hạn hồ sơ
netsh advfirewall firewall add rule name="MyCompany OrderServer" dir=in action=allow program="C:\Program Files\MyCompany\OrderServer\OrderServer.exe" protocol=TCP localport=50051 profile=domain enable=yes

rem Lúc gỡ cài: xóa theo tên
netsh advfirewall firewall delete rule name="MyCompany OrderServer"

add rule không thay quy tắc cùng tên hiện có mà thêm cùng tên, nên nếu không chạy delete rule trước thì mỗi lần tái chạy quy tắc sinh sôi, và quy tắc cho phép cũ sống sót sau cập nhật đổi đường dẫn hay phạm vi (lần chạy đầu, delete rule đầu sẽ trả “không có quy tắc khớp” nhưng batch vẫn tiếp tục, nên thứ tự này không sao. Nếu trình cài đặt phán thành bại bằng mã thoát, hãy nhìn kết quả add rule ở cuối). Bạn cũng thu hẹp nguồn kết nối kiểu remoteip=157.60.0.1,172.16.0.0/16,LocalSubnet.8 Xóa gom mọi quy tắc khớp tên, nên tên quy tắc hãy độc nhất với tiền tố công ty cho an toàn.

5.3. Đăng ký bằng PowerShell (New-NetFirewallRule)

Muốn kiểm soát mịn hơn thì dùng mô-đun NetSecurity. -DisplayName bắt buộc; -Profile chỉ định nhiều giá trị bằng dấu phẩy (không khoảng).3

# Đăng ký (chạy từ trình cài đặt ở trạng thái đã nâng). -Name là định danh độc nhất,
# nên tái chạy lúc cài lại, sửa chữa, cập nhật sẽ lỗi nếu tạo quy tắc cùng tên.
# Làm lũy đẳng bằng cách xóa quy tắc cùng tên hiện có rồi tạo lại
Remove-NetFirewallRule -Name "MyCompany-OrderServer-In" -ErrorAction SilentlyContinue
New-NetFirewallRule -Name "MyCompany-OrderServer-In" `
    -DisplayName "MyCompany OrderServer (TCP 50051 inbound)" `
    -Direction Inbound -Action Allow `
    -Program "C:\Program Files\MyCompany\OrderServer\OrderServer.exe" `
    -Protocol TCP -LocalPort 50051 `
    -Profile Domain,Private -RemoteAddress LocalSubnet

# Lúc gỡ cài: không lỗi dù không tồn tại
Remove-NetFirewallRule -Name "MyCompany-OrderServer-In" -ErrorAction SilentlyContinue

Có lý do nêu -Name tường minh. -Name là định danh độc nhất của quy tắc; bỏ thì được gán giá trị ngẫu nhiên. Tên hiển thị (-DisplayName) có thể đổi theo locale, nên khóa để kịch bản nhận diện quy tắc hãy dùng -Name — đó là hướng dẫn của Microsoft.3 Để trình gỡ cài chắc chắn chỉ xóa quy tắc của mình, hãy coi cố định -Name là bắt buộc.

5.4. Khi cập nhật làm đổi đường dẫn exe

Quy tắc chỉ định chương trình cố định đối tượng bằng đường dẫn đầy đủ. Nghĩa là đổi nơi cài hoặc tên exe khi cập nhật thì quy tắc còn đó nhưng mất đối tượng, và chờ lại bị chặn. Lúc đó exe đường dẫn mới bị coi là “ứng dụng không có quy tắc”, nên môi trường thông báo đang bật sẽ hiện lại hộp thoại Chương 3, và người dùng thường thao tác thì nung quy tắc chặn. Môi trường đã tắt thông báo theo khuyến nghị Chương 3 thì thất bại im lặng, hộp thoại cũng không hiện. Tai nạn đặc biệt dễ xảy ra với cách đặt vào thư mục mang số phiên bản, hoặc cách tự cập nhật làm chỗ đặt chạy.

Đổi đường dẫn exe khi cập nhật thì quy tắc mất đối tượngQuy tắc chỉ định chương trình cố định đường dẫn đầy đủ nên đổi nơi đặt thì mất đối tượng, rồi tùy thông báo nhận mà hộp thoại hiện lại hoặc chặn im lặngbậttắtđối phóĐưa v1.0 vàoquy tắc trỏ exe thư mục v1.0Cập nhật đặt vào thư mục v1.1đường dẫn exe đang chạy đổiQuy tắc đường dẫn cũ mất đối tượng(quy tắc còn đó nhưng không có hiệu)Thông báo nhậnđang bật?Hộp thoại hiện lạingười dùng thường chạm thì quy tắc chặnHộp thoại cũng không hiệnchặn im lặngCố định đường dẫn xuyên suốt cập nhậthoặc xử lý cập nhật xóa quy tắc cũ rồi đăng ký lại

Hình 3: Cập nhật đổi đường dẫn exe thì quy tắc cũ mất đối tượng; hãy cố định đường dẫn hoặc đăng ký lại lúc cập nhật.

Đối phó đơn giản, một trong hai:

  • Cố định nơi cài, bố trí sao cho đường dẫn đầy đủ của exe không đổi xuyên suốt cập nhật
  • Với cập nhật đổi đường dẫn, updater xóa quy tắc cũ rồi đăng ký lại bằng đường dẫn mới (chạy lệnh 5.2/5.3 cả trong xử lý cập nhật)

Với MSI, đăng ký quy tắc là custom action chạy sau khi đặt tệp (lúc gỡ cài thì custom action phía xóa) — đó là khuôn quen. Bộ công cụ như WiX còn phần mở rộng mô tả khai báo quy tắc firewall. Vị trí hiện thực đổi theo cách phân phối, nên xem thêm “Cách chọn cách phân phối ứng dụng Windows”. Tai nạn quen thuộc khác lúc triển khai khách — phát hiện nhầm của phần mềm diệt virus — nằm trong “Ứng phó phát hiện nhầm Microsoft Defender”.

6. Khắc phục sự cố ── luồng khoanh vùng “không giao tiếp được”

Cố định thứ tự khi nhận hỏi. Luồng tổng như sau.

Khoanh vùng không giao tiếp đượcXác nhận lần lượt chờ phía máy chủ, khả năng tới nơi phía máy khách, khớp hồ sơ, quy tắc trên ActiveStore, rồi hủy DROP trên nhật kýkhông chờđang LISTENINGTcpTestSucceeded=TrueFalsekhông khớp đối tượng quy tắckhớp「Máy khách không giao tiếp được」Phía máy chủ: netstat -anoVấn đề trước firewallđiều tra phía ứng dụng/dịch vụPhía máy khách: Test-NetConnectionKhả năng tới nơi bình thườngđiều tra tầng ứng dụng (xác thực, giao thức)Phía máy chủ: Get-NetConnectionProfilexác nhận hồ sơ đang ápXem lại chỉ định hồ sơ của quy tắcGet-NetFirewallRule -PolicyStore ActiveStorekiểm có quy tắc cho phép, có lẫn quy tắc chặnĐo hủy (DROP) bằng pfirewall.log

Hình 4: Khoanh vùng tuần tự: netstat → Test-NetConnection → hồ sơ → quy tắc ActiveStore → pfirewall.log.

Bước Lệnh / thao tác Việc xác nhận
1. Xác nhận đang chờ (phía máy chủ) netstat -ano Cổng đích có LISTENING không. Nếu không chờ thì là vấn đề trước firewall
2. Xác nhận khả năng tới nơi (phía máy khách) Test-NetConnection -ComputerName sv01 -Port 50051 TcpTestSucceeded có True không4
3. Xác nhận hồ sơ (phía máy chủ) Get-NetConnectionProfile Hồ sơ đang áp có khớp hồ sơ đã bật quy tắc không1
4. Xác nhận quy tắc đang có hiệu (phía máy chủ) Get-NetFirewallRule -PolicyStore ActiveStore Trong quy tắc “đang thật sự có hiệu” gồm cả nguồn GPO, có quy tắc cho phép đích không. Có lẫn quy tắc chặn từ hộp thoại không5
5. Xác nhận bằng nhật ký (phía máy chủ) pfirewall.log Gói tới cổng đích có bị hủy (DROP) không6

Bổ sung bước 4. Điều kiện cổng và chương trình nằm ở phía đối tượng bộ lọc chứ không phải thân quy tắc, nên truy vấn ngược từ cổng tới quy tắc đi qua bộ lọc.57

# Truy vấn ngược quy tắc liên quan cổng 50051
Get-NetFirewallPortFilter | Where-Object { $_.LocalPort -eq 50051 } | Get-NetFirewallRule

# Lần nguồn quy tắc (cục bộ hay GPO)
Get-NetFirewallRule -PolicyStore ActiveStore -TracePolicyStore |
    Select-Object Name, DisplayName, PolicyStoreSourceType, PolicyStoreSource

Nhật ký firewall bước 5 (pfirewall.log) mặc định không ghi gì. Đường dẫn mặc định là %windir%\system32\logfiles\firewall\pfirewall.log, kích thước tối đa mặc định 4.096KB; chỉ khi bật một trong “ghi gói bị hủy vào nhật ký” hoặc “ghi kết nối thành công vào nhật ký” thì mới được ghi.6 Máy đơn bật như sau.6

netsh advfirewall set allprofiles logging droppedconnections enable
netsh advfirewall set allprofiles logging allowedconnections enable

Nhật ký là tệp văn bản, mỗi dòng ghi hủy (DROP) hay cho phép (ALLOW), giao thức, IP và cổng nguồn/đích, nên tại đây chốt được “SYN từ máy khách đã tới rồi bị hủy, hay bản thân chưa tới”. Ngoài ra, môi trường cấu hình nhật ký bằng chính sách đôi khi thiếu quyền ghi thư mục nhật ký (FullControl của dịch vụ mpssvc) nên tệp không được tạo; khi đó cần tạo thư mục và cấp ACL.6

Đào sâu hơn, bật chính sách kiểm toán “Filtering Platform Packet Drop” thì mỗi lần hủy ghi sự kiện Security 5152. Tuy nhiên khối lượng sự kiện rất lớn, nên Microsoft khuyên dùng sự kiện 5157 (kết nối Filtering Platform) ghi theo kết nối. Đây là công cụ chỉ bật trong lúc khoanh vùng, không dùng thường ngày.9

Cuối cùng, hãy rõ khoanh vùng không được làm. Tắt cả cục bằng dừng dịch vụ firewall (MpsSvc) nằm ngoài hỗ trợ, gây sự cố phía OS như menu Start không chạy, cập nhật ứng dụng Store thất bại. Nếu nhất định muốn tắt để kiểm, giữ dịch vụ chạy rồi tắt hồ sơ bằng Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False, xác nhận xong trả lại ngay.17 Và khi đã chốt nguyên nhân là firewall, đối phó không phải biến tắt thành vĩnh viễn mà là thêm đúng một quy tắc.

7. Lưu ý dưới quản lý tổ chức ── môi trường quy tắc cục bộ không có hiệu và cách xin

Dù trình cài đặt đăng ký quy tắc, có môi trường nó không có hiệu. Tổ chức quản firewall tập trung bằng GPO hoặc Intune (CSP) có thể tắt “gộp quy tắc cục bộ” (AllowLocalPolicyMerge) theo từng hồ sơ. Khi thiết lập này tắt, quy tắc do quản trị viên cục bộ (gồm trình cài đặt) tạo không được áp, và quy tắc của ứng dụng cần kết nối nhận bắt buộc phân phối tập trung từ GPO/CSP.2

Tắt gộp quy tắc cục bộ thì đăng ký của trình cài đặt không có hiệuMôi trường AllowLocalPolicyMerge tắt thì quy tắc cục bộ dù tồn tại cũng không được áp, nên chuyển sang phân phối tập trung bằng GPO hay CSPbật (mặc định)tắtQuy tắc phân phối bằng GPO/IntuneTập quy tắc thật sự có hiệu(ActiveStore)Quy tắc tạo cục bộ(gồm đăng ký của trình cài đặt)Gộp quy tắc cục bộ(AllowLocalPolicyMerge)Quy tắc tồn tại nhưng không được áp→ chuyển sang phân phối tập trung bằng GPO/CSP

Hình 5: Tắt gộp quy tắc cục bộ thì quy tắc của trình cài đặt không được áp; cần phân phối tập trung bằng GPO/CSP.

Sự chuẩn bị thực tế phía phát triển / triển khai như sau.

  • Thiết kế đăng ký quy tắc của trình cài đặt theo kiểu “không thất bại” (bản thân đăng ký thành công nên không phát hiện bằng lỗi. Đưa xác nhận thông sau triển khai vào quy trình)
  • Bằng bước 4 Chương 6 (-TracePolicyStore), xác nhận nguồn quy tắc đang có hiệu là cục bộ hay GPO5
  • Khi biết quy tắc cục bộ không có hiệu, chuyển sang xin phân phối quy tắc với bộ phận IT

Đơn xin hãy đưa đủ thông tin sau. Quy tắc firewall chỉ tạo được khi đủ hướng, chương trình, cổng, phạm vi, nên đây chính là “đặc tả mạng của ứng dụng nghiệp vụ”.

Mục Ví dụ ghi
Tên quy tắc (định danh) MyCompany-OrderServer-In
Hướng Nhận
Đường dẫn chương trình C:\Program Files\MyCompany\OrderServer\OrderServer.exe
Giao thức / cổng TCP 50051
Dải IP từ xa 172.16.10.0/24 (phân đoạn đặt máy khách nhận đơn)
Hồ sơ Chỉ Domain
Mục đích / căn cứ Nhận kết nối từ máy khách nhập đơn (tên hệ thống nghiệp vụ)
Điều kiện bãi bỏ Xóa khi gỡ hệ thống này

Nhìn từ phía IT, đơn xin có bảng này và không có khác nhau hoàn toàn về khối lượng việc. Ngược lại, “hãy mở” chỉ bằng số cổng dễ thành cho phép thừa như Chương 4. Ngoài ra, yêu cầu giao tiếp quanh chia sẻ tệp và xác thực trên môi trường miền cũng đang đổi vì siết khác firewall (bắt buộc ký, v.v.). Xem thêm “SMB signing và LDAP channel binding”.

8. Tóm tắt

  • Mặc định Windows Firewall là chặn nhận, cho phép gửi. Quy tắc nhận chỉ cần cho ứng dụng kiểu máy chủ đang chờ; chỉ kết nối với tư cách máy khách thì theo nguyên tắc không cần.
  • Quy tắc được áp theo hồ sơ (Domain/Private/Public). Nghi phạm số một của “có quy tắc mà không thông” là không khớp hồ sơ.
  • Hộp thoại “cảnh báo quan trọng” tạo quy tắc chặn khi hủy hoặc khi người không có quyền thao tác, rồi không hiện lại. Đừng giao vận hành thật cho hộp thoại này.
  • Quy tắc nhận của ứng dụng nghiệp vụ đăng ký từ trình cài đặt ── đó là nguyên tắc duy nhất. Đăng ký bằng quyền quản trị viên, hiện thực gồm cả xóa, cố định -Name.
  • Quy tắc lấy chương trình + giao thức + cổng làm trục, thu hẹp bằng hồ sơ và IP từ xa. Đổi đường dẫn exe khi cập nhật thì đừng quên đăng ký lại quy tắc.
  • Khoanh vùng máy móc theo thứ tự netstat → Test-NetConnection → xác nhận hồ sơ → Get-NetFirewallRule (ActiveStore) → pfirewall.log. Tắt bằng dừng dịch vụ nằm ngoài hỗ trợ.
  • Dưới quản lý GPO/Intune, gộp quy tắc cục bộ có thể đã tắt. Khi đó xin IT phân phối với đủ tên quy tắc, hướng, chương trình, cổng, IP từ xa, hồ sơ.

Bài viết liên quan

Lĩnh vực tư vấn liên quan

KomuraSoft LLC đảm nhận thiết kế trình cài đặt ứng dụng nghiệp vụ kiểu máy chủ (gồm đăng ký/xóa quy tắc firewall), điều tra nguyên nhân “không giao tiếp được” trên môi trường khách, và sắp xếp yêu cầu mạng nhằm triển khai dưới quản lý GPO. Bắt đầu từ khoanh vùng “máy phát triển chạy nhưng khách thì không” cũng được.

Liên kết tham khảo

  1. Microsoft Learn, Windows Firewall overview. Về Windows Firewall là firewall kiểu host bật mặc định trên mọi ấn bản; về hành vi mặc định “nhận thì chặn trừ hồi đáp yêu cầu hoặc khớp quy tắc, gửi thì cho phép trừ khớp quy tắc”; về ba hồ sơ (Domain=tự áp khi phát hiện domain controller, không đặt tay; Private=quản trị viên đặt tay; Public=mặc định mạng chưa nhận diện); về xác nhận/đổi danh mục mạng bằng Get-NetConnectionProfile / Set-NetConnectionProfile; về tắt bằng dừng dịch vụ firewall (MpsSvc) nằm ngoài hỗ trợ, gây menu Start dừng hoặc cập nhật ứng dụng Store thất bại; về cách tắt đúng là giữ dịch vụ chạy rồi tắt hồ sơ.  2 3 4 5 6 7 8 9

  2. Microsoft Learn, Windows Firewall rules. Về thứ tự ưu tiên quy tắc (cho phép tường minh thắng chặn mặc định, chặn tường minh thắng cho phép, quy tắc cụ thể hơn thắng, không có thứ tự trọng số); về hộp thoại hiện khi ứng dụng bắt đầu chờ mà không có quy tắc; về người dùng quản trị viên chọn “Không” hoặc hủy thì tạo quy tắc chặn (thường hai quy tắc TCP/UDP); về người không phải quản trị viên cục bộ thì dù chọn gì cũng tạo quy tắc chặn; về hộp thoại không hiện lại và giao tiếp cứ bị chặn cho đến khi xóa quy tắc đã tạo; về việc ứng dụng hoặc trình cài đặt tự thêm quy tắc là phổ biến; về khuyến nghị đặt quy tắc trước lần khởi động đầu và tắt thông báo nhận; về quy tắc chương trình không dùng ký tự đại diện (C:*\teams.exe, v.v.) mà chỉ đường dẫn đầy đủ; về tắt gộp quy tắc cục bộ (AllowLocalPolicyMerge) theo hồ sơ được, khi tắt thì quy tắc ứng dụng cần kết nối nhận bắt buộc phân phối tập trung; về khuyến nghị quy tắc nhận càng cụ thể càng tốt và với mạng nhà/nhỏ giới hạn địa chỉ từ xa vào LocalSubnet; về chặn gửi mặc định là lựa chọn môi trường bảo mật cao nhưng không được đổi nhận mặc định thành cho phép.  2 3 4 5 6 7 8 9 10 11 12 13

  3. Microsoft Learn, New-NetFirewallRule (NetSecurity). Về -DisplayName bắt buộc lúc tạo quy tắc; về -Name là định danh độc nhất, mặc định giá trị ngẫu nhiên, và kịch bản được hướng dẫn dùng -Name; về đặc tả từng tham số -Direction (Inbound/Outbound), -Action (Allow/Block), -Program (đường dẫn đầy đủ), -Protocol (TCP/UDP/ICMPv4/ICMPv6/số), -LocalPort, -RemoteAddress (từ khóa IP/subnet/dải/LocalSubnet, v.v.), -Service, -Profile (Any/Domain/Private/Public, nhiều giá trị bằng dấu phẩy không khoảng); về ví dụ tạo quy tắc kết hợp chỉ định chương trình + giao thức + cổng.  2 3 4 5

  4. Microsoft Learn, Test-NetConnection (NetTCPIP). Về Test-NetConnection là cmdlet hiện thông tin chẩn đoán ping, kết nối TCP, đường đi; về thử kết nối TCP tới cổng chỉ định bằng -ComputerName và -Port, kết quả trả về như TcpTestSucceeded.  2

  5. Microsoft Learn, Get-NetFirewallRule (NetSecurity). Về -PolicyStore ActiveStore lấy quy tắc của mọi kho chính sách đang áp (tập chính sách kết quả gồm nguồn GPO); về điều kiện cổng, địa chỉ, v.v. nằm ở phía đối tượng bộ lọc chứ không phải thân quy tắc, truy vấn qua Get-NetFirewallPortFilter / Get-NetFirewallApplicationFilter; về -TracePolicyStore xác nhận nguồn quy tắc (PolicyStoreSource / PolicyStoreSourceType là Local/GroupPolicy).  2 3 4

  6. Microsoft Learn, Configure Windows Firewall logging. Về đường dẫn mặc định của nhật ký là %windir%\system32\logfiles\firewall\pfirewall.log; về kích thước tối đa mặc định 4.096KB, khi đạt trần thì xóa mục cũ trước; về nhật ký không ghi cho đến khi bật một trong “gói bị hủy” hoặc “kết nối thành công”; về bật bằng netsh advfirewall set allprofiles logging droppedconnections/allowedconnections enable; về trường hợp thư mục nhật ký thiếu quyền FullControl của dịch vụ mpssvc thì tệp nhật ký không được tạo, cần tạo thư mục tay và cấp ACL.  2 3 4 5

  7. Microsoft Learn, Manage Windows Firewall with the command line. Về cấu hình hành vi mặc định, thông báo (-NotifyOnListen False), nhật ký bằng Set-NetFirewallProfile; về ví dụ tạo quy tắc chương trình bằng New-NetFirewallRule và ví dụ xóa bằng Remove-NetFirewallRule / netsh advfirewall firewall delete rule; về mẫu ức chế lỗi khi quy tắc không tồn tại bằng -ErrorAction SilentlyContinue; về ví dụ truy vấn ngược quy tắc từ điều kiện cổng qua Get-NetFirewallPortFilter; về tắt hồ sơ bằng Set-NetFirewallProfile -Enabled False là cách tắt đúng.  2 3

  8. Microsoft Learn, Use netsh advfirewall firewall context to control Windows Firewall behavior (KB947709). Về ví dụ thêm quy tắc chương trình/cổng bằng cú pháp netsh advfirewall firewall add rule (name= / dir=in / action=allow / program= / enable=yes / remoteip= / profile= / protocol= / localport=); về ví dụ xóa bằng delete rule; về thành viên nhóm quản trị viên trên môi trường UAC bật cần chạy từ command prompt đã nâng; về thiết lập nhật ký bằng netsh advfirewall set currentprofile logging.  2 3

  9. Microsoft Learn, Audit Filtering Platform Packet Drop. Về bật tiểu mục kiểm toán “Filtering Platform Packet Drop” thì khi Windows Filtering Platform hủy gói sẽ ghi sự kiện 5152 (và 5153); về khối lượng sự kiện tiểu mục này rất lớn, nên để giám sát kết nối bị chặn thì khuyến nghị dùng sự kiện 5157 ghi theo kết nối chứ không theo gói. 

Các bài viết gần đây có cùng thẻ để tìm hiểu sâu hơn những chủ đề lân cận.

Các trang này đặt chủ đề trong bối cảnh rộng hơn của dịch vụ và quyết định.

Bài viết liên quan trực tiếp đến các dịch vụ sau.

Câu hỏi thường gặp

Các câu hỏi thường gặp khi tư vấn về chủ đề của bài viết.

Ứng dụng chỉ kết nối tới máy chủ với tư cách máy khách có cần quy tắc firewall không?
Theo nguyên tắc thì không. Mặc định Windows Firewall là "nhận thì chặn, gửi thì cho phép", nên ứng dụng máy khách chỉ chủ động kết nối đi vẫn giao tiếp được với mặc định. Quy tắc nhận chỉ cần khi phía mở cổng và chờ kết nối, tức ứng dụng kiểu máy chủ. Tuy nhiên có hai ngoại lệ. Môi trường bảo mật cao đôi khi đổi gửi thành chặn mặc định, khi đó cần xin quy tắc gửi. Và nếu ứng dụng máy khách tự chờ cổng làm đầu nhận thông báo kết quả, phần đó vẫn cần quy tắc nhận.
Cứ bấm "Cho phép truy cập" trên hộp thoại "Cảnh báo bảo mật Windows quan trọng" là xong chứ?
Tại chỗ thì xong, nhưng không giao vận hành thật được. Hộp thoại này, nếu người dùng có quyền quản trị viên hủy, sẽ tạo quy tắc chặn. Hơn nữa, với người dùng không có quyền quản trị viên, bấm nút nào cũng tạo quy tắc chặn. Một khi quy tắc đã tạo, hộp thoại không hiện lại trừ khi xóa quy tắc, và giao tiếp cứ thất bại. Với ứng dụng nghiệp vụ mà người thao tác PC hiện trường là người dùng thường, trạng thái "ai đó hủy một lần rồi từ đó không giao tiếp được" dễ xảy ra. Microsoft cũng khuyến nghị đặt quy tắc trước lần khởi động đầu của ứng dụng.
Quy tắc nhận nên tạo theo cổng hay theo chương trình?
Nguyên tắc là kết hợp chứ không dùng một mình. Chỉ định chương trình thu hẹp đối tượng bằng đường dẫn đầy đủ của exe, nhưng đổi đường dẫn khi cập nhật thì quy tắc mất đối tượng (không dùng được ký tự đại diện). Chỉ định cổng làm đơn xin với IT rõ ràng, nhưng cũng cho qua tiến trình khác chờ cùng cổng. Ứng dụng nghiệp vụ trên sản xuất lấy "chương trình + giao thức + cổng" làm trục, giới hạn hồ sơ vào Domain/Private, và thu hẹp IP từ xa vào subnet nơi máy khách ở — đó là mẫu quyền tối thiểu. Chỉ khi cổng động mới dùng chỉ định chương trình đơn.
Quy tắc trình cài đặt đã đăng ký hình như không có hiệu trên PC khách. Vì sao?
Khả năng cao là firewall phía khách được quản tập trung bằng GPO hoặc Intune, và "gộp quy tắc cục bộ" (AllowLocalPolicyMerge) đã tắt. Khi thiết lập này tắt, quy tắc tạo cục bộ dù tồn tại trên hồ sơ cũng không được áp; chỉ còn cách phân phối tập trung từ GPO/CSP. Hãy xác nhận toàn bộ quy tắc đang có hiệu bằng Get-NetFirewallRule -PolicyStore ActiveStore, rồi xin IT phân phối quy tắc. Đơn xin đủ tên quy tắc, hướng, đường dẫn chương trình, giao thức và cổng, dải IP từ xa, hồ sơ thì thường qua một lần.
Để khoanh vùng giao tiếp, tạm tắt firewall có được không?
Tuyệt đối tránh tắt bằng dừng dịch vụ (MpsSvc). Đó là thao tác ngoài phạm vi hỗ trợ của Microsoft, gây sự cố phía OS như menu Start không chạy, cập nhật ứng dụng Store thất bại. Nếu nhất định muốn tắt để khoanh vùng, cách đúng là giữ dịch vụ chạy rồi tắt hồ sơ bằng Set-NetFirewallProfile -Enabled False. Dù vậy cũng giới hạn cho việc xác nhận trong vài phút "có phải firewall không", rồi trả lại ngay khi xong. Vận hành để tắt là đổi sự cố chỉ cần thêm một quy tắc lấy cả PC không phòng thủ.

Hồ sơ tác giả

Trang giới thiệu tác giả bài viết.

Go Komura

Đại diện của KomuraSoft LLC

Chuyên về phát triển phần mềm Windows, tư vấn kỹ thuật và điều tra lỗi, đặc biệt trong các dự án có hệ thống hiện hữu và lỗi khó tái hiện.

Liên kết công khai

Quay lại blog