Hướng Dẫn Cài Fail2Ban Trên VPS Ubuntu Chống Brute-Force

Hướng dẫn cài Fail2Ban trên VPS Ubuntu để giảm brute-force SSH: cấu hình jail.local, bantime, findtime, maxretry, kiểm tra IP bị ban, unban và các lưu ý khi dùng cùng UFW.

VPS Ubuntu có SSH mở ra Internet thường xuyên nhận các lần đăng nhập sai từ bot quét tự động. Fail2Ban là công cụ đọc log xác thực, nhận diện nhiều lần đăng nhập thất bại trong một khoảng thời gian và kích hoạt hành động chặn IP theo cấu hình. Đây không phải tường lửa thay thế UFW, cũng không giúp VPS “miễn nhiễm” tấn công; giá trị của Fail2Ban nằm ở việc tự động phản ứng với hành vi lặp lại như brute-force. Bài viết này hướng dẫn cài Fail2Ban trên Ubuntu, bật jail cho OpenSSH, cấu hình `bantime`, `findtime`, `maxretry`, kiểm tra trạng thái jail, ban/unban thủ công và tránh những lỗi phổ biến như tự khóa IP quản trị hoặc sửa trực tiếp `jail.conf` khiến cấu hình bị ghi đè khi cập nhật.

Điểm quan trọng Hãy lựa chọn dịch vụ dựa trên nhu cầu sử dụng thực tế và theo dõi tài nguyên thường xuyên để có hiệu quả tốt nhất.

Một VPS Ubuntu có SSH public thường bị quét liên tục bởi bot Internet. Bạn có thể thấy hàng loạt lần đăng nhập sai trong log dù chưa từng chia sẻ IP VPS ở đâu. Đây là hiện tượng phổ biến với máy chủ public và là lý do nên kết hợp nhiều lớp bảo vệ: SSH key, UFW, cập nhật hệ thống và một công cụ phản ứng tự động như Fail2Ban.

Fail2Ban đọc log dịch vụ, so khớp các lần xác thực thất bại và áp dụng hành động chặn IP nếu vượt ngưỡng. Với SSH, đây là cách hữu ích để giảm các đợt brute-force lặp đi lặp lại.

Nếu bạn chưa quen terminal, có thể đọc trước bài Các lệnh Linux cơ bản trên VPS Ubuntu. Nếu đang tìm VPS Linux để thực hành hoặc chạy ứng dụng 24/7, có thể tham khảo VPS tại HUONG CLOUD.

1. Fail2Ban là gì?

Fail2Ban là framework phát hiện hành vi bất thường từ log và kích hoạt action tương ứng. Với SSH, nó thường theo dõi log đăng nhập, đếm số lần thất bại từ một IP và chặn IP đó trong một khoảng thời gian.

Ba khái niệm quan trọng:

  • filter: nhận diện dòng log nào được coi là thất bại;
  • jail: ghép filter với ngưỡng và action;
  • action: hành động khi IP vi phạm, thường là cập nhật firewall rule.

Fail2Ban không thay thế mật khẩu mạnh, SSH key hoặc firewall. Nó là lớp bổ sung.

2. Fail2Ban khác UFW thế nào?

UFW là giao diện quản lý firewall của Ubuntu. Bạn dùng UFW để quyết định port nào được mở hoặc chặn.

Fail2Ban lại hoạt động dựa trên hành vi. Ví dụ:

  • UFW cho phép TCP 22 để bạn SSH;
  • Fail2Ban theo dõi các lần login sai;
  • nếu một IP sai quá nhiều lần, Fail2Ban tạm chặn IP đó.

Vì vậy, mô hình thường là UFW kiểm soát bề mặt mạng, Fail2Ban phản ứng với brute-force.

3. Kiểm tra SSH trước khi cài Fail2Ban

Kiểm tra service:

sudo systemctl status ssh

Kiểm tra port đang listen:

sudo ss -tulnp | grep ssh

Nếu SSH dùng port khác 22, hãy ghi lại để dùng trong jail.

4. Cập nhật Ubuntu

sudo apt update
sudo apt upgrade -y

Không cần reboot nếu hệ thống không yêu cầu, nhưng nên kiểm tra:

if [ -f /var/run/reboot-required ]; then cat /var/run/reboot-required; fi

