Cấu hình tường lửa UFW bảo vệ VPS Ubuntu từ A-Z

SSH vào VPS mới, việc sysadmin hay quên nhất là bật tường lửa. Trên Ubuntu, cấu hình tường lửa ufw chỉ mất 5 phút nhưng quyết định phần lớn bề mặt tấn công. Bài này đi từ cài đặt, mở port, tới chống quét brute force và cách tự cứu khi lỡ khoá nhầm SSH, làm trên Ubuntu 24.04 LTS với quyền sudo.
- UFW là lớp frontend của nftables trên Ubuntu 24.04, không phải daemon riêng.
- Chỉ cần mở SSH (22), HTTP (80), HTTPS (443) cho hầu hết VPS chạy web.
- Bật UFW mà chưa
ufw allow OpenSSH= tự khoá mình ra ngoài. - Rate limit của UFW giúp chặn brute force SSH ở mức cơ bản, không thay thế fail2ban.
Yêu cầu trước khi bắt đầu
- VPS Ubuntu 24.04 LTS (áp dụng tương tự Ubuntu 22.04, Debian 12/13).
- User có quyền
sudo, đã đăng nhập được qua SSH key. - Biết IP VPS và port SSH đang dùng (mặc định 22, xem ở
/etc/ssh/sshd_config). - Nếu đang chạy web: đã biết dịch vụ nghe port nào (
ss -tlnpđể kiểm tra).
Tại sao phải siết tường lửa trên VPS Ubuntu?
VPS vừa tạo thường mở toàn bộ port ra Internet. Trong vòng vài giờ đã có bot quét port 22, 3306, 6379. Để lộ MySQL hay Redis là mất dữ liệu nhanh, còn SSH mở không rate limit thì bị brute force liên tục. UFW đóng vai trò default-deny: chỉ port bạn cho phép mới đi qua, phần còn lại drop im lặng.
Điểm UFW hợp với VPS nhỏ là cấu hình đọc được bằng mắt, rule gọn, log rõ. Với hạ tầng nhiều máy hoặc cần NAT/route phức tạp thì nên dùng thẳng nftables, nhưng đa số VPS Linux một card mạng thì UFW là đủ.
Bước 1 - Kiểm tra UFW và trạng thái port đang mở
Trước khi bật bất cứ thứ gì, phải xem hiện trạng. Ubuntu 24.04 thường đã cài sẵn UFW nhưng ở trạng thái inactive.
sudo ufw status verbose
ss -tlnp
ufw status cho biết UFW đang active hay không và các rule hiện có. ss -tlnp liệt kê mọi port TCP đang listen kèm tiến trình, đây là danh sách port bạn cần cân nhắc mở. Kết quả mong đợi: dòng đầu báo Status: inactive (nếu mới), phần ss hiện ít nhất :22.
Bước 2 - Cho phép SSH trước khi bật UFW
Đây là bước sống còn. Bật UFW mà không allow SSH trước sẽ tự đá mình ra khỏi VPS.
sudo ufw allow OpenSSH
sudo ufw status numbered
OpenSSH là profile có sẵn trong /etc/ufw/applications.d/, tự map ra port 22. Nếu bạn đã đổi port SSH (ví dụ 2222), allow đúng port đó:
sudo ufw allow 2222/tcp
Verify: ufw status numbered phải thấy rule cho phép port SSH. Kiểm tra lại port SSH thật bằng ss -tlnp | grep sshd trước khi sang bước 3. Nếu không khớp, dừng lại, sửa rule.
Bước 3 - Bật UFW và allow các port dịch vụ
Allow SSH xong mới bật. Sau đó mở dần các port theo dịch vụ thật.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
default deny incoming là chìa khoá: mọi kết nối vào không nằm trong rule đều bị chặn. enable sẽ hỏi xác nhận vì có thể cắt SSH; gõ y. Nếu đang mở phiên SSH và vẫn thấy terminal trả lời bình thường thì SSH đã được allow đúng.
Với VPS chạy web:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
sudo ufw status verbose
Verify: dòng Status: active, liệt kê đủ 22, 80, 443. Từ máy ngoài chạy curl -I http://IP-VPS và ssh user@IP-VPS để chắc còn vào được.
Bước 4 - Giới hạn port theo IP nguồn (ví dụ 3306, 5432)
Database không nên mở ra toàn Internet. Nếu có máy khác kết nối vào, giới hạn theo IP nguồn thay vì allow all.
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
sudo ufw delete allow 3306/tcp
Dòng đầu chỉ cho IP 203.0.113.10 kết nối MySQL. Dòng hai xoá rule allow-all cũ nếu bạn lỡ mở. Với PostgreSQL thay port 3306 bằng 5432; với Redis (6379) hàng đầu là không mở ra ngoài, chỉ nghe localhost.
Đây cũng là lúc bạn có thể tách public/private: cổng quản trị, dashboard panel, GitLab self-host nên có rule theo IP thay vì mở public.
Bước 5 - Rate limit SSH chống brute force
UFW có sẵn module limit để chặn IP thử quá nhiều kết nối trong 30 giây. Đây là lớp phòng thủ rẻ, đặt trước fail2ban.
sudo ufw delete allow OpenSSH
sudo ufw limit OpenSSH
sudo ufw status verbose
limit tự chặn tạm IP vượt ngưỡng 6 kết nối / 30 giây, đủ để giảm ồn ào log nhưng không thay thế được phòng thủ có phân tích. Với VPS chạy nhiều dịch vụ, cài thêm fail2ban đọc log sshd và ban hẳn IP xấu sẽ chặt hơn. Trên các gói VPS Linux của thueVPS có sẵn IPv4 riêng Việt Nam, việc siết SSH + UFW giúp log sạch hơn hẳn.
Bước 6 - Ghi log, IPv6 và kiểm tra cuối
Mặc định UFW ghi log ở mức low, ghi các gói bị chặn. Bật lên medium nếu cần điều tra tấn công.
sudo ufw logging medium
sudo tail -f /var/log/ufw.log
Nếu VPS có IPv6, UFW quản cả IPv6 nếu bật IPV6=yes trong /etc/default/ufw (mặc định trên Ubuntu 24.04). Kiểm tra rule IPv6 bằng cách thêm sudo ufw allow proto tcp from any to any port 443 và xem status hiện cả (v6).
Danh sách kiểm tra cuối:
sudo ufw status numberedthấy Status: active, đúng các port cần.- SSH từ máy ngoài vào được, không bị treo.
- Web truy cập được qua 80/443.
- Port không dùng (
ss -tlnp) không có rule allow.
Bước 7 - Xử lý khi tự khoá SSH
Lỡ bật UFW mà không allow SSH là sự cố kinh điển. Cách cứu tuỳ vào nhà cung cấp.
- Còn phiên SSH khác đang mở: dùng nó chạy
sudo ufw allow OpenSSH && sudo ufw reload. - Mất sạch SSH: vào console/VNC qua panel của nhà cung cấp (thueVPS có control panel truy cập console), đăng nhập rồi sửa rule.
- Vẫn không vào được: boot vào rescue mode hoặc mount đĩa để sửa
/etc/ufw/user.rules, hoặc request hỗ trợ qua ticket.
Mẹo phòng: giữ 1 phiên SSH thứ hai mở suốt khi chỉnh UFW, hoặc dùng at/systemd-run hẹn 5 phút tự tắt UFW nếu bạn không gõ lệnh huỷ. Cách này cứu được nhiều lần bị khoá.
Câu hỏi thường gặp
UFW có thay thế được fail2ban không?
Không. UFW rate limit chỉ giới hạn tần suất kết nối ở tầng gói, còn fail2ban đọc log sshd và ban hẳn IP có hành vi brute force. Trên VPS public nên dùng cả hai.
Bật UFW có làm chậm VPS không?
Không đáng kể. UFW chạy trên nftables ở tầng kernel, chi phí xử lý mỗi gói rất nhỏ. Vấn đề hiệu năng thường đến từ ứng dụng hoặc database, không phải tường lửa.
Có cần mở port 25 để gửi mail không?
Nếu bạn gửi mail từ VPS, nhiều nhà cung cấp chặn port 25 outbound để chống spam. Với mục đích gửi mail marketing, nên chọn đúng hạ tầng, ví dụ VPS SMTP có IP sạch và cấu hình rDNS, rồi mở port theo hướng dẫn của đơn vị.
UFW log ghi ở đâu?
Log mặc định ghi ở /var/log/ufw.log qua rsyslog. Có thể xem trực tiếp bằng sudo tail -f /var/log/ufw.log khi cần rà tấn công.
Có cần mở port nào cho Docker không?
Docker chèn rule riêng qua iptables/nftables có thể bỏ qua UFW, đây là điểm hay bị bỏ sót. Cần cấu hình thêm để UFW kiểm soát port container, đừng tin mặc định là UFW chặn hết.
ThueVPS có hỗ trợ cấu hình UFW ban đầu không?
VPS Ubuntu trên thueVPS giao full quyền root, bạn có thể cấu hình UFW theo nhu cầu. Nếu cần hạ tầng có IPv4 riêng đặt tại Việt Nam, xem các gói VPS Linux và thuê server riêng khi dự án lớn hơn.
Bài viết liên quan
- Hướng dẫn cấu hình UFW firewall cơ bản trên Ubuntu VPS
- Bảo mật SSH với fail2ban trên VPS Ubuntu và Debian
- 10 cách tăng cường bảo mật VPS Linux chống tấn công 2026
- Triển khai tường lửa và chống DDoS hiệu quả cho VPS


