Để quản trị máy chủ Linux, chúng ta thường sử dụng giao thức SSH với port (cổng) 22 mặc định. Đây cũng chính là lỗ hổng tin tặc có thể khai thác bằng cách sử dụng các cuộc tấn công brute force (vét cạn) để dò tìm mật khẩu truy cập vào máy chủ của bạn.
Một biện pháp có thể hạn chế vấn đề này đó là thay đổi port SSH mặc định (22) sang một port khác. Tuy nhiên, đây cũng chỉ là biện pháp tạm thời, bởi vì tin tặc có thể sử dụng một số công cụ để quét các port đang mở trên máy chủ của bạn và tiếp tục tấn công dò tìm mật khẩu.
Do đó, để giải quyết triệt để vấn đề trên, trong bài viết này, tôi sẽ hướng dẫn cách thức cài đặt và cấu hình một ứng mã nguồn mở, hoạt động nền, theo dõi log file (tập tin nhật ký) để phát hiện và chặn những địa chỉ IP đăng nhập sai mật khẩu SSH nhiều lần với một khoảng thời gian nhất định – đó là Fail2ban.
Cài đặt Fail2ban
Mặc định, Fail2ban không có sẵn trong thư viện hệ thống Linux nên bạn sẽ cài đặt bằng RPMForge repository hoặc EPEL repository
# yum install epel-release # yum install fail2ban
Cấu hình mặc định Fail2ban
Sau khi cài đặt thành công, bạn mở file cấu hình mặc định để xem và điều chỉnh một số thông số của Fail2ban.
# 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: những địa chỉ IP sẽ được ưu tiên không bị chặn bởi Fai2ban, nếu là danh sách nhiều IP, mỗi IP sẽ được phân cách nhau bằng “khoảng trắng”.
- bantime: khoảng thời gian (giây) chặn địa chỉ IP.
- findtime: khoảng thời gian (giây) một địa chỉ IP phải thực hiện đăng nhập thành công.
- maxretry: số lần tối đa mà máy chủ chấp nhận một địa chỉ IP đăng nhập thất bại.
Cấu hình mặc định trên đã được thiết lập tương đối chuẩn. Tuy nhiên, bạn cũng có thể tùy chỉnh theo nhu cầu, sau đó lưu lại file cấu hình để đến bước tiếp theo.
Cấu hình Fail2ban bảo vệ SSH
Tạo mới file cấu hình
# /etc/fail2ban/jail.local
Thêm nội dung sau vào file cấu hình:
[sshd] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] # sendmail-whois[name=SSH, dest=root, [email protected]] logpath = /var/log/secure maxretry = 3 bantime = 900
Trong đó:
- enabled: kích hoạt bảo vệ, nếu muốn tắt bạn hãy chuyển thành false
- filter: giữ mặc định để sử dụng file cấu hình /etc/fail2ban/filter.d/sshd.conf
- action: fail2ban sẽ chặn địa chỉ IP nếu khớp bộ lọc trong /etc/fail2ban/action.d/iptables.conf. Nếu bạn đã thay đổi port SSH, sửa đoạn 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 tối đa mà máy chủ chấp nhận một địa chỉ IP đăng nhập thất bại.
- bantime: khoảng thời gian (giây) chặn địa chỉ IP
Khởi động Fai2ban
Sau khi hoàn tất thiết lập các cấu hình, bạn thực hiện khởi động và kích hoạt cho Fail2ban hoạt động ở chế độ nền bằng những lệnh sau:
# chkconfig --level 23 fail2ban on # service fail2ban start
Giám sát hoạt động của Fail2ban
Bạn có thể xem lại lịch sử danh sách những phiên SSH vào máy chủ thất bại bằng lệnh sau:
# cat /var/log/secure | grep 'Failed password' | sort | uniq -c
Để xem lại IP đã bị chặn bởi Fail2ban, bạn sử dụng lệnh sau:
# fail2ban-client status sshd
Cuối cùng, để có thể xóa địa chỉ IP ra khỏi danh sách bị chặn, bạn sử dụng lệnh sau:
fail2ban-client set sshd unbanip ip-address
Trong đó: bạn thay giá trị “ip-address” bằng địa chỉ IP bạn muốn xóa khỏi danh sách bị chặn bởi Fail2ban.
Chúc bạn thực hiện thành công!
Để lại một phản hồi