Mục lục
- Giới thiệu
- Cài đặt và cấu hình
- Giám sát cấu hình firewall và nhật ký Fail2ban
- Giám sát SSH login
- Kết luận
1. Giới thiệu
Fail2Ban là một dịch vụ quét các tệp nhật ký trong thời gian thực và tìm kiếm các nỗ lực đăng nhập mạnh mẽ. Nếu nó tìm thấy nhiều lần đăng nhập thất bại từ một IP duy nhất, nó sẽ chặn người xem bằng cách sửa đổi iptables hoặc firewalld quy tắc. Fail2Ban được sử dụng để bảo mật dịch vụ SSH nhưng chúng tôi có thể bảo mật nhiều dịch vụ bằng Fail2Ban.
2. Cài đặt và cấu hình
Cài đặt Fail2ban
- Trước khi cài đặt bất kỳ gói nào trên hệ thống của bạn, bạn nên cập nhật hệ thống và kho lưu trữ, ta thực hiện lệnh sau:
yum -y update
- Bạn sẽ cần cài đặt kho lưu trữ EPEL trong hệ thống của mình, vì gói Fail2Ban không có sẵn trên kho lưu trữ YUM mặc định.
yum -y install epel-release
- Cài đặt Fail2Ban bằng lệnh sau.
yum -y install fail2ban
- Sau khi cài đặt, bạn có thể start Fail2Ban bằng câu lệnh:
systemctl start fail2ban
- Để bật Fail2Ban tự động khởi động khi khởi động, hãy chạy lệnh sau.
systemctl enable fail2ban
- Để kiểm tra trạng thái dịch vụ Fail2Ban, bạn có thể chạy lệnh sau.
systemctl status fail2ban
Cấu hình
Cấu hình Fail2ban
Sau khi cài đặt xong, bạn mở file cấu hình của Fail2Ban lên sẽ thấy một số thông số như sau:
vi /etc/fail2ban/jail.conf
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1
# "bantime" is the number of seconds that a host is banned.
bantime = 600
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
Trong đó:
- ignoreip: không block những địa chỉ này, thường địa chỉ IP ở VN là địa chỉ động, nên chúng ta không sử dụng được option này.
- bantime: khoảng thời gian (giây) block IP
- findtime: khoảng thời gian (giây) một IP phải login thành công
- maxretry: số lần login false tối đa
Cấu hình Fail2ban cho SSH
Tạo file cấu hình
vi /etc/fail2ban/jail.local
[sshd]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/secure
maxretry = 5
bantime = 3600
Trong đó:
- enabled: kích hoạt bảo vệ
- filter: giữ mặc định để sử dụng file cấu hình /etc/fail2ban/filter.d/sshd.conf
- action: fail2ban sẽ ban địa chỉ IP nếu match filter /etc/fail2ban/action.d/iptables.conf
- logpath: đường dẫn file log fail2ban
- maxretry: số lần login false tối đa
- bantime: thời gian ban IP 3600 giây = 1 giờ, bạn có thể chỉnh nếu muốn.
Kiểm tra rulues của fail2ban trên IPtables
iptables -L
Kết quả:
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-SSH tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain f2b-SSH (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
3. Giám sát cấu hình firewall và nhật ký Fail2ban
Đầu tiên cần kiểm tra trạng thái của dịch vụ bằng câu lệnh sau:
systemctl status fail2ban
Nếu có lỗi, bạn có thể khắc phục sự cố bằng cách kiểm tra nhật ký cho đơn vị fail2ban kể từ lần khởi động cuối cùng:
sudo journalctl -b -u fail2ban
Theo dõi nhật ký của Fail2ban để biết bản ghi các hành động gần đây:
sudo tail -F /var/log/fail2ban.log
4. Giám sát SSH login
Bạn có thể sử dụng lệnh sau để biết được VPS/Server đã từng bị tấn công SSH chưa:
cat /var/log/secure | grep 'Failed password' | sort | uniq -c
Kết quả thường sẽ là như bên dưới, đã từng có rất nhiều đợt tấn công:
Để xem IP đã bị banned bởi Fail2Ban bạn sử dụng lệnh:
fail2ban-client status sshd
Output trả về sẽ có dạng như thế này:
Để xóa IP khỏi danh sách banned, bạn sử dụng lệnh sau :
fail2ban-client set sshd unbanip IPADDRESS
5. Kết luận
Như vậy bạn đã có thể 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!
Leave a Reply