Để 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. 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.

Mục lục

  1. Giới thiệu
  2. Cài đặt và cấu hình
  3. Giám sát cấu hình firewall và nhật ký Fail2ban
  4. Giám sát SSH login
  5. 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!