Windows

Cấu hình Windows Firewall và mở port an toàn trên VPS Windows Server

Tại sao cần cấu hình Windows Firewall đúng cách ngay sau khi thuê VPS Windows Server?

Bạn vừa thuê một VPS Windows Server (2022 hoặc 2019) và đã RDP vào thành công. Việc đầu tiên sau khi đăng nhập là kiểm tra và cấu hình Windows Firewall. Mặc định, Windows Firewall đã bật và chặn hầu hết các kết nối đến, ngoại trừ một số dịch vụ core như RDP (Remote Desktop) và DHCP. Tuy nhiên, để chạy web server (IIS), SQL Server, FTP, hoặc các ứng dụng doanh nghiệp khác, bạn cần chủ động mở các port tương ứng. Làm sai bước này có thể khiến dịch vụ không hoạt động hoặc tệ hơn là tạo lỗ hổng bảo mật cho VPS. Bài viết này hướng dẫn bạn cách cấu hình Windows Firewall một cách an toàn, sử dụng cả giao diện đồ họa (GUI) và PowerShell, cùng với các bước xử lý sự cố thường gặp. Nếu bạn đang tìm kiếm một VPS Windows ổn định với IPv4 Việt Nam, hãy tham khảo dịch vụ VPS Windows tại thueVPS.

Yêu cầu trước khi bắt đầu

  • Một VPS đã cài Windows Server (2022 hoặc 2019) với quyền Administrator.
  • Đã kết nối được qua Remote Desktop (RDP).
  • Biết tên dịch vụ (ví dụ: Web Server, SQL Server) hoặc số port cụ thể cần mở (80, 443, 1433, 21).
  • Kiến thức cơ bản về giao thức TCP/UDP.

Bước 1 - Kiểm tra trạng thái Firewall hiện tại

Trước khi thay đổi, hãy kiểm tra xem Firewall đã bật chưa và các rule mặc định là gì. Dùng PowerShell với quyền Administrator (nhấp chuột phải vào Start menu, chọn "Windows PowerShell (Admin)" hoặc "Terminal (Admin)").

Get-NetFirewallProfile -All

Lệnh này hiển thị trạng thái của 3 hồ sơ (Profile): Domain, Private, Public. Trên VPS (thường chỉ có 1 card mạng chính), bạn sẽ thấy tất cả đều là Public hoặc Private tùy theo cấu hình mạng của datacenter. Quan trọng: kiểm tra cột Enabled - nếu là True, Firewall đang hoạt động. Đây là trạng thái khuyến nghị.

ProfileEnabledDefaultInboundActionDefaultOutboundAction
DomainTrueBlockInboundAllowOutbound
PrivateTrueBlockInboundAllowOutbound
PublicTrueBlockInboundAllowOutbound

Giá trị mặc định này có nghĩa là: chặn mọi kết nối đến (inbound) trừ khi có rule cho phép, và cho phép mọi kết nối đi (outbound). Đây là nguyên tắc bảo mật cơ bản.

Bước 2 - Mở port bằng giao diện đồ họa (GUI) cho người mới

Cách trực quan nhất là dùng "Windows Defender Firewall with Advanced Security" (WF.msc).

  1. Mở cửa sổ: Nhấn Win + R, gõ wf.msc, Enter.
  2. Tạo Inbound Rule mới: Click chuột phải vào mục "Inbound Rules" bên trái → chọn "New Rule...".
  3. Chọn loại rule: Ở bước "Rule Type", chọn "Port" → Next.
  4. Chọn giao thức và port: Chọn "TCP" hoặc "UDP" (tuỳ service). Ví dụ mở port 80 (HTTP) và 443 (HTTPS) cho IIS, chọn "Specific local ports:", nhập 80,443. Lưu ý: dùng dấu phẩy không khoảng trắng. → Next.
  5. Chọn hành động: "Allow the connection" → Next.
  6. Chọn hồ sơ áp dụng: Đánh dấu cả 3 (Domain, Private, Public) nếu bạn muốn rule hoạt động ở mọi kết nối mạng. Tuy nhiên, nếu VPS chỉ có 1 IP công cộng và bạn muốn chặt chẽ, chỉ chọn Public và Private. → Next.
  7. Đặt tên: Nhập tên dễ nhận diện, ví dụ Allow Web (HTTP, HTTPS). Mô tả (tuỳ chọn): Mở port 80 và 443 cho IIS. → Finish.

