Hầu hết các máy chủ Linux đều cung cấp đăng nhập SSH qua Cổng 22 cho mục đích quản trị từ xa. Cổng này là một cổng nổi tiếng, do đó, nó thường bị tấn công bằng cách dùng brute force. Fail2ban là một phần mềm quét các tệp nhật ký để tìm các nỗ lực đăng nhập bằng brute force theo thời gian thực và cấm những kẻ tấn công bằng firewalld hoặc iptables. Fail2ban nhận ra các nỗ lực truy cập không mong muốn hoặc vi phạm bảo mật vào máy chủ trong khung thời gian do quản trị viên thiết lập và chặn các địa chỉ IP cho thấy dấu hiệu của các cuộc tấn công bằng brute force hoặc tấn công từ điển. Chương trình này hoạt động ở chế độ nền và liên tục quét các tệp nhật ký để tìm các mẫu đăng nhập bất thường và các nỗ lực vi phạm bảo mật.
Hướng dẫn này trình bày cách cài đặt và cấu hình Fail2Ban với firewalld trên CentOS 7.
Các lệnh sau phải được thực thi sau khi chuyển sang người dùng root.
Nếu bạn đã cài đặt SELinux, hãy cập nhật các chính sách SELinux:
Tạo một bản sao của tệp jail.conf và lưu nó với tên jail.local:
Mở tệp jail.local để chỉnh sửa trong Nano bằng lệnh sau.
Mã tệp có thể bao gồm nhiều dòng mã thực thi để ngăn chặn lệnh cấm đối với một hoặc nhiều địa chỉ IP, đặt thời gian cấm, v.v. Một tệp cấu hình jail thông thường chứa các dòng sau.
Ignoreip được sử dụng để thiết lập danh sách các IP sẽ không bị cấm. Danh sách các địa chỉ IP phải được phân cách bằng dấu cách. Tham số này được sử dụng để thiết lập địa chỉ IP cá nhân của bạn (nếu bạn truy cập máy chủ từ một IP cố định).
Tham số Bantime được sử dụng để thiết lập khoảng thời gian tính bằng giây mà máy chủ cần bị cấm.
Findtime là tham số được sử dụng để kiểm tra xem máy chủ có phải bị cấm hay không. Khi máy chủ tạo ra maxrety trong lần tìm kiếm cuối cùng của nó, nó sẽ bị cấm.
Maxretry là tham số được sử dụng để đặt giới hạn cho số lần thử lại của máy chủ, khi vượt quá giới hạn này, máy chủ sẽ bị cấm.
Thêm các dòng mã sau vào tệp trên.
Tham số enabled được đặt thành true, để để cung cấp bảo vệ, để hủy kích hoạt bảo vệ, nó được đặt thành false. Tham số bộ lọc kiểm tra tệp cấu hình sshd, nằm trong đường dẫn /etc/fail2ban/filter.d/sshd.conf.
Tham số action được sử dụng để lấy địa chỉ IP cần bị cấm bằng bộ lọc có sẵn từ /etc/fail2ban/action.d/firewallcmd-ipset.conf.
Tham số Port có thể được thay đổi thành giá trị mới như port=1212, như trường hợp này. Khi sử dụng cổng 22, không cần phải thay đổi tham số này.
Logpath cung cấp đường dẫn nơi tệp nhật ký được lưu trữ. Tệp nhật ký này được Fail2Ban quét.
Maxretry được sử dụng để đặt giới hạn tối đa cho các mục nhập đăng nhập không thành công.
Tham số Bantime được sử dụng để đặt khoảng thời gian tính bằng giây mà máy chủ cần bị cấm.
Thực hiện các dòng lệnh sau để chạy phần mềm Fail2Ban bảo vệ trên máy chủ.
Thực hiện lệnh trên sẽ nhận được danh sách các lần nhập mật khẩu root không thành công từ nhiều địa chỉ IP khác nhau. Định dạng của kết quả sẽ tương tự như định dạng hiển thị bên dưới:
Kết quả sẽ tương tự như sau:
Hướng dẫn này trình bày cách cài đặt và cấu hình Fail2Ban với firewalld trên CentOS 7.
Cài đặt Fail2Ban
Để cài đặt Fail2Ban trên CentOS 7, trước tiên chúng ta sẽ phải cài đặt kho lưu trữ EPEL (Gói bổ sung cho Enterprise Linux). EPEL chứa các gói bổ sung cho tất cả các phiên bản CentOS, một trong những gói bổ sung này là Fail2Ban.Các lệnh sau phải được thực thi sau khi chuyển sang người dùng root.
Mã:
yum install epel-release
Mã:
yum install fail2ban fail2ban-systemd
Mã:
yum update -y selinux-policy*
Cấu hình cài đặt cho Fail2Ban
Sau khi cài đặt, chúng ta sẽ phải cấu hình và tùy chỉnh phần mềm bằng tệp cấu hình jail.local. Tệp jail.local ghi đè lên tệp jail.conf và được sử dụng để bảo vệ bản cập nhật cấu hình tùy chỉnh của bạn.Tạo một bản sao của tệp jail.conf và lưu nó với tên jail.local:
Mã:
cp -pf/etc/fail2ban/jail.conf/etc/fail2ban/jail.local
Mã:
nano /etc/fail2ban/jail.local
Mã:
[MẶC ĐỊNH]
#
# CÁC TÙY CHỌN KHÁC
#
# "ignoreip" có thể là địa chỉ IP, mặt nạ CIDR hoặc máy chủ DNS. Fail2ban sẽ không
# cấm một máy chủ trùng với một địa chỉ trong danh sách này. Có thể
# định nghĩa một số địa chỉ bằng cách sử dụng dấu cách phân cách.
ignoreip = 127.0.0.1/8
# Lệnh bên ngoài sẽ lấy các đối số được gắn thẻ để bỏ qua, ví dụ: ,
# và trả về true nếu IP bị bỏ qua. Nếu không thì là False.
#
# ignorecommand = /path/to/command
ignorecommand =
# "bantime" là số giây mà một máy chủ bị cấm.
bantime = 600
# Một máy chủ bị cấm nếu nó đã tạo ra "maxretry" trong "findtime"
# giây cuối cùng.
findtime = 600
# "maxretry" là số lần lỗi trước khi máy chủ bị cấm.
maxretry = 5
Tham số Bantime được sử dụng để thiết lập khoảng thời gian tính bằng giây mà máy chủ cần bị cấm.
Findtime là tham số được sử dụng để kiểm tra xem máy chủ có phải bị cấm hay không. Khi máy chủ tạo ra maxrety trong lần tìm kiếm cuối cùng của nó, nó sẽ bị cấm.
Maxretry là tham số được sử dụng để đặt giới hạn cho số lần thử lại của máy chủ, khi vượt quá giới hạn này, máy chủ sẽ bị cấm.
Thêm tệp jail để bảo vệ SSH.
Tạo tệp mới bằng trình chỉnh sửa Nano
Mã:
nano /etc/fail2ban/jail.d/sshd.local
Mã:
[sshd]
enabled = true
port = ssh
#action = firewallcmd-ipset
logpath = %(sshd_log)s
maxretry = 5
bantime = 86400
Tham số action được sử dụng để lấy địa chỉ IP cần bị cấm bằng bộ lọc có sẵn từ /etc/fail2ban/action.d/firewallcmd-ipset.conf.
Tham số Port có thể được thay đổi thành giá trị mới như port=1212, như trường hợp này. Khi sử dụng cổng 22, không cần phải thay đổi tham số này.
Logpath cung cấp đường dẫn nơi tệp nhật ký được lưu trữ. Tệp nhật ký này được Fail2Ban quét.
Maxretry được sử dụng để đặt giới hạn tối đa cho các mục nhập đăng nhập không thành công.
Tham số Bantime được sử dụng để đặt khoảng thời gian tính bằng giây mà máy chủ cần bị cấm.
Chạy dịch vụ Fail2Ban
Khi bạn chưa chạy Tường lửa CentOS, hãy khởi động nó:
Mã:
systemctl enablefirewalld
systemctl start firewalld
Mã:
systemctl enable fail2ban
systemctl start fail2ban
Theo dõi các mục nhập đăng nhập không thành công
Lệnh sau được sử dụng để kiểm tra xem có bất kỳ nỗ lực nào không thành công khi đăng nhập vào máy chủ qua ssh hay không port.
Mã:
cat /var/log/secure | grep 'Failed password'
Mã:
4/4 17:05:12 htf sshd[4287]: Mật khẩu không hợp lệ cho root từ 108.61.157.25 cổng 23121 ssh2
4/4 17:05:15 htf sshd[3154]: Mật khẩu không hợp lệ cho root từ 108.61.157.25 cổng 14486 ssh2
4/4 17:05:16 htf sshd[3154]: Mật khẩu không hợp lệ cho root từ 108.61.157.25 cổng 24157 ssh2
4/4 17:05:18 htf sshd[3154]: Mật khẩu không hợp lệ cho root từ 108.61.157.25 cổng 24157 ssh2
Kiểm tra IP bị cấm bởi Fail2Ban
Lệnh sau được sử dụng để lấy danh sách các địa chỉ IP bị cấm được nhận dạng là mối đe dọa tấn công bằng vũ lực.
Mã:
iptables -L -n
Kiểm tra Trạng thái Fal2Ban
Sử dụng lệnh sau để kiểm tra trạng thái của các nhà tù Fail2Ban:
Mã:
fail2ban-client status
Mã:
[root@htf ]# fail2ban-client status
Status
|- Số lượng nhà tù: 1
`- Danh sách nhà tù: sshd
Gỡ lệnh cấm một địa chỉ IP
Để xóa một địa chỉ IP khỏi danh sách bị cấm, tham số IPADDRESS được đặt thành IP phù hợp cần bỏ cấm. Tên "sshd" là tên của jail, trong trường hợp này là jail "sshd" mà chúng ta đã cấu hình ở trên. Lệnh sau thực hiện công việc.
Mã:
fail2ban-client set sshd unbanipIPADDRESS