SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-08-27

Cấu hình UFW cho VPS: mở port và không mất SSH

Thiết lập UFW trên VPS với policy mặc định deny, chỉ allow port cần dùng và mở SSH trước khi bật firewall để tránh tự khóa khỏi server.

UFW là gì và vì sao bạn nên dùng nó

UFW là viết tắt của Uncomplicated Firewall, và tên gọi này phản ánh đúng chức năng của nó. Đây là front end dễ dùng cho firewall đã có sẵn trong Linux kernel. Vì vậy, thay vì viết các rule thô, bạn chỉ cần nhập những lệnh ngắn như ufw allow 22/tcp. Trên một VPS mới, mọi service đang listening mặc định đều có thể được truy cập từ Internet. Firewall đảo ngược trạng thái này: bạn deny tất cả, sau đó chỉ allow những port thực sự sử dụng. Chỉ thay đổi này đã loại bỏ phần lớn bề mặt tấn công chỉ với khoảng bốn lệnh. UFW là công cụ dành cho Ubuntu và Debian. Nếu VPS chạy Rocky hoặc AlmaLinux, bạn nên dùng firewalld thay thế, vì công cụ này tổ chức rule theo zone.

Trước khi cấu hình firewall, hãy biết những gì đang listening, vì đó là các service mà firewall sẽ quyết định có cho phép truy cập hay không. Đọc danh sách những gì đang listening bằng ss -tlnp là bước đầu tiên phù hợp.

Quy tắc duy nhất giúp bạn không tự khóa mình khỏi server

Đây là lỗi khiến nhiều người ngại dùng firewall. Bạn bật UFW với policy mặc định là deny, nhưng chưa cho phép SSH. Ngay khi firewall hoạt động, kết nối của chính bạn bị ngắt và bạn không thể đăng nhập lại. Để tránh lỗi này, luôn cho phép SSH trước khi bật UFW. Chỉ cần vậy, và các bước dưới đây thực hiện theo đúng thứ tự an toàn.

Nếu vẫn gặp lỗi này, bạn chưa bị kẹt hoàn toàn. Web console của nhà cung cấp, qua VNC hoặc serial, không đi qua SSH. Bạn có thể đăng nhập bằng console đó rồi chạy ufw disable hoặc thêm rule còn thiếu. Firewall lockout cũng có dấu hiệu dễ nhận biết: packet bị drop khiến SSH client treo cho đến khi timeout, còn SSH daemon đã dừng sẽ từ chối kết nối ngay lập tức. Đây là khác biệt giữa connection refused và connection timed out.

Bước 1: Đặt policy mặc định

Trước tiên, cấu hình UFW từ chối toàn bộ kết nối đi vào và cho phép toàn bộ kết nối đi ra:

sudo ufw default deny incoming
sudo ufw default allow outgoing

deny incoming là phần quan trọng. Quy tắc này đóng mọi cổng không có rule allow rõ ràng đối với bên ngoài, kể cả khi có service đang listening trên cổng đó. allow outgoing cho phép server truy cập Internet bình thường để cập nhật và thực hiện các tác vụ tương tự. Hai lệnh này chỉ thay đổi policy; chưa có policy nào được áp dụng cho đến khi bạn enable UFW ở bước 3.

Bước 2: Cho phép các port thực sự cần dùng

Trước khi enable firewall, hãy mở SSH để không mất kết nối:

sudo ufw allow 22/tcp

UFW cũng có thể rate-limit SSH: sudo ufw limit 22/tcp cho phép port này nhưng chặn mọi địa chỉ tạo sáu kết nối trở lên trong ba mươi giây. Cách này hạn chế các script brute-force mà không cần cài thêm phần mềm.

Nếu bạn chạy web server, hãy cho phép cả HTTP và HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Chỉ cho phép những dịch vụ bạn thực sự public. Database như Postgres trên port 5432 hầu như không bao giờ nên có rule allow. Thay vào đó, hãy bind nó vào 127.0.0.1 để chỉ có thể truy cập từ chính máy đó. Mỗi port bạn mở đều cần được bảo vệ, vì vậy hãy giữ danh sách này ngắn.

Bạn cũng có thể tạo đầy đủ chuỗi lệnh ufw cho server tại đây, rồi chạy chúng theo thứ tự:

ToolUFW rule generator

Bước 3: Enable và xác nhận firewall đang hoạt động

sudo ufw enable

