Hướng dẫn cấu hình UFW firewall cơ bản trên Ubuntu VPS

SSH vào VPS Ubuntu mới, việc đầu tiên cần làm là kích hoạt firewall. Không chỉ mở port SSH, bạn còn cần chặn tất cả các cổng khác trừ khi cần thiết. UFW (Uncomplicated Firewall) là công cụ lý tưởng cho việc này, dùng câu lệnh ngắn, không cần hiểu sâu iptables. Bài này hướng dẫn bạn từ cài đặt, kích hoạt, mở port HTTP/HTTPS, xóa rule sai, đến bật logging và kiểm tra trạng thái, tất cả chạy được ngay trên VPS Ubuntu 24.04 LTS.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 LTS (hoặc 22.04/20.04), bạn có thể dùng VPS Linux full root với IPv4 riêng tại Việt Nam.
- Quyền sudo hoặc root.
- Kết nối SSH đã hoạt động, nếu mất kết nối do firewall sai, bạn vẫn truy cập được qua console VPS.
UFW là gì và khi nào cần dùng?
UFW là frontend cho iptables, được thiết kế để đơn giản hóa việc quản lý firewall. Thay vì viết các chuỗi rule dài dòng bằng iptables, bạn chỉ cần vài lệnh: ufw allow 80, ufw deny 23. UFW hoạt động dựa trên policy deny incoming, allow outgoing mặc định sau khi kích hoạt. Bạn dùng UFW khi muốn kiểm soát lưu lượng vào VPS: chỉ mở các port dịch vụ (SSH, HTTP, HTTPS, MySQL...) và chặn tất cả port khác. Điều này đặc biệt quan trọng khi VPS của bạn có IPv4 public (như các gói thuê VPS NVMe cấu hình cao), nếu không có firewall, các cổng dịch vụ như SSH (22) có thể bị quét và tấn công brute force ngay lập tức.
Bước 1, Cài đặt UFW
Ubuntu 24.04 thường đã có UFW sẵn. Kiểm tra bằng lệnh:
sudo ufw version
Nếu chưa có, cài đặt qua apt:
sudo apt update
sudo apt install ufw -y
Verify: Lệnh trên trả về ufw 0.36.2 (hoặc phiên bản tương tự), không báo lỗi là được.
Bước 2, Mở port SSH trước khi bật firewall
Cảnh báo quan trọng: Luôn mở port SSH trước khi bật UFW, nếu không bạn sẽ mất kết nối SSH ngay lập tức. Dùng lệnh:
sudo ufw allow ssh
hoặc chỉ định port cụ thể (nếu bạn đổi SSH port khác 22):
sudo ufw allow 2222/tcp
Lệnh này thêm rule cho phép TCP vào port 2222. Giải thích: allow = cho phép; 2222/tcp = port 2222 giao thức TCP. Bạn nên dùng port SSH tùy chỉnh (không 22) để giảm tải log scan, nhưng bài này giả sử dùng port 22 mặc định.
Verify: Chạy sudo ufw status sẽ thấy:
Status: inactive
To Action From
22/tcp ALLOW Anywhere
Bước 3, Bật UFW và kiểm tra policy mặc định
Kích hoạt firewall:
sudo ufw enable
Bạn sẽ thấy thông báo "Firewall is active and enabled on system startup". UFW tự động áp dụng policy mặc định: chặn tất cả incoming, cho phép tất cả outgoing. Nếu muốn kiểm tra hoặc thay đổi policy, dùng:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Verify: sudo ufw status verbose, output hiển thị:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
Dòng Status: active là dấu hiệu firewall đã hoạt động.
Bước 4, Mở các port dịch vụ cần thiết
Dưới đây là các lệnh mở port phổ biến cho web server và dịch vụ khác:
sudo ufw allow http # port 80 TCP
sudo ufw allow https # port 443 TCP
sudo ufw allow 8080/tcp # port 8080 (nếu cần cho ứng dụng Java/Node)
sudo ufw allow 3306/tcp # MySQL/MariaDB (chỉ nên mở nếu cần remote)
Bảng tham chiếu nhanh:
| Dịch vụ | Port/Giao thức | Lệnh UFW | Ghi chú |
|---|---|---|---|
| SSH | 22/tcp | sudo ufw allow ssh | Luôn mở trước khi bật firewall |
| HTTP | 80/tcp | sudo ufw allow http | Web server (Nginx, Apache) |
| HTTPS | 443/tcp | sudo ufw allow https | Web server có SSL |
| MySQL | 3306/tcp | sudo ufw allow 3306/tcp | Chỉ mở khi cần remote DB |
Verify: sudo ufw status numbered, liệt kê tất cả rule đã thêm, đánh số thứ tự.
Bước 5, Xóa rule và tinh chỉnh
Đôi khi bạn cần xóa một rule sai. Có hai cách: xóa theo số hoặc theo nội dung.
Cách 1, Xóa theo số (dùng số từ ufw status numbered):
sudo ufw status numbered
sudo ufw delete 3 # xóa rule số 3
Cách 2, Xóa theo nội dung:
sudo ufw delete allow 8080/tcp # xóa rule cho phép port 8080
Lệnh delete sẽ xóa rule khớp chính xác. Nếu bạn dùng delete 3 mà không xác nhận được số đúng, UFW sẽ báo lỗi.
Verify: Chạy lại sudo ufw status, rule không còn xuất hiện.
Bước 6, Bật logging và kiểm tra log
Logging giúp bạn phát hiện các kết nối bị chặn (thường là scan port, brute force). Bật logging mức "low" (mặc định):
sudo ufw logging low
Có thể chọn mức: off, low, medium, high. Mức medium ghi cả các gói tin bị chặn (thường dùng khi debug).
Xem log:
sudo tail -f /var/log/ufw.log
Output mẫu khi có gói tin bị chặn:
Feb 15 10:34:22 vps-ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... SRC=192.0.2.1 DST=... LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=54321 PROTO=TCP SPT=54321 DPT=22 WINDOW=... RES=0x00 SYN URGP=0
Dòng [UFW BLOCK] cho biết một kết nối bị chặn. Địa chỉ SRC=192.0.2.1 là IP nguồn, DPT=22 là port đích. Nếu thấy nhiều kết nối từ cùng IP, đó là dấu hiệu brute force, bạn có thể dùng fail2ban để tự động chặn.
Verify: Thử truy cập từ máy ngoài vào một port chưa mở (ví dụ port 25), kiểm tra log trong vòng 1-2 phút sẽ thấy dòng [UFW BLOCK].
Xử lý lỗi thường gặp
Lỗi 1: Mất kết nối SSH sau khi bật UFW
Nguyên nhân: Bạn quên mở port SSH trước khi chạy ufw enable hoặc mở sai port. Cách khắc phục: Đăng nhập qua console VPS (từ web hosting provider), xóa toàn bộ rule và bật lại từ đầu:
sudo ufw disable
sudo ufw status numbered # xem danh sách rule
sudo ufw delete 1 # xóa từng rule nếu cần
sudo ufw enable
Hoặc reset UFW về mặc định:
sudo ufw --force reset
Sau đó làm lại từ bước 2.
Lỗi 2: Rule không hoạt động (port vẫn đóng)
Kiểm tra firewall khác (như iptables, nftables) có đang chạy không:
sudo iptables -L -n
sudo nft list ruleset
Nếu iptables có rule khác, hãy flush nó:
sudo iptables -F
sudo ip6tables -F
Lỗi 3: Logging không ghi file
Kiểm tra rsyslog đang chạy:
sudo systemctl status rsyslog
sudo grep ufw /etc/rsyslog.d/*.conf # kiểm tra config logging
Nếu thiếu, thêm dòng :msg,contains,"[UFW" -/var/log/ufw.log vào file config rsyslog và restart.
Kết luận
UFW là cách nhanh nhất để bảo vệ VPS Ubuntu khỏi các cuộc tấn công mạng từ bên ngoài. Với vài lệnh cơ bản: ufw allow, ufw deny, ufw delete, bạn đã kiểm soát được toàn bộ port ra vào. Quan trọng nhất: luôn mở SSH trước khi bật firewall. Đối với các tác vụ nâng cao (rate limit, allow từ subnet cụ thể), bạn có thể tham khảo thêm tài liệu man ufw. Nếu bạn đang dùng một VPS Linux full root với IPv4 riêng, việc cấu hình UFW là bước đầu tiên không thể bỏ qua để tạo nền tảng bảo mật cho hệ thống.
UFW có làm chậm VPS không?
UFW là iptables frontend, sau khi rule được nạp vào kernel, overhead gần như bằng 0. Nó không ảnh hưởng đến hiệu năng CPU hay băng thông của VPS. Bạn có thể yên tâm dùng trên cả các gói VPS cấu hình thấp.
Sao tôi thấy port 22 vẫn mở sau khi xóa rule?
Nếu bạn dùng sudo ufw delete allow ssh nhưng port vẫn mở, có thể do rule SSH được thêm từ profile mặc định. Hãy dùng sudo ufw status numbered để xem số rule và xóa đúng. Ngoài ra, firewall cổng (trên host) cũng có thể đang cho phép nếu VPS của bạn dùng NAT.
Có cần dùng UFW nếu đã dùng firewall cloud (Cloudflare, host firewall)?
Cần. Firewall cloud chỉ bảo vệ layer 3/4 trước khi vào VPS, nhưng nếu có lỗi config hoặc tấn công từ bên trong mạng, UFW vẫn là lớp bảo vệ cuối. Nên luôn bật UFW dù đã có firewall cloud.
UFW có chặn được DDoS không?
UFW không có cơ chế rate limit hay chặn DDoS. Nó chỉ chặn/mở port theo rule tĩnh. Để chặn DDoS, bạn cần dùng công cụ khác như fail2ban, iptables module connlimit, hoặc dịch vụ chống DDoS chuyên dụng. UFW vẫn cần thiết để giảm thiểu tấn công layer 4 cơ bản.
Lỡ xóa nhầm rule SSH, làm sao vào lại VPS?
Dùng console VPS từ web hosting provider (thường có tùy chọn "Console" hoặc "VNC"). Đăng nhập và chạy sudo ufw disable để tắt hoàn toàn firewall, sau đó thêm lại rule SSH và bật lại UFW.


