SSD Nodes Learn
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-07-23

Cách dùng UFW để cấu hình firewall cho VPS

Hướng dẫn cài đặt UFW trên VPS để chặn mọi kết nối mặc định. Bạn cần biết cách allow SSH trước khi enable để tránh bị lockout khỏi server.

UFW là gì và tại sao bạn cần nó

UFW là viết tắt của Uncomplicated Firewall, và cái tên này nói lên đúng bản chất của nó. Đây là một front end thân thiện bao quanh firewall mà Linux kernel đã có sẵn, vì vậy thay vì phải viết các rule thô, bạn chỉ cần nhập các 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ể truy cập được từ internet. Một firewall sẽ đảo ngược điều đó: bạn chặn tất cả mọi thứ, sau đó chỉ cho phép một vài port mà bạn thực sự sử dụng. Chỉ cần thay đổi đó sẽ loại bỏ hầu hết các nguy cơ bị tấn công chỉ với khoảng bốn lệnh.

Trước khi chạm vào nó, hãy biết cái gì đang listening, vì đó là những service mà firewall sẽ quyết định số phận. Đọc những gì đang listening bằng ss -tlnp là bước đầu tiên đúng đắn.

Quy tắc duy nhất giúp bạn không bị khóa chính mình (lockout)

Đây là sai lầm khiến nhiều người sợ không dám dùng firewall. Bạn enable UFW với chính sách default-deny, nhưng bạn chưa bao giờ allow SSH, vì vậy ngay khi firewall khởi động, kết nối của chính bạn sẽ bị ngắt và bạn không thể đăng nhập lại được. Hãy tránh điều này bằng cách luôn allow SSH trước khi enable UFW. Đó là bí quyết duy nhất, và các bước dưới đây sẽ thực hiện theo thứ tự an toàn.

Nếu bạn lỡ bị như vậy, bạn không 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, vì vậy bạn có thể đăng nhập vào đó và chạy ufw disable hoặc thêm rule còn thiếu.

Bước 1: Thiết lập các chính sách mặc định

Bắt đầu bằng cách yêu cầu UFW deny mọi kết nối đến (incoming) và allow mọi kết nối đi (outgoing):

sudo ufw default deny incoming
sudo ufw default allow outgoing

deny incoming là phần quan trọng. Nó có nghĩa là bất kỳ port nào không có rule allow rõ ràng đều bị đóng với bên ngoài, ngay cả khi có một service đang listening trên đó. allow outgoing cho phép server của bạn kết nối internet bình thường để cập nhật và các việc tương tự. Hai lệnh này chỉ thay đổi policy; không có gì được thực thi cho đến khi bạn enable UFW ở bước 3.

Bước 2: Cho phép các port bạn thực sự cần

Trước khi enable, hãy mở SSH để giữ kết nối của bạn:

sudo ufw allow 22/tcp

UFW cũng có thể giới hạn tốc độ (rate-limit) SSH cho bạn: sudo ufw limit 22/tcp cho phép port đó nhưng chặn bất kỳ địa chỉ nào thực hiện sáu kết nối trở lên trong ba mươi giây, giúp ngăn chặn 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 allow cả HTTP và HTTPS:

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

Chỉ allow những gì bạn phục vụ công khai. Một 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ới 127.0.0.1 để nó chỉ có thể truy cập được ngay trên máy đó. Mỗi port bạn mở là một cánh cửa mà bạn phải bảo vệ, vì vậy hãy giữ danh sách thật ngắn gọn.

Bạn cũng có thể xây dựng chuỗi lệnh ufw đầy đủ cho server của mình tại đây, sau đó chạy chúng theo thứ tự:

ToolUFW rule generator

Bước 3: Enable, và xác nhận nó đã chạy

sudo ufw enable

Nó sẽ cảnh báo rằng lệnh này có thể làm gián đoạn các kết nối SSH hiện có. Vì bạn đã allow 22/tcp ở bước 2, session của bạn sẽ vẫn 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

Đọc hai điều ở đây. Status: active nghĩa là firewall đang chạy. Và mỗi rule sẽ xuất hiện hai lần, một lần bình thường và một lần kèm theo (v6), cho bạn biết UFW đang bao phủ cả IPv6 cũng như IPv4. Nếu các dòng (v6) bị thiếu, phía IPv6 của bạn không được quản lý, đây là một cái bẫy riêng biệt được đề cập trong bài viết về IPv6 firewall.

Quản lý các rule sau này

Để xem các rule kèm theo số thứ tự để bạn có thể xóa một rule:

sudo ufw status numbered
sudo ufw delete 3

Để allow một port chỉ từ một địa chỉ duy nhất, đây là cách tốt để mở một service admin cho chính IP của bạn:

sudo ufw allow from 10.0.0.24 to any port 5432 proto tcp

Một firewall chỉ là một lớp bảo vệ. Nó kiểm soát những gì có thể chạm tới một port, nhưng nó không làm chậm một kẻ đang tấn công dồn dập vào một port mà bạn đã để mở, như SSH. Để giải quyết việc đó, hãy thêm Fail2ban trước SSH để ban những kẻ vi phạm lặp lại. Phòng thủ theo chiều sâu (defence in depth) có nghĩa là mỗi lớp sẽ bao phủ những gì các lớp khác không thể.

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

FAQ

Việc enable UFW có làm ngắt session SSH của tôi không?

Sẽ không nếu bạn allow SSH trước. Hãy chạy sudo ufw allow 22/tcp trước sudo ufw enable, và kết nối của bạn sẽ duy trì vì firewall hiện đã cho phép port 22. Nguy cơ nằm ở việc enable một firewall default-deny mà không có rule allow SSH, điều này sẽ cắt đứt kết nối của bạn. Nếu điều đó xảy ra, hãy đăng nhập thông qua console VNC hoặc serial của nhà cung cấp và chạy ufw disable.

Tôi nên mở những port nào trên một VPS?

Chỉ những port bạn phục vụ công khai. SSH (22/tcp) để bạn có thể quản lý máy, và HTTP và HTTPS (80/tcp, 443/tcp) nếu bạn chạy một website. Hãy để mọi thứ khác ở trạng thái deny. Các service nội bộ như database nên bind vào 127.0.0.1 và không nhận bất kỳ rule firewall nào, để chúng không bao giờ có thể truy cập được từ mạng.

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

Trên Ubuntu hiện đại, có: IPV6=yes được thiết lập 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). Những cách mà nó vẫn có thể sai sót được đề cập trong bẫy IPv6 firewall.

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

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

Làm thế nào để chỉ allow một port từ một địa chỉ IP duy nhất?

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