Kiểm tra: rule mới sẽ xuất hiện trong danh sách "Inbound Rules". Đảm bảo cột "Enabled" là biểu tượng xanh lá cây. Bạn có thể click chuột phải và chọn "Enable Rule" nếu chưa bật.

Bước 3 - Mở port bằng PowerShell (nhanh và chuẩn hóa)

Đối với sysadmin, PowerShell là cách hiệu quả hơn, đặc biệt khi cần cấu hình nhiều VPS hoặc tự động hóa qua script. Lệnh cơ bản để tạo inbound rule cho phép kết nối TCP đến một port:

New-NetFirewallRule -DisplayName "Allow Port 8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow

Lệnh này tạo rule tên "Allow Port 8080", mở port 8080 TCP cho inbound. Nếu cần mở nhiều port cùng lúc (ví dụ 3000-3010, 5000), dùng dấu phẩy hoặc dấu gạch ngang:

New-NetFirewallRule -DisplayName "Allow Custom Ports" -Direction Inbound -LocalPort 3000-3010,5000 -Protocol TCP -Action Allow

Để mở port cho một chương trình cụ thể (ví dụ node.exe), thay vì chỉ dựa trên port số, dùng tham số -Program:

New-NetFirewallRule -DisplayName "Allow Node.js" -Direction Inbound -Program "C:\Program Files\nodejs\node.exe" -Action Allow

VERIFY: Sau khi tạo, kiểm tra rule mới bằng lệnh:

Get-NetFirewallRule -DisplayName "Allow Port 8080" | Format-List

Output sẽ hiển thị tên, hồ sơ áp dụng, hành động và trạng thái. Nếu Enabled = True, rule đã hoạt động.

Bước 4 - Mở các port phổ biến trên Windows Server

Dưới đây là các port thường cần mở và lệnh PowerShell tương ứng:

ServicePortProtocolLệnh PowerShell
RDP (Remote Desktop)3389TCPNew-NetFirewallRule -DisplayName "RDP" -Direction Inbound -LocalPort 3389 -Protocol TCP -Action Allow
Web (HTTP/HTTPS)80, 443TCPNew-NetFirewallRule -DisplayName "Web (HTTP, HTTPS)" -Direction Inbound -LocalPort 80,443 -Protocol TCP -Action Allow
SQL Server (mặc định)1433TCPNew-NetFirewallRule -DisplayName "SQL Server Default" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow
FTP (control)21TCPNew-NetFirewallRule -DisplayName "FTP Control" -Direction Inbound -LocalPort 21 -Protocol TCP -Action Allow
SMTP (email)25TCPNew-NetFirewallRule -DisplayName "SMTP" -Direction Inbound -LocalPort 25 -Protocol TCP -Action Allow
RDP (IP giới hạn)3389TCPNew-NetFirewallRule -DisplayName "RDP (Office IP)" -Direction Inbound -LocalPort 3389 -Protocol TCP -RemoteAddress 203.0.113.0/24 -Action Allow

Mẹo bảo mật quan trọng: Thay vì mở RDP cho mọi địa chỉ IP (mặc định), bạn nên giới hạn lại. Ví dụ chỉ cho phép RDP từ dải IP công ty bạn. Trong lệnh trên, tham số -RemoteAddress 203.0.113.0/24 giới hạn rule chỉ áp dụng cho các kết nối từ dải IP đó. Nếu bạn không biết IP công cộng của mình, hãy truy cập whatismyipaddress.com từ máy tính đang dùng.

Bước 5 - Đóng port không cần thiết và gỡ rule cũ

Nguyên tắc "ít hơn là nhiều" áp dụng cho firewall. Nếu một dịch vụ không cần đến, hãy đóng port đó lại. Để xem tất cả các rule đang mở, dùng lệnh:

Get-NetFirewallRule -Direction Inbound -Action Allow | Where-Object { $_.Enabled -eq 'True' } | Format-Table DisplayName, LocalPort, Protocol

Để xóa một rule (ví dụ mở port 8080 đã cũ):

Remove-NetFirewallRule -DisplayName "Allow Port 8080"

Để disable (tắt) rule thay vì xóa (có thể kích hoạt lại sau):

Disable-NetFirewallRule -DisplayName "Allow Port 8080"

Luôn kiểm tra kỹ trước khi xóa: xóa nhầm rule cho RDP (port 3389) sẽ khiến bạn mất kết nối từ xa ngay lập tức, chỉ có thể can thiệp qua IPKVM (nếu nhà cung cấp hỗ trợ) hoặc cài lại OS.