Lệnh này cảnh báo rằng nó có thể làm gián đoạn các kết nối SSH hiện có. Vì bạn đã cho phép 22/tcp ở bước 2 nên session của bạn vẫn được duy trì. Xác nhận kết quả:

sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing)

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp                     ALLOW IN    Anywhere

Hãy đọc 2 thông tin ở đây. Status: active cho biết firewall đang chạy. Mỗi rule xuất hiện 2 lần, một lần ở dạng thông thường và một lần kèm (v6). Điều này cho biết UFW đang áp dụng cho cả IPv6 và IPv4. Nếu thiếu các dòng (v6), phần IPv6 của bạn không được quản lý. Đây là một rủi ro riêng, được đề cập trong bài viết về firewall cho IPv6.

Quản lý rule về sau

Để xem rule kèm số thứ tự và xóa một rule:

sudo ufw status numbered
sudo ufw delete 3

Để chỉ cho phép một port từ một địa chỉ, đây là cách phù hợp để chỉ mở một admin service cho IP của bạn:

sudo ufw allow from 10.0.0.24 to any port 5432 proto tcp

Cách này sẽ không còn hiệu quả khi địa chỉ của chính bạn thay đổi hoặc cần cho nhiều máy truy cập. Cách xử lý thông thường là không public port nữa mà truy cập service qua private network. Quảng bá subnet riêng của server vào tailnet dùng cho mục đích đó.

Firewall chỉ là một lớp bảo vệ. Nó kiểm soát những gì có thể truy cập một port, nhưng không làm chậm người liên tục gửi request đến một port đang mở, chẳng hạn SSH. Để xử lý việc đó, hãy thêm Fail2ban phía trước SSH để chặn các nguồn vi phạm lặp lại. Defence in depth nghĩa là mỗi lớp xử lý những phần mà các lớp khác không thể xử lý.

Firewall chỉ có ý nghĩa sau khi bạn biết port là gì và service listen như thế nào, và việc cấu hình firewall là một bước trong 10 phút đầu tiên trên một VPS mới.

FAQ

Việc bật UFW có ngắt phiên SSH không?

Không, nếu bạn cho phép SSH trước. Chạy sudo ufw allow 22/tcp trước sudo ufw enable. Kết nối của bạn vẫn hoạt động vì firewall đã cho phép cổng 22. Rủi ro xảy ra khi bạn bật firewall có chính sách mặc định là deny nhưng không có rule cho phép SSH, khiến bạn bị ngắt kết nối. Nếu xảy ra việc đó, hãy đăng nhập qua VNC hoặc serial console của nhà cung cấp rồi chạy ufw disable.

Tôi nên mở những cổng nào trên VPS?

Chỉ mở các cổng phục vụ công khai. Mở SSH (22/tcp) để quản lý máy chủ, và HTTP cùng HTTPS (80/tcp, 443/tcp) nếu bạn chạy website. Các cổng khác nên tiếp tục bị deny. Những service nội bộ như database nên bind vào 127.0.0.1 và không có firewall rule nào, để chúng không bao giờ có thể truy cập từ network.

UFW có xử lý IPv6 không?

Có, trên Ubuntu hiện đại: IPV6=yes được đặt trong /etc/default/ufw, vì vậy mỗi rule áp dụng cho cả hai stack và ufw status hiển thị các rule IPv6 với hậu tố (v6). Các trường hợp vẫn có thể cấu hình sai được trình bày trong bẫy firewall IPv6.

Làm thế nào để xóa một UFW rule?

Chạy sudo ufw status numbered để liệt kê các rule kèm số thứ tự, sau đó chạy sudo ufw delete N, trong đó N là số của rule bạn muốn xóa. Bạn cũng có thể xóa theo specification, ví dụ sudo ufw delete allow 80/tcp.

Làm thế nào để chỉ cho phép một IP address truy cập vào một cổng?

Dùng rule from thay vì allow thông thường. Để chỉ cho phép địa chỉ văn phòng của bạn truy cập PostgreSQL, chạy sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. Với chính sách mặc định là deny, cổng này bị đóng với mọi người cho đến khi có rule mở nó. Vì vậy, rule from này là cách duy nhất để truy cập: toàn bộ Internet vẫn bị chặn và chỉ địa chỉ bạn chỉ định mới được phép đi qua. Không được thêm allow 5432/tcp thông thường, vì rule đó sẽ mở cổng cho mọi người. Đây là cách an toàn nhất để public database hoặc admin panel. Xác nhận bằng sudo ufw status verbose; lệnh này hiển thị địa chỉ nguồn bên cạnh cổng.