Skip to content
VDS · Bảo mật

Fail2ban chống brute force mật khẩu

Cách cài đặt và cấu hình Fail2ban: chặn brute force SSH và biểu mẫu web, đưa địa chỉ của bạn vào danh sách trắng, kiểm tra hoạt động và tự bỏ chặn.

Cập nhật 23 tháng 8, 2026

Fail2ban đọc log, đếm số lần đăng nhập thất bại từ một địa chỉ và tạm thời chặn nó bằng một quy tắc tường lửa. Nó không thay thế đăng nhập bằng khóa, nhưng loại bỏ phần lớn lưu lượng brute-force chạy nền và giảm tải cho log của bạn.

Cài đặt và cấu hình cơ bản

apt install -y fail2ban

Hãy dùng file riêng của bạn, /etc/fail2ban/jail.local — các chỉnh sửa vào jail.conf sẽ bị ghi đè khi cập nhật:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.5
banaction = ufw

[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 24h
systemctl enable --now fail2ban
fail2ban-client status
fail2ban-client status sshd

Điền địa chỉ nhà hoặc văn phòng của bạn vào ignoreip — đây là bảo hiểm chống lại việc tự khóa chính mình. Nếu địa chỉ của bạn thay đổi, console trong bảng điều khiển tại /hosting/vds/m/<id> vẫn là lưới an toàn: nó hoạt động bất kể mạng và quy tắc.

banaction phải khớp với tường lửa của bạn: ufw cho ufw, nftables-multiport cho nftables.

Kiểm tra kết quả ở đâu

fail2ban-client status sshd
tail -f /var/log/fail2ban.log
journalctl -u fail2ban -n 50

Trạng thái hiển thị số lần thử thất bại và danh sách các địa chỉ bị chặn. Với một địa chỉ công khai, con số vài trăm mỗi ngày là bình thường, không phải dấu hiệu của một cuộc tấn công có chủ đích.

Bỏ chặn một địa chỉ (kể cả của chính bạn):

fail2ban-client set sshd unbanip 203.0.113.5

Bảo vệ ngoài SSH

Fail2ban có thể làm việc với bất kỳ log nào thể hiện các lần thử thất bại.

[nginx-http-auth]
enabled = true

[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log

[postfix-sasl]
enabled = true

Với ứng dụng của riêng bạn, bạn sẽ cần một filter — một file trong /etc/fail2ban/filter.d/ chứa biểu thức chính quy trong đó địa chỉ được đánh dấu là <HOST>:

[Definition]
failregex = ^.*login failed.*ip=<HOST>.*$
ignoreregex =

Kiểm tra biểu thức với log thật:

fail2ban-regex /var/log/myapp.log /etc/fail2ban/filter.d/myapp.conf

Lệnh này cho biết có bao nhiêu dòng khớp. Không khớp dòng nào nghĩa là quy tắc sai — và một lớp bảo vệ âm thầm thất bại còn tệ hơn là không có gì.

Những lỗi thường gặp

LỗiHậu quảCách khắc phục
Chỉnh sửa jail.confMất khi cập nhậtGhi vào jail.local
Địa chỉ của bạn không có trong ignoreipMột ngày nào đó bạn sẽ tự khóa mìnhThêm vào, hoặc kết nối qua console trong bảng điều khiển
banaction không khớp với tường lửaLệnh chặn không được áp dụngĐồng bộ với ufw hoặc nftables
Filter không khớp định dạng logIm lặng thay vì bảo vệKiểm tra bằng fail2ban-regex
Dịch vụ không đọc được log systemdTrạng thái trốngĐặt backend = systemd

Hãy thử thật: cố tình nhập sai mật khẩu đủ số lần cần thiết từ một địa chỉ bên ngoài và xác nhận nó nằm trong danh sách bị chặn. Một fail2ban chưa được cấu hình tạo cảm giác an toàn giả tạo.

Hoàn thiện thêm bằng cách giới hạn tốc độ kết nối ngay trong tường lửa — ufw limit 22/tcp.