Bước 6 - Kiểm tra port đã mở thành công từ bên ngoài

Sau khi tạo rule, bạn cần xác nhận port thực sự đang lắng nghe và có thể kết nối từ internet. Trên VPS, dùng lệnh netstat để kiểm tra xem service có đang listen trên port đó không:

netstat -aon | findstr :80

Nếu thấy dòng như TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234, có nghĩa là service (IIS) đang chạy và lắng nghe trên port 80.

Kiểm tra từ máy tính ngoài internet (ví dụ máy cá nhân của bạn) bằng công cụ online như portchecker.co hoặc dùng Telnet/Test-NetConnection trong PowerShell:

Test-NetConnection -ComputerName <địa chỉ IP VPS của bạn> -Port 80

Kết quả TcpTestSucceeded: True là port đã mở thành công. Nếu là False, kiểm tra lại các bước: (1) service có đang chạy? (2) rule firewall có áp dụng đúng profile? (3) có thiết bị mạng trung gian (router ảo của nhà cung cấp) chặn không? Một số nhà cung cấp VPS có thể có tường lửa cấp độ hạ tầng (Security Group, ACL) cần cấu hình thêm.

Xử lý lỗi thường gặp

Lỗi 1: Mất kết nối RDP sau khi cấu hình firewall

Lỗi 2: Port hiện mở từ bên trong VPS nhưng không kết nối được từ ngoài

Nguyên nhân thường là firewall cấp độ hạ tầng (ví dụ Security Group của nhà cung cấp cloud) chặn hoặc rule Windows Firewall áp dụng sai profile. Kiểm tra profile mạng hiện tại bằng lệnh PowerShell: Get-NetConnectionProfile | Select-Object Name,NetworkCategory. Nếu là Public nhưng rule bạn tạo lại chỉ áp dụng cho Private, rule sẽ không có hiệu lực. Giải pháp: sửa rule để áp dụng cho tất cả profile hoặc thay đổi profile mạng thành Private nếu tin cậy.

Lỗi 3: Xung đột port khi cài đặt nhiều service

Ví dụ: SQL Server và một ứng dụng khác đều muốn dùng port 1433. Lỗi này không phải do firewall mà do service không thể start. Kiểm tra bằng netstat -aon | findstr :1433, nếu thấy port đã được process khác chiếm (PID khác), bạn cần cấu hình một trong hai service để dùng port khác.

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

Có cần tắt Windows Firewall để chạy ứng dụng không?

Không nên. Tắt Windows Firewall sẽ khiến VPS dễ bị tấn công từ internet. Thay vì tắt, hãy tạo rule mở port chính xác cho ứng dụng đó. Chỉ tắt tạm thời để debug, sau đó bật lại ngay.

Làm sao biết port nào đang mở trên VPS?

Dùng lệnh PowerShell: netstat -aon | findstr LISTENING để xem tất cả các port đang lắng nghe. Hoặc dùng GUI: mở Task Manager → tab "Performance" → "Open Resource Monitor" → tab "Network" → "Listening Ports".

Tôi nên dùng GUI hay PowerShell để cấu hình firewall?

Cả hai đều tốt. GUI trực quan cho người mới bắt đầu hoặc cấu hình ít rule. PowerShell nhanh hơn, dễ tự động hóa, và chuẩn hóa khi cần cấu hình nhiều VPS. Nếu bạn quản lý nhiều VPS, học PowerShell là lựa chọn tối ưu.

Mở port 3389 (RDP) cho mọi IP có an toàn không?

Rất rủi ro. RDP là mục tiêu hàng đầu của botnet và tấn công brute-force. Bạn nên giới hạn rule RDP chỉ cho phép IP công cộng của bạn (hoặc dải IP công ty) kết nối. Kết hợp với mật khẩu mạnh (15+ ký tự, có ký tự đặc biệt) và bật NLA (Network Level Authentication).

Khi thuê VPS Windows, quản lý firewall có trách nhiệm gì?

Với VPS full Administrator, bạn hoàn toàn tự chịu trách nhiệm cấu hình firewall và bảo mật. Nhà cung cấp như thueVPS chỉ quản lý hạ tầng vật lý và mạng cốt lõi. Họ không can thiệp vào firewall bên trong VPS của bạn (trừ khi bạn yêu cầu hỗ trợ qua ticket).

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.