Cấu hình firewall UFW cho VPS Linux - chặn mặc định, mở đúng port

Giới thiệu
VPS mới cài xong thường mở hết port, SSH (22), các service mặc định, là cửa ngõ cho kẻ tấn công quét cổng và thử brute-force. UFW (Uncomplicated Firewall) là frontend của iptables, giúp sysadmin thiết lập chính sách "chặn tất cả, chỉ mở những gì cần" chỉ với vài lệnh. Bài này hướng dẫn bạn cấu hình UFW trên Ubuntu 24.04 LTS (áp dụng cho Debian 12, Ubuntu 20.04+) từ bước đầu đến verify và xử lý lỗi.
Yêu cầu trước khi bắt đầu
- VPS chạy Ubuntu 24.04 LTS hoặc Debian 12, có quyền
sudohoặc root. - SSH vào VPS bằng user non-root (khuyến nghị) hoặc root.
- Biết các port dịch vụ bạn cần mở: 22/tcp (SSH), 80/tcp (HTTP), 443/tcp (HTTPS), 25/tcp (SMTP), v.v.
- ĐÃ backup cấu hình firewall cũ (nếu có), UFW sẽ ghi đè iptables rules.
Khi nào cần dùng UFW thay vì iptables thuần
UFW không thay thế iptables về khả năng, nó là lớp trừu tượng. Nếu bạn chỉ cần chặn/mở vài port, UFW nhanh hơn viết iptables rules tay. Nếu bạn cần NAT, policy routing, hoặc rules phức tạp theo connection tracking, hãy dùng iptables/nftables trực tiếp. UFW phù hợp với 90% trường hợp VPS cá nhân hoặc staging server.
Bước 1 - Cài đặt UFW (nếu chưa có)
Ubuntu 24.04 có sẵn UFW nhưng chưa active. Cài đặt và kiểm tra trạng thái:
sudo apt update
sudo apt install ufw -y
sudo ufw status
Kết quả mong đợi: Status: inactive. Nếu hiện active, nghĩa là đã có ai cấu hình trước, bạn có thể reset nếu cần: sudo ufw reset (cảnh báo: xoá hết rules cũ).
Bước 2 - Mở port SSH trước khi bật firewall (rất quan trọng)
Cảnh báo: Nếu bạn enable UFW mà chưa mở port SSH, bạn sẽ mất kết nối đến VPS ngay lập tức. Luôn mở SSH trước:
sudo ufw allow ssh
Lệnh này mở port 22/tcp. Nếu bạn dùng port SSH khác (vd 2222), mở đúng port:
sudo ufw allow 2222/tcp
Verify: Lệnh sudo ufw status verbose chưa chạy được nếu UFW đang inactive, nhưng chúng ta chỉ verify rule đã được thêm bằng:
sudo ufw show added
Kết quả phải hiện dòng allow 'ssh' hoặc allow 2222/tcp.
Bước 3 - Đặt chính sách mặc định: chặn inbound, cho phép outbound
Đây là nguyên tắc "deny by default", mọi kết nối từ ngoài vào đều bị chặn trừ khi được allow cụ thể.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Giải thích: deny incoming, chặn tất cả gói tin đến VPS. allow outgoing, VPS vẫn gửi được request ra ngoài (cập nhật apt, curl API...).
Bước 4 - Kích hoạt UFW
sudo ufw enable
Hệ thống sẽ hỏi xác nhận: Command may disrupt existing ssh connections. Proceed with operation (y|n)? y, gõ y. Sau đó kiểm tra ngay:
sudo ufw status verbose
Output mong đợi:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
Nếu thấy Status: active và port SSH được allow, bạn đã an toàn. Mở thêm terminal thứ hai SSH vào VPS để kiểm tra kết nối còn sống không.
Bước 5 - Mở các port dịch vụ cần thiết
Với web server (Nginx, Apache):
sudo ufw allow http
sudo ufw allow https
Hoặc dùng port cụ thể:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Với các dịch vụ khác:
| Dịch vụ | Port | Lệnh |
|---|---|---|
| DNS | 53/udp | sudo ufw allow 53/udp |
| SMTP (Postfix) | 25/tcp | sudo ufw allow smtp |
| MySQL từ remote | 3306/tcp | sudo ufw allow from <IP> to any port 3306 |
| WireGuard | 51820/udp | sudo ufw allow 51820/udp |
Verify sau mỗi lần thêm:
sudo ufw status numbered
Hiển thị tất cả rules kèm số thứ tự, dễ xoá/sửa sau này.
Bước 6 - Rate-limiting và bảo vệ SSH
Rate limit SSH để giảm brute-force:
sudo ufw limit ssh
Lệnh này cho phép tối đa 6 kết nối từ 1 IP trong 30 giây. Nếu vượt quá, IP đó bị chặn tạm thời. Nếu bạn đã dùng allow ssh trước đó, limit ssh sẽ ghi đè.


