Cài đặt và cấu hình UFW là bước bảo mật đầu tiên mà bất kỳ ai thuê VPS chạy Ubuntu đều phải làm nhưng cũng là bước khiến nhiều người mất trắng kết nối SSH vì bật firewall mà quên mở port. Bài viết này từ InterData hướng dẫn bạn từng bước cài đặt, cấu hình UFW an toàn từ cơ bản đến nâng cao, kèm cảnh báo rủi ro cụ thể tại mỗi bước quan trọng.
NỘI DUNG BÀI VIẾT
- 1. UFW là gì? Vì sao VPS cần cài đặt và cấu hình UFW ngay?
- 2. Hướng dẫn cài đặt UFW trên Ubuntu 20.04 / 22.04 / 24.04
- 3. Cấu hình UFW cơ bản từ allow SSH đến enable an toàn
- 4. Cấu hình UFW nâng cao: mở port, chặn IP, rate limiting, logging
- 5. Bảng cheat sheet lệnh UFW phổ biến
- 6. So sánh UFW vs iptables vs firewalld: khi nào dùng cái nào?
- 7. Xử lý sự cố UFW thường gặp: mất SSH, Docker bypass, reset
- 8. Kết hợp UFW với Fail2ban để bảo mật SSH toàn diện
- 9. Câu hỏi thường gặp về cài đặt và cấu hình UFW
UFW là gì? Vì sao VPS cần cài đặt và cấu hình UFW ngay?
UFW (Uncomplicated Firewall) là công cụ quản lý tường lửa (Firewall) mặc định trên Ubuntu, hoạt động như lớp giao diện đơn giản phía trên iptables/netfilter – bộ lọc gói tin cấp kernel của hệ điều hành Linux. Thay vì viết hàng chục dòng lệnh iptables phức tạp, bạn chỉ cần một lệnh UFW ngắn gọn để mở port, chặn IP hay thiết lập chính sách mặc định.

VPS mới = cửa mở toang nếu không có firewall
Khi bạn thuê một VPS chạy Ubuntu, UFW đã được cài sẵn nhưng ở trạng thái inactive (tắt). Điều này có nghĩa mọi port trên server đều mở, mọi kết nối từ Internet đều được chấp nhận. Bot quét port tự động sẽ tìm thấy VPS của bạn trong vài phút sau khi khởi tạo.
Đó là lý do cài đặt và cấu hình UFW cần là việc đầu tiên bạn làm sau khi nhận VPS – trước cả khi cài web server hay deploy ứng dụng.
UFW phù hợp với ai?
- Người mới dùng VPS lần đầu, chưa quen iptables.
- Developer, freelancer cần bảo mật server nhanh mà không cần học cú pháp phức tạp.
- Sysadmin quản trị VPS/Cloud Server chạy Ubuntu hoặc Debian, cần firewall rule rõ ràng, dễ audit.
Hướng dẫn cài đặt UFW trên Ubuntu 20.04 / 22.04 / 24.04
Trên Ubuntu Server 20.04 trở lên, UFW thường được cài sẵn. Bước đầu tiên là kiểm tra xem UFW đã có trên hệ thống chưa, sau đó cài đặt nếu thiếu.
Bước 1: Kiểm tra UFW đã cài chưa
sudo ufw status
Nếu UFW đã cài, bạn sẽ thấy dòng Status: inactive (chưa bật) hoặc Status: active (đã bật). Nếu hệ thống báo ufw: command not found, nghĩa là UFW chưa được cài.
Bước 2: Cài đặt UFW nếu chưa có
# Cập nhật danh sách gói và cài UFW
sudo apt update && sudo apt install ufw -y
Sau khi cài xong, chạy lại sudo ufw status để xác nhận. Kết quả Status: inactive là đúng – chưa bật UFW vội, cần cấu hình trước.
Bước 3: Kiểm tra phiên bản UFW
sudo ufw version
Lệnh này trả về phiên bản UFW đang dùng (ví dụ: ufw 0.36.1 trên Ubuntu 22.04). Biết phiên bản giúp bạn tra cứu đúng tài liệu khi cần.

Cấu hình UFW cơ bản từ allow SSH đến enable an toàn
Đây là phần quan trọng nhất khi cài đặt và cấu hình UFW. Sai thứ tự ở đây = mất kết nối SSH, phải truy cập VNC/console để cứu server. Làm đúng thứ tự dưới đây, bạn sẽ không gặp vấn đề.
Bước 1: Thiết lập default policy (chính sách mặc định)
Nguyên tắc bảo mật cơ bản: chặn tất cả kết nối đến, cho phép tất cả kết nối ra. Sau đó mới mở từng port cần thiết.
# Chặn mọi kết nối đến (incoming) theo mặc định
sudo ufw default deny incoming
# Cho phép mọi kết nối ra (outgoing) theo mặc định
sudo ufw default allow outgoing
Sau khi chạy, terminal sẽ hiển thị Default incoming policy changed to 'deny' và Default outgoing policy changed to 'allow'. Chính sách này chưa có hiệu lực cho đến khi bạn enable UFW.
Bước 2: Allow SSH TRƯỚC KHI enable UFW
⚠ Cảnh báo – đây là bước bắt buộc
Nếu bạn enable UFW mà chưa allow SSH, kết nối SSH hiện tại sẽ bị ngắt ngay lập tức. Bạn sẽ không thể SSH lại vào server và phải truy cập qua VNC hoặc console từ panel nhà cung cấp để sửa. Luôn chạy lệnh allow SSH trước.
# Cho phép SSH (port 22 mặc định)
sudo ufw allow ssh
# Hoặc nếu bạn đã đổi port SSH sang port khác (ví dụ 2222):
sudo ufw allow 2222/tcp
Lệnh sudo ufw allow ssh tương đương sudo ufw allow 22/tcp. Nếu bạn đã thay đổi port SSH để bảo mật VPS, hãy thay số port tương ứng.
Bước 3: Bật UFW (enable)
sudo ufw enable
Hệ thống sẽ hỏi: Command may disrupt existing ssh connections. Proceed with operation (y|n)? – nhập y và Enter. Vì bạn đã allow SSH ở bước trước, kết nối hiện tại sẽ không bị ngắt.
Sau khi enable, UFW tự động khởi động cùng hệ thống mỗi khi reboot. Không cần cấu hình thêm gì cho phần tự khởi động.
Bước 4: Mở port HTTP và HTTPS cho web server
Nếu VPS chạy website (Nginx, Apache), bạn cần mở port 80 (HTTP) và 443 (HTTPS):
# Mở port HTTP
sudo ufw allow 80/tcp
# Mở port HTTPS
sudo ufw allow 443/tcp
# Hoặc mở cả hai cùng lúc bằng application profile (nếu có Nginx)
sudo ufw allow 'Nginx Full'
Bước 5: Kiểm tra trạng thái UFW
# Xem trạng thái và danh sách rule đang áp dụng
sudo ufw status verbose
Kết quả sẽ liệt kê: trạng thái (active), default policy, logging level, và từng rule đang áp dụng với port, giao thức và hướng (IN/OUT). Đây là lệnh bạn sẽ dùng thường xuyên nhất để kiểm tra cấu hình firewall.

Săn Deals VPS & Cloud Server Trước Khi Chốt
Trước khi chọn gói VPS chạy Ubuntu để thực hành cấu hình UFW, ghé Canh Me để xem khuyến mãi, mã giảm giá và hot deal mới nhất từ InterData – tiết kiệm chi phí ngay từ bước đầu.
Cấu hình UFW nâng cao: Mở port, chặn IP, rate limiting, logging
Sau khi cài đặt và cấu hình UFW cơ bản xong, bạn có thể mở rộng firewall rule cho các tình huống cụ thể. Phần này dành cho VPS chạy nhiều dịch vụ hoặc cần kiểm soát truy cập chặt hơn.
Mở/chặn port cụ thể (TCP hoặc UDP)
# Mở port 3306 (MySQL) chỉ cho TCP
sudo ufw allow 3306/tcp
# Mở port 53 cho cả TCP và UDP (DNS)
sudo ufw allow 53
# Chặn port 25 (SMTP) - ngăn server gửi mail spam
sudo ufw deny 25/tcp
Cho phép truy cập từ một IP hoặc subnet cụ thể
Khi bạn muốn chỉ cho phép IP văn phòng hoặc IP nhà truy cập SSH, hoặc chỉ cho server database nội bộ kết nối:
# Cho phép IP 203.0.113.50 truy cập SSH
sudo ufw allow from 203.0.113.50 to any port 22 proto tcp
# Cho phép subnet 10.0.0.0/24 truy cập MySQL
sudo ufw allow from 10.0.0.0/24 to any port 3306 proto tcp
# Chặn toàn bộ kết nối từ một IP
sudo ufw deny from 192.168.1.100
⚠ Lưu ý khi restrict SSH theo IP
Nếu bạn chỉ allow SSH từ một IP cố định, hãy chắc chắn IP đó không thay đổi (IP tĩnh). Nếu IP nhà bạn là IP động, bạn có thể bị khóa ngoài khi ISP đổi IP. Luôn giữ quyền truy cập VNC/console dự phòng.
Mở dải port (port range)
# Mở port từ 6000 đến 6100 cho TCP
sudo ufw allow 6000:6100/tcp
# Mở port range cho UDP (ví dụ: game server, VoIP)
sudo ufw allow 27000:27030/udp
Cú pháp dùng dấu hai chấm : giữa port bắt đầu và port kết thúc. Bắt buộc chỉ định giao thức (/tcp hoặc /udp) khi mở port range.
Xem và dùng Application Profile có sẵn
# Liệt kê các application profile UFW nhận biết
sudo ufw app list
# Xem chi tiết profile (ví dụ Nginx Full)
sudo ufw app info 'Nginx Full'
# Cho phép ứng dụng theo tên profile
sudo ufw allow 'OpenSSH'
Application profile là file cấu hình trong /etc/ufw/applications.d/, định nghĩa sẵn port cho từng ứng dụng. Khi cài Nginx hoặc Apache, profile tương ứng tự động xuất hiện trong danh sách.
Rate limiting SSH: chống brute-force đăng nhập
# Giới hạn tốc độ kết nối SSH (tối đa 6 kết nối/30 giây từ cùng IP)
sudo ufw limit ssh
Lệnh ufw limit tự động chặn tạm IP nào cố gắng kết nối quá 6 lần trong 30 giây. Đây là biện pháp chống brute-force SSH đơn giản nhất, nằm trong danh sách các cách bảo mật VPS mà mọi server nên áp dụng.
Nếu bạn đã có rule allow ssh từ trước, cần xóa rule cũ rồi thêm rule limit:
# Xóa rule allow ssh cũ
sudo ufw delete allow ssh
# Thay bằng rule limit
sudo ufw limit ssh
Bật logging để theo dõi kết nối bị chặn
# Bật logging mức thấp (ghi lại các kết nối bị chặn)
sudo ufw logging on
# Đặt mức log chi tiết hơn (low | medium | high | full)
sudo ufw logging medium
Log UFW được ghi vào /var/log/ufw.log (và /var/log/syslog). Mức low chỉ ghi kết nối bị chặn bởi default policy. Mức medium ghi thêm các gói không hợp lệ và kết nối được cho phép. Với VPS thông thường, mức low hoặc medium là đủ – mức high và full tạo rất nhiều log, tốn dung lượng ổ đĩa.
Xóa rule UFW
# Cách 1: Xóa rule bằng chính lệnh đã tạo
sudo ufw delete allow 80/tcp
# Cách 2: Xóa theo số thứ tự rule
sudo ufw status numbered
# Kết quả hiển thị danh sách rule có đánh số [1], [2], [3]...
sudo ufw delete 3
Cách 2 tiện hơn khi rule phức tạp (có IP, subnet). Chạy sudo ufw status numbered trước để xem đúng số rule cần xóa. Hệ thống sẽ hỏi xác nhận trước khi xóa.
Bảng cheat sheet lệnh UFW phổ biến
Bảng tổng hợp các lệnh UFW dùng thường xuyên nhất khi cài đặt và cấu hình UFW trên VPS. Lưu lại để tra nhanh khi cần.
| Lệnh UFW | Chức năng |
|---|---|
sudo ufw enable |
Bật UFW (có hiệu lực ngay và tự khởi động cùng hệ thống) |
sudo ufw disable |
Tắt UFW (mọi rule tạm ngưng, không bị xóa) |
sudo ufw status verbose |
Xem trạng thái, default policy và toàn bộ rule đang áp dụng |
sudo ufw status numbered |
Liệt kê rule kèm số thứ tự (dùng để xóa rule theo số) |
sudo ufw allow 22/tcp |
Mở port 22 cho giao thức TCP (SSH) |
sudo ufw deny 3306/tcp |
Chặn port 3306 TCP (MySQL) từ bên ngoài |
sudo ufw allow from 10.0.0.0/24 |
Cho phép toàn bộ kết nối từ subnet 10.0.0.0/24 |
sudo ufw limit ssh |
Giới hạn tốc độ kết nối SSH (chống brute-force) |
sudo ufw delete allow 80/tcp |
Xóa rule cho phép port 80 TCP |
sudo ufw delete 3 |
Xóa rule theo số thứ tự (xem bằng status numbered) |
sudo ufw reset |
Xóa toàn bộ rule, tắt UFW, trở về trạng thái ban đầu |
sudo ufw reload |
Nạp lại rule sau khi sửa file cấu hình thủ công |
sudo ufw logging on |
Bật ghi log (mặc định mức low) |
sudo ufw app list |
Liệt kê application profile có sẵn |
sudo ufw allow 6000:6100/tcp |
Mở dải port 6000–6100 cho TCP |
sudo ufw default deny incoming |
Đặt chính sách mặc định: chặn mọi kết nối đến |
So sánh UFW vs iptables vs firewalld: khi nào dùng cái nào?
Ba công cụ firewall này đều quản lý netfilter (bộ lọc gói tin trong kernel Linux), nhưng khác nhau về cú pháp, độ phức tạp và hệ sinh thái. Bảng dưới đây giúp bạn chọn đúng công cụ cho tình huống của mình.
| Tiêu chí | UFW | iptables | firewalld |
|---|---|---|---|
| Độ khó sử dụng | Dễ – cú pháp ngắn, tường minh | Khó – cú pháp dài, nhiều chain/table | Trung bình – dùng khái niệm zone |
| Distro mặc định | Ubuntu, Debian | Mọi distro (cấp thấp) | CentOS, RHEL, Fedora, AlmaLinux |
| Quản lý rule | Tự lưu và nạp lại khi reboot | Cần iptables-persistent hoặc script | Tự lưu (permanent/runtime) |
| Phù hợp cho | VPS cá nhân, dự án nhỏ-vừa | Server cần rule phức tạp, NAT, mangle | Server RHEL/CentOS, hạ tầng nhiều zone |
| Hỗ trợ IPv6 | Có (mặc định bật) | Cần ip6tables riêng | Có |
| Backend | iptables / nftables | netfilter trực tiếp | nftables (mới) / iptables (cũ) |
Kết luận: Nếu bạn chạy VPS Ubuntu và cần firewall nhanh, dễ quản lý – UFW là lựa chọn đúng. Chỉ cần chuyển sang iptables trực tiếp khi bạn cần rule phức tạp mà UFW không hỗ trợ (NAT nâng cao, custom chain, packet mangling). Firewalld phù hợp hơn với hệ sinh thái RHEL/CentOS.
Xử lý sự cố UFW thường gặp: mất SSH, Docker bypass, reset
Dù đã cài đặt và cấu hình UFW cẩn thận, bạn vẫn có thể gặp các tình huống bất ngờ. Dưới đây là 3 sự cố phổ biến nhất và cách xử lý từng trường hợp.
Sự cố 1: Mất kết nối SSH sau khi bật UFW
Nguyên nhân: Bạn chạy sudo ufw enable mà chưa allow SSH trước. Default policy deny incoming chặn luôn port 22.
Cách khắc phục:
- Truy cập server qua VNC console hoặc Web Console từ panel quản trị VPS của nhà cung cấp (InterData hỗ trợ VNC console trong portal quản lý).
- Đăng nhập bằng tài khoản root hoặc user có quyền sudo.
- Chạy các lệnh sau:
# Allow SSH
sudo ufw allow ssh
# Kiểm tra rule đã được thêm
sudo ufw status
# Nếu cần, reload UFW
sudo ufw reload
Sau đó thử SSH lại từ máy cá nhân. Nếu vẫn không vào được, dùng lệnh sudo ufw disable để tắt UFW tạm, SSH lại rồi cấu hình lại từ đầu.
Sự cố 2: Docker bypass UFW – port container vẫn mở dù UFW deny
Đây là vấn đề rất phổ biến nhưng ít bài viết tiếng Việt đề cập đúng cách. Khi bạn chạy Docker container với flag -p (publish port), Docker tự thêm rule vào iptables chain DOCKER – hoàn toàn bỏ qua UFW.
Ví dụ: Bạn chạy docker run -p 8080:80 nginx rồi sudo ufw deny 8080. Truy cập http://server-ip:8080 vẫn thấy Nginx. UFW deny không có tác dụng vì Docker ghi rule trực tiếp vào iptables, trước cả chain UFW.
Cách fix:
Tạo hoặc chỉnh file /etc/docker/daemon.json để Docker không tự sửa iptables:
# Mở file cấu hình Docker
sudo nano /etc/docker/daemon.json
# Thêm nội dung sau (hoặc merge nếu file đã có nội dung):
{
"iptables": false
}
⚠ Cảnh báo khi tắt iptables cho Docker
Khi đặt "iptables": false, Docker sẽ không tự tạo NAT rule nữa. Điều này có nghĩa container publish port sẽ không thể truy cập từ bên ngoài trừ khi bạn tự thêm rule UFW cho port đó. Đây chính là hành vi mong muốn – nhưng cần test kỹ trước khi áp dụng trên production.
# Restart Docker để áp dụng
sudo systemctl restart docker
# Sau đó mở port cho container qua UFW
sudo ufw allow 8080/tcp
Phương án thay thế (không tắt iptables của Docker): Dùng flag -p 127.0.0.1:8080:80 thay vì -p 8080:80 để container chỉ listen trên localhost, rồi dùng reverse proxy (Nginx) phía trước – UFW sẽ kiểm soát được port của Nginx.
Sự cố 3: Reset toàn bộ UFW khi cấu hình rối
# Reset UFW về trạng thái ban đầu (xóa mọi rule, tắt UFW)
sudo ufw reset
Lệnh ufw reset sẽ: tắt UFW, xóa toàn bộ rule, backup file rule cũ v
ào /etc/ufw/ với đuôi timestamp. Sau khi reset, bạn cần cấu hình lại từ đầu: default policy → allow SSH → enable.
⚠ Sau khi reset, nhớ allow SSH trước khi enable lại
Reset xóa sạch mọi rule, kể cả rule allow SSH. Nếu bạn enable lại mà quên allow SSH, sẽ lặp lại sự cố mất kết nối.
Kết hợp UFW với Fail2ban để bảo mật SSH toàn diện
UFW limit chặn IP khi có hơn 6 kết nối/30 giây – nhưng attacker thông minh hơn thế. Chúng gửi 3–4 lần/phút, đủ chậm để vượt qua rate limit nhưng vẫn chạy wordlist cả ngày. Fail2ban giải quyết bài toán này bằng cách theo dõi log đăng nhập thất bại và tự động thêm rule ban IP vào UFW.
Cài đặt Fail2ban
# Cài Fail2ban
sudo apt update && sudo apt install fail2ban -y
# Kiểm tra trạng thái
sudo systemctl status fail2ban
Cấu hình jail cho SSH sử dụng UFW làm banaction
Tạo file cấu hình local (không sửa file gốc để tránh bị ghi đè khi cập nhật):
# Tạo file cấu hình local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Tìm section [sshd] và chỉnh thành:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 3600
banaction = ufw
Giải thích cấu hình trên:
maxretry = 5– ban IP sau 5 lần đăng nhập sai.findtime = 600– đếm trong khung 10 phút (600 giây).bantime = 3600– ban 1 giờ (3600 giây). Đặt-1để ban vĩnh viễn.banaction = ufw– dùng UFW để thêm rule chặn IP (thay vì iptables trực tiếp).
# Restart Fail2ban để áp dụng cấu hình mới
sudo systemctl restart fail2ban
# Xem danh sách IP đang bị ban
sudo fail2ban-client status sshd
Khi Fail2ban ban một IP, bạn sẽ thấy rule mới xuất hiện trong sudo ufw status – dòng DENY với IP bị chặn. Đây là cặp đôi bảo mật SSH mạnh mẽ nhất cho VPS chạy Ubuntu.
Câu hỏi thường gặp về cài đặt và cấu hình UFW
UFW có thay thế hoàn toàn được iptables không?
UFW là frontend quản lý iptables, không phải bản thay thế. UFW xử lý tốt hầu hết tình huống firewall phổ biến trên VPS (allow/deny port, IP, rate limit). Tuy nhiên, khi cần NAT phức tạp, custom chain, packet mangling hay quy tắc match nâng cao, bạn phải viết iptables trực tiếp. Với VPS chạy website, ứng dụng web thông thường, UFW là đủ.
UFW có hoạt động trên Debian, Linux Mint không?
Có. UFW được phát triển bởi Canonical cho Ubuntu nhưng có sẵn trong repository của Debian, Linux Mint và hầu hết distro dựa trên Debian. Cài bằng sudo apt install ufw. Cú pháp và cách cấu hình giống hệt Ubuntu.
Tắt UFW rồi bật lại có mất rule không?
Không. Khi chạy sudo ufw disable, UFW tắt firewall nhưng giữ nguyên toàn bộ rule đã cấu hình. Chạy sudo ufw enable lại sẽ nạp đúng bộ rule cũ. Chỉ lệnh sudo ufw reset mới xóa sạch rule (và UFW tự backup file rule trước khi xóa).
Làm sao biết UFW đang chặn kết nối nào?
Bật logging bằng sudo ufw logging on, sau đó kiểm tra file /var/log/ufw.log. Mỗi dòng log ghi rõ: thời gian, IP nguồn, IP đích, port, giao thức và hành động (BLOCK hoặc ALLOW). Dùng lệnh sudo tail -f /var/log/ufw.log để theo dõi realtime.
UFW có ảnh hưởng đến tốc độ server không?
Với số lượng rule thông thường (dưới 50 rule), UFW hầu như không ảnh hưởng đến hiệu năng. UFW chỉ là lớp giao diện – xử lý thực tế do netfilter trong kernel đảm nhận, rất nhanh. Chỉ khi bạn có hàng trăm rule phức tạp hoặc server xử lý hàng triệu kết nối/giây thì mới cần tối ưu rule chain.
Tổng kết
Cài đặt và cấu hình UFW không phức tạp – nhưng sai thứ tự thì trả giá bằng việc mất quyền truy cập server. Ba nguyên tắc cần nhớ: luôn allow SSH trước khi enable, đặt default policy deny incoming trước khi mở port, và test mọi thay đổi khi còn đang giữ kết nối SSH hiện tại.
Nếu bạn đang cần một VPS Ubuntu sạch với quyền root để thực hành cấu hình firewall, hoặc cần Cloud Server cho hạ tầng nhiều dịch vụ – xem các gói VPS tại InterData hoặc các gói Cloud Server để bắt đầu ngay. Ghé Canh Me trước khi chốt để không bỏ lỡ deal đang chạy.
Nội dung mang tính tham khảo. Các lệnh và cấu hình UFW có thể khác nhau tùy phiên bản Ubuntu (20.04/22.04/24.04), phiên bản UFW, môi trường thực tế và các phần mềm đang chạy trên server (đặc biệt Docker). Nên kiểm thử trên môi trường staging, sao lưu dữ liệu và đảm bảo có phương án truy cập dự phòng (VNC/console) trước khi áp dụng cho production.