5. Cài Fail2Ban

Trên Ubuntu:

sudo apt install fail2ban -y

Kiểm tra service:

sudo systemctl status fail2ban

Bật tự khởi động:

sudo systemctl enable --now fail2ban

6. Không nên sửa trực tiếp jail.conf

Fail2Ban khuyến nghị giữ nguyên các file .conf do package cung cấp và đặt tùy chỉnh vào .local hoặc jail.d/*.local.

Lý do: file .conf có thể thay đổi khi package được cập nhật.

Cách gọn hơn là tạo file riêng:

sudo nano /etc/fail2ban/jail.d/sshd.local

7. Cấu hình jail SSH cơ bản

Ví dụ:

[sshd]
enabled = true
port = ssh
backend = systemd
bantime = 1h
findtime = 10m
maxretry = 5

Ý nghĩa:

  • enabled = true: bật jail;
  • port = ssh: dùng service/port SSH;
  • backend = systemd: đọc log qua systemd journal;
  • bantime = 1h: ban trong 1 giờ;
  • findtime = 10m: xét lỗi trong 10 phút;
  • maxretry = 5: quá 5 lần lỗi trong khoảng đó thì ban.

Đây là ví dụ khởi điểm, không phải thông số bắt buộc cho mọi VPS.

8. Nếu SSH dùng port custom

Ví dụ SSH chạy port 2222:

[sshd]
enabled = true
port = 2222
backend = systemd
bantime = 1h
findtime = 10m
maxretry = 5

Đừng để port = ssh nếu service thực tế không còn dùng port mặc định mà cấu hình firewall/action cần port custom.

9. Kiểm tra cấu hình trước khi restart

Dùng:

sudo fail2ban-client -t

Nếu không có lỗi nghiêm trọng, restart:

sudo systemctl restart fail2ban

Kiểm tra:

sudo systemctl status fail2ban

10. Xem jail đang hoạt động

sudo fail2ban-client status

Bạn sẽ thấy danh sách jail đang bật, ví dụ sshd.

Xem chi tiết:

sudo fail2ban-client status sshd

Thông tin thường gồm:

  • số lần thất bại hiện tại;
  • tổng số lần thất bại;
  • số IP đang bị ban;
  • danh sách IP bị ban.

11. Kiểm tra log Fail2Ban

Tùy cấu hình package, bạn có thể xem qua journal:

sudo journalctl -u fail2ban

Theo dõi realtime:

sudo journalctl -u fail2ban -f

Nếu có file log riêng:

sudo tail -f /var/log/fail2ban.log

12. Kiểm tra log SSH

Với Ubuntu dùng systemd:

sudo journalctl -u ssh

Lọc các lần xác thực thất bại:

sudo journalctl -u ssh | grep -i 'failed\|invalid'

Tên service/log có thể khác tùy phiên bản và cấu hình hệ thống.

13. Ban một IP thủ công

sudo fail2ban-client set sshd banip 203.0.113.50

Kiểm tra:

sudo fail2ban-client status sshd

14. Unban một IP

sudo fail2ban-client set sshd unbanip 203.0.113.50

Đây là lệnh cần biết nếu vô tình ban nhầm IP quản trị.

15. Tránh tự khóa IP của mình

Bạn có thể cấu hình ignoreip cho IP quản trị ổn định.

Ví dụ:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.10

Cảnh báo

Chỉ whitelist IP mà bạn kiểm soát. Nếu IP Internet ở nhà thay đổi động, whitelist một địa chỉ cũ có thể không giúp và whitelist CIDR quá rộng có thể giảm bảo mật.

16. bantime nên đặt bao lâu?

Không có một giá trị đúng cho mọi VPS.

Một cấu hình quá ngắn có thể khiến bot quay lại liên tục. Quá dài có thể gây khó nếu người dùng hợp lệ nhập sai password nhiều lần.

Có thể bắt đầu từ vài chục phút đến vài giờ rồi quan sát log.

Fail2Ban hỗ trợ cách viết thời gian như:

bantime = 1h
findtime = 10m

17. maxretry nên đặt bao nhiêu?

Nếu chỉ một quản trị viên dùng SSH key, bạn có thể đặt nghiêm hơn.

Nếu có nhiều người dùng password authentication hợp lệ, đặt quá thấp có thể tạo nhiều false positive.

Điều quan trọng là:

  • biết ai đang đăng nhập;
  • ưu tiên SSH key;
  • theo dõi log;
  • chọn ngưỡng phù hợp workload thực tế.

18. Fail2Ban có bảo vệ được khi dùng SSH key không?

Có thể vẫn hữu ích vì bot vẫn thử username/password hoặc các cơ chế khác được log lại.

Tuy nhiên, biện pháp mạnh hơn với SSH là dùng public key authentication và tắt password login sau khi đã kiểm tra key hoạt động.

Fail2Ban không nên là lý do để giữ mật khẩu yếu.

19. Nên tắt password SSH khi nào?

Chỉ sau khi bạn đã:

  1. tạo SSH key;
  2. copy public key lên VPS;
  3. mở một terminal mới và đăng nhập bằng key thành công;
  4. có console dự phòng từ nhà cung cấp nếu có;
  5. kiểm tra user có quyền sudo nếu cần.

Sau đó mới cân nhắc cấu hình PasswordAuthentication no.

Không chỉnh SSH theo “một lệnh copy-paste” nếu chưa có đường truy cập dự phòng.

20. Fail2Ban có chặn được DDoS không?

Không nên coi Fail2Ban là giải pháp DDoS.

Fail2Ban phản ứng sau khi log ghi nhận hành vi và phù hợp với brute-force hoặc pattern lặp lại ở quy mô nhất định.

DDoS volumetric có thể làm đầy đường truyền trước khi traffic tới ứng dụng. Khi đó cần giải pháp upstream/CDN/anti-DDoS của hạ tầng.

21. Fail2Ban có chặn được mọi bot không?

Không.

Bot phân tán nhiều IP, tấn công chậm hoặc dùng credential hợp lệ có thể không bị phát hiện bởi jail đơn giản.

Bảo mật VPS phải theo mô hình nhiều lớp:

  • cập nhật hệ thống;
  • SSH key;
  • UFW/firewall;
  • Fail2Ban;
  • phân quyền tối thiểu;
  • monitoring;
  • backup.

22. Cấu hình recidive có nên dùng không?

Fail2Ban có thể có jail để xử lý IP tái phạm nhiều lần, nhưng không nên bật máy móc.

Nếu dùng, hãy hiểu nguồn log, cách ban và nguy cơ false positive.

Với VPS nhỏ, bắt đầu chỉ bằng jail sshd thường dễ kiểm soát hơn.

23. Fail2Ban và IPv6

Nếu VPS có IPv6 public, hãy nhớ rằng bề mặt tấn công không chỉ nằm ở IPv4.

Kiểm tra:

ip -6 addr

và firewall:

sudo ufw status verbose

Cấu hình Fail2Ban/firewall hiện đại có thể xử lý IPv6 tùy action/backend, nhưng hãy xác minh trên hệ thống của bạn.

24. Tình huống thực tế: log có hàng nghìn lần login sai

Giả sử VPS mới tạo, SSH public và sau vài ngày bạn thấy log có rất nhiều username lạ.

Quy trình hợp lý:

  1. đảm bảo password admin mạnh;
  2. dùng SSH key;
  3. bật UFW chỉ cho port cần thiết;
  4. cài Fail2Ban;
  5. bật jail sshd;
  6. xem fail2ban-client status sshd;
  7. theo dõi log vài ngày;
  8. điều chỉnh ngưỡng nếu false positive.

Không nên chỉ đổi port SSH rồi cho rằng máy đã an toàn.

25. Có nên đổi port SSH?

Đổi port có thể giảm một phần noise từ bot chỉ quét port 22, nhưng không phải lớp bảo mật chính.

Nếu đổi port, bạn vẫn cần:

  • key authentication;
  • firewall;
  • Fail2Ban;
  • cập nhật hệ thống;
  • log monitoring.

26. Kiểm tra UFW cùng Fail2Ban

sudo ufw status numbered

Nếu bạn đang thay đổi SSH port, đảm bảo UFW cho phép port mới trước khi restart SSH.

Ví dụ:

sudo ufw allow 2222/tcp

Sau khi test thành công mới cân nhắc xóa rule cũ.

27. Sau update Fail2Ban cần làm gì?

Vì bạn đặt tùy chỉnh ở .local, việc update package ít có nguy cơ ghi đè cấu hình hơn.

Sau update:

sudo fail2ban-client -t
sudo systemctl restart fail2ban
sudo fail2ban-client status

Nếu jail không lên, xem journal ngay.

28. Backup cấu hình Fail2Ban

Các file nên lưu:

/etc/fail2ban/jail.d/
/etc/fail2ban/jail.local
/etc/fail2ban/filter.d/*.local

Nếu bạn chỉ có một file sshd.local, backup file đó là đủ cho cấu hình cơ bản.

Không cần backup các file .conf mặc định vì package có thể cung cấp lại.

29. Các lỗi thường gặp

Jail sshd không xuất hiện

Kiểm tra:

sudo fail2ban-client -t
sudo fail2ban-client status
sudo journalctl -u fail2ban -n 100

Không thấy IP bị ban

Có thể chưa vượt maxretry, log pattern không match hoặc backend không đọc đúng nguồn log.

Fail2Ban không start

Thường do lỗi cú pháp .local, tên jail sai hoặc config action/filter không hợp lệ.

Tự bị ban

Dùng console của nhà cung cấp hoặc IP khác để đăng nhập rồi unbanip; sau đó xem lại ignoreip và ngưỡng.

30. Checklist Fail2Ban cho VPS Ubuntu

  • Ubuntu đã cập nhật.
  • SSH hoạt động ổn định.
  • UFW đã allow đúng port SSH.
  • Fail2Ban đã cài.
  • Jail sshd bật.
  • fail2ban-client -t không báo lỗi.
  • fail2ban-client status sshd hoạt động.
  • Đã biết lệnh unban.
  • Có console dự phòng hoặc IP quản trị an toàn.
  • SSH key được ưu tiên hơn password.

31. FAQ về Fail2Ban trên VPS Ubuntu

Fail2Ban có thay thế UFW không?

Không. UFW là firewall, Fail2Ban tự động thêm hành động chặn dựa trên log.

Có cần Fail2Ban nếu đã dùng SSH key?

Không bắt buộc, nhưng vẫn hữu ích để giảm noise và các thử xác thực lặp lại.

Có nên sửa jail.conf không?

Fail2Ban khuyến nghị đặt tùy chỉnh trong .local hoặc jail.d/*.local để tránh bị ghi đè khi update.

bantime, findtime, maxretry nên để bao nhiêu?

Không có bộ số chung. Hãy bắt đầu hợp lý và điều chỉnh theo log thực tế.

Fail2Ban có chống DDoS không?

Không phải giải pháp chống DDoS volumetric.

Làm sao unban IP?

Dùng:

sudo fail2ban-client set sshd unbanip IP_CAN_GO

Fail2Ban có hỗ trợ IPv6 không?

Có thể trong cấu hình/action hiện đại, nhưng hãy kiểm tra chính hệ thống và firewall bạn đang dùng.

Kết luận

Cài Fail2Ban trên VPS Ubuntu là một bước bảo mật hợp lý nếu SSH public ra Internet. Cách triển khai tốt là giữ cấu hình tùy chỉnh trong .local, bật jail sshd, theo dõi log và dùng Fail2Ban như lớp bổ sung cho SSH key, UFW và cập nhật hệ thống.

Đừng cố đặt ngưỡng cực thấp hoặc ban cực lâu ngay từ đầu. Hãy quan sát workload, tránh tự khóa IP quản trị và luôn có đường truy cập dự phòng khi chỉnh SSH/firewall.

Nếu bạn đang triển khai website, Docker hoặc ứng dụng trên VPS Ubuntu của HUONG CLOUD, nên hoàn thiện bảo mật SSH ngay sau bước cài hệ thống cơ bản trước khi đưa dịch vụ lên production.

Nguồn tham khảo

Kết luận

Nếu chưa chắc cấu hình hoặc loại dịch vụ nào phù hợp, hãy gửi nhu cầu thực tế để đội ngũ hỗ trợ tư vấn trước khi mua.

Chưa biết nên chọn gói nào?

Xem bảng giá VPS hoặc liên hệ đội ngũ hỗ trợ để chọn cấu hình phù hợp.

Xem bảng giá VPS →