Cấu hình UFW và Fail2ban để secure Ubuntu server chống brute-force
Một VPS Ubuntu mới tinh thường “lên mạng” chỉ vài phút đã bị scan. Bot tự động thử SSH, dò port, spam login, brute-force user phổ biến như root, admin, ubuntu. Nếu server mở SSH công khai, không có firewall, không có cơ chế chặn IP lỗi nhiều lần → rủi ro rất thật.
Tin tốt: chỉ với UFW + Fail2ban, bạn đã có lớp phòng thủ nền tảng:
– UFW → kiểm soát port nào được phép truy cập.
– Fail2ban → đọc log, phát hiện login fail lặp lại, ban IP tự động.
Bài này → cấu hình thực chiến cho Ubuntu server, ưu tiên SSH, web, chống brute-force.
1. Chuẩn bị trước khi bật firewall
Trước khi cấu hình UFW, cần tránh tự khóa mình khỏi server.
Kiểm tra SSH hiện tại
whoami
hostname -I
sudo systemctl status ssh
Kiểm tra port SSH:
sudo ss -tulpn | grep ssh
Thường là:
0.0.0.0:22
Nếu bạn dùng cloud/VPS có firewall riêng như AWS Security Group, GCP Firewall, Cloudflare, Hetzner Firewall → đảm bảo rule ngoài cũng cho phép SSH.
Khuyến nghị bảo mật SSH
Mở file:
sudo nano /etc/ssh/sshd_config
Nên chỉnh:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
Nếu chưa cấu hình SSH key, đừng tắt password ngay. Test key trước:
ssh-copy-id user@server_ip
ssh user@server_ip
Sau khi chỉnh SSH:
sudo sshd -t
sudo systemctl reload ssh
sshd -t không lỗi → reload an toàn.
2. UFW là gì? Vì sao cần?
UFW = Uncomplicated Firewall, frontend đơn giản cho iptables/nftables. Mục tiêu: deny mặc định, chỉ mở port cần thiết.
Mô hình chuẩn:
– Deny inbound mặc định.
– Allow outbound mặc định.
– Chỉ mở SSH, HTTP, HTTPS hoặc app cụ thể.
– Hạn chế SSH theo IP nếu có thể.
Nếu app có login URL, nên log failed login rõ IP. Sau đó viết custom filter Fail2ban. Với WordPress, có thể chặn thêm XML-RPC ở Nginx:
location = /xmlrpc.php {
deny all;
}
10. Checklist hardening thực tế
UFW
– default deny incoming
– SSH allowed trước khi enable.
– Chỉ mở port cần: 22, 80, 443.
– SSH giới hạn theo IP nếu có thể.
– Xóa rule thừa:
sudo ufw status numbered
sudo ufw delete <number>
SSH
– Tắt root login.
– Dùng SSH key.
– Tắt password nếu chắc chắn key hoạt động.
– Giảm MaxAuthTries.
– Không dùng user dễ đoán.
Fail2ban
– Bật jail sshd.
– Dùng backend = systemd.
– maxretry thấp cho SSH.
– bantime.increment nếu server bị scan nhiều.
– Theo dõi log định kỳ.
11. Lỗi thường gặp
Tự khóa SSH
Nguyên nhân: bật UFW trước khi allow SSH.
Cách tránh:
sudo ufw allow OpenSSH
sudo ufw enable
Nếu đã khóa → dùng console từ nhà cung cấp VPS.
Fail2ban không ban
Kiểm tra:
sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -n 100
Nguyên nhân hay gặp:
– Sai backend.
– Sai logpath.
– SSH dùng port custom nhưng jail vẫn port = ssh.
– Log không ghi failed attempt.
Ban nhầm IP admin
Unban:
sudo fail2ban-client set sshd unbanip YOUR_IP
Thêm whitelist:
ignoreip = 127.0.0.1/8 ::1 YOUR_IP
Restart:
sudo systemctl restart fail2ban
Kết luận
UFW và Fail2ban không biến Ubuntu server thành pháo đài tuyệt đối, nhưng là nền móng bắt buộc. UFW giảm bề mặt tấn công bằng cách chỉ mở port cần thiết. Fail2ban giảm brute-force bằng cách ban IP sai nhiều lần. Kết hợp thêm SSH key, tắt root login, tắt password login, whitelist IP quản trị → server an toàn hơn rõ rệt.
Sau đó bật jail sshd, theo dõi log, test ban/unban. Bảo mật tốt không phải một lần rồi quên; là quy trình: cấu hình đúng, kiểm tra định kỳ, cập nhật đều, giảm quyền, giảm port, giảm cơ hội cho attacker.