Fai2ban là gì? Cách sử dụng SSH an toàn với Fail2ban
Để kết nối đến các máy chủ ảo hay muốn điều khiển từ xa một máy chủ nào đó ta thường sử dụng SSH, phương pháp này tiềm ẩn rủi ro hacker có thể dò đoán mật khẩu đăng nhập. Một biện pháp hạn chế điều này là thay đổi cổng mặc định SSH từ 22 sang cổng khác nhưng điều này không thực sự gây nhiều trở ngại cho hacker, vì hacker có thể “quét cổng đang mở” để xác định cổng rồi tiếp tục tấn công.
Khi đã tìm hiểu kỹ, Bizfly Cloud đưa ra giải pháp khá triệt để giải quyết vấn đề này là sử dụng công cụ tự động block IP khi số lần đăng nhập lỗi vào máy chủ vượt quá giới hạn - Fail2ban.
Fail2ban là gì?
Fail2ban là ứng dụng theo dõi các file log, phát hiện và ngăn chặn kết nối từ những địa chỉ IP có những dấu hiệu độc hại như đăng nhập sai mật khẩu SSH nhiều lần, sử dụng iptables firewall để block địa chỉ IP trong một thời gian nhất định.
Lưu ý: Fail2ban không khuyến khích hoạt động với các chương trình tường lửa khác như CSF vì sẽ xung đột hoạt động điều khiển tường lửa ‘iptables’.
Trên Debian và Ubuntu, có thể cài đặt Fail2ban như sau.
sudo apt update
sudo apt install fail2ban
Trên Centos:
sudo yum -y install epel-release
sudo yum -y install fail2ban
Sau khi cài đặt thành công, Fail2ban đã sẵn sàng bảo vệ SSH. Mặc định Fail2ban sẽ cho phép đăng nhập sai 6 lần trong 10 phút, sau đó nó sẽ khóa địa chỉ IP trong vòng 10 phút. Tuy nhiên, bạn có thể thay đổi chính sách này theo ý muốn.
Cấu hình Fail2ban bảo vệ SSH
Khi sử dụng Fail2ban, có 3 yếu tố quan trọng cần lưu ý:
- Filter: Chứa mã regex lọc ra các mẫu cụ thể cần nhận dạng trong log file.
- Action: định nghĩa lệnh Fail2ban thực hiện.
- Jail: bao gồm một filter và một hoặc một vài actions, ví dụ quy định các chính sách như số lần đăng nhập lỗi, thời gian ban IP…
Mặc định sau khi cài đặt Fail2ban sẽ có cấu hình:
vim /etc/fail2ban/jail.conf
Trong đó
ignoreip: không block những địa chỉ này
- bantime: khoảng thời gian (giây) bị block.
- findtime: khoảng thời gian một ip phải login thành công.
- maxretry: số lần đăng nhập lỗi.
Chúng ta sẽ cùng cấu hình tùy chỉnh Jail bảo vệ SSH như sau:
Tạo jail mới:
vi /etc/fail2ban/jail.local
có nội dung:
Trong đó:
- enabled: kích hoạt bảo vệ nếu muốn tắt ta chuyển sang false.
- filter: để mặc định để trỏ tới file cấu hình /etc/fail2ban/filter.d/sshd.conf
- action: Fail2ban sẽ ban địa chỉ IP nếu nó match filter trong tập tin /etc/fail2ban/action.d/iptables.conf. Nếu bạn đã thay đổi cổng ssh, đổi port=ssh bằng port mới, ví dụ port=2222
- logpath: đường dẫn file log Fail2ban sử dụng để theo dõi
- maxretry: số lần đăng nhập sai tối đa.
- bantime: thời gian IP bị cấm tính đơn vị giây, ví dụ ở đây là một phút.
Restart service để thay đổi được áp dụng:
sudo service fail2ban restart
Cấu hình Fail2ban khởi động cùng hệ điều hành khi reboot máy chủ:
Với Ubuntu, Debian:
update-rc.d fail2ban defaults
Với CentOS6:
chkconfig --level 23 fail2ban on
Với CenOS7:
systemctl enable fail2ban
Sử dụng câu lệnh “iptables -L” để kiểm tra xem iptables đã được update chưa.
Nếu có Chain có tên F2b-ssh là đã thành công.
Kiểm tra khả năng bảo vệ SSH của Fail2ban.
Từ một máy khác, thực hiện SSH vào máy chủ vừa cấu hình Fail2ban, nhập sai password 2 lần và kiểm tra hoạt động của Fail2ban trên máy chủ bằng câu lệnh:
fail2ban-client status sshd
Như vậy bạn đã có thể tự thực hiện cài đặt và cấu hình Fail2ban để bảo vệ SSH khỏi các cuộc tấn công Brute Force vào hệ thống VPS/Cloud Server rồi. Chúc các bạn thành công.
>> Có thể bạn quan tâm: Cấu hình bảo mật cho SSH bằng Fail2ban trên Ubuntu 22.04