Fail2Ban là một tiện ích phân tích nhật ký quét các tệp nhật ký của nhiều quy trình khác nhau và cấm các địa chỉ IP thực hiện quá nhiều lỗi mật khẩu. Khi xác định được một nỗ lực đăng nhập, Fail2Ban sẽ thêm một quy tắc mới vào iptables để chặn địa chỉ IP của kẻ tấn công, tạm thời hoặc vĩnh viễn. Nó cũng có thể cảnh báo bạn qua email về điều tương tự.
Nó chủ yếu tập trung vào việc phát hiện xâm nhập thông qua SSH nhưng có thể được cấu hình để hoạt động với bất kỳ dịch vụ nào sử dụng tệp nhật ký.
Fedora 33 đi kèm Fail2Ban.
Chạy lệnh sau để cài đặt Fail2Ban trên cả Fedora 33 và CentOS 8.
Sau khi cài đặt, chúng ta cần kích hoạt dịch vụ.
Tiếp theo, hãy khởi động dịch vụ fail2ban.
Bây giờ bạn có thể kiểm tra trạng thái của dịch vụ để xem nó có hoạt động không chính xác.
Thay vào đó, tất cả các cấu hình nên được thực hiện trong một tệp mới mà chúng ta sẽ gọi là
Cấu hình được áp dụng theo thứ tự sau:
Dán mã sau vào đó.
Nhấn Ctrl + X để đóng trình chỉnh sửa và nhấn Y khi được nhắc lưu tệp. Thao tác này đặt
Khởi động lại Fail2ban để triển khai các thay đổi mới.
Chúng ta có thể xác nhận các thiết lập mới được áp dụng bằng tiện ích
Chúng ta cũng có thể lấy trạng thái chi tiết của từng jail cụ thể theo cách sau.
Nếu bạn muốn đưa danh sách trắng IP chỉ dành cho một số nhà tù nhất định, bạn có thể thực hiện thông qua
Thay thế
Để tùy chỉnh các thiết lập này, hãy dán các dòng sau vào tệp
Để nhận email, hãy thêm mã sau vào tệp
Trong trường hợp này, chúng tôi đang sử dụng biến được xác định trước
Chúng ta cũng có thể thêm phần có tên
Cũng có các Nginx jail khác nhưng chúng không được cấu hình sẵn với Fail2Ban. Chúng cần được tạo thủ công và hầu hết chúng có thể dựa trên Apache mà Fail2Ban cung cấp.
Giá trị bộ lọc trong tệp cấu hình là tham chiếu đến tệp nằm trong thư mục
Bạn có thể xem loại bộ lọc nào khả dụng bằng cách kiểm tra thư mục.
Bạn sẽ thấy 2 tệp nhật ký cho Nginx trong đó;
Các tệp cấu hình này sử dụng Biểu thức chính quy (regex) để phân tích tệp nhật ký. Chúng được gọi là Failregex. Bạn có thể tùy chỉnh hoặc tạo bộ lọc mới bằng cách viết biểu thức chính quy của riêng bạn. Chúng tôi sẽ không đề cập sâu về các biểu thức chính quy này vì chúng nằm ngoài phạm vi của hướng dẫn này.
Để biết thêm chi tiết, bạn có thể sử dụng lệnh
Bạn cũng có thể sử dụng
Bạn cũng có thể truy vấn tệp nhật ký của Fail2ban.
Bạn có thể liệt kê các quy tắc hiện tại được cấu hình cho iptables.
Bạn cũng có thể liệt kê các quy tắc iptables theo định dạng phản ánh các lệnh cần thiết để kích hoạt các quy tắc đó.
Nó chủ yếu tập trung vào việc phát hiện xâm nhập thông qua SSH nhưng có thể được cấu hình để hoạt động với bất kỳ dịch vụ nào sử dụng tệp nhật ký.
Điều kiện tiên quyết
-
Máy chủ chạy Fedora 33 hoặc CentOS 8 với người dùng không phải root có quyền sudo.
-
Cài đặt trình soạn thảo Nano vì đó là những gì chúng ta sẽ sử dụng.
Mã:$ sudo dnf install nano -y
Cài đặt Fail2Ban
Để cài đặt Fail2Ban trên CentOS 8, trước tiên bạn cần cài đặt kho lưu trữ EPEL Yum.
Mã:
$ sudo dnf install epel-release
Chạy lệnh sau để cài đặt Fail2Ban trên cả Fedora 33 và CentOS 8.
Mã:
$ sudo dnf install fail2ban
Mã:
$ sudo systemctl enable fail2ban
Mã:
$ sudo systemctl start fail2ban
Mã:
$ sudo systemctl status fail2ban? fail2ban.service - Dịch vụ Fail2Ban Đã tải: đã tải (/usr/lib/systemd/system/fail2ban.service; đã bật; cài đặt trước của nhà cung cấp: đã tắt) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ Hai 2020-11-02 21:15:59 UTC; 5 giây trước Tài liệu: man:fail2ban(1) Quy trình: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (mã=thoát, trạng thái=0/THÀNH CÔNG) PID chính: 19032 (f2b/máy chủ) Nhiệm vụ: 3 (giới hạn: 1125) Bộ nhớ: 11,0M CPU: 96ms CGroup: /system.slice/fail2ban.service ??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start02-11 21:15:59 howtoforge-tutorial systemd[1]: Đang khởi động Dịch vụ Fail2Ban...02-11 21:15:59 howtoforge-tutorial systemd[1]: Đã khởi động Dịch vụ Fail2Ban.Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
Cấu hình Fail2Ban
Dịch vụ Fail2Ban lưu trữ các tệp cấu hình của nó trong thư mục/etc/fail2ban
. Bạn sẽ tìm thấy một tệp jail.conf
trong đó. Tệp này thường bị ghi đè trong quá trình nâng cấp gói nên không nên chỉnh sửa.Thay vào đó, tất cả các cấu hình nên được thực hiện trong một tệp mới mà chúng ta sẽ gọi là
jail.local
. Cài đặt trong 2 tệp này có thể được ghi đè thêm thông qua các tệp từ thư mục /etc/fail2ban/jail.d/
.Cấu hình được áp dụng theo thứ tự sau:
-
/etc/fail2ban/jail.conf
-
etc/fail2ban/jail.d/*.conf
, Theo thứ tự bảng chữ cái -
/etc/fail2ban/jail.local
-
/etc/fail2ban/jail.d/*.local
, Theo thứ tự bảng chữ cái
jail.conf
chứa phần [DEFAULT]
theo sau là các phần cho từng dịch vụ. Bất kỳ phần nào trong số này đều có thể được ghi đè bằng cách định nghĩa chúng trong các tệp .local
.Cấu hình jail.local
Chúng ta sẽ tạo một tệpjail.local
mới.
Mã:
$ sudo nano /etc/fail2ban/jail.local
Mã:
[MẶC ĐỊNH]# Cấm máy chủ trong một giờ:bantime = 3600# Ghi đè backend=auto trong /etc/fail2ban/jail.confbackend = systemd[sshd]enabled = true
bantime
mặc định mới cho tất cả các dịch vụ, thay đổi phần phụ trợ thành systemd
và kích hoạt jail `sshd
.Khởi động lại Fail2ban để triển khai các thay đổi mới.
Mã:
$ sudo systemctl restart fail2ban
fail2ban-client
.
Mã:
$ sudo fail2ban-client statusStatus|- Số lượng jail: 1`- Danh sách Jail: sshd
Mã:
$ sudo fail2ban-client status sshdTrạng thái của jail: sshd|- Bộ lọc| |- Hiện tại không thành công: 0| |- Tổng số lần không thành công: 0| `- Nhật ký khớp: _SYSTEMD_UNIT=sshd.service + _COMM=sshd`- Hành động |- Hiện tại bị cấm: 0 |- Tổng số lần bị cấm: 0 `- Danh sách IP bị cấm:
Cài đặt khác
jail.conf
cung cấp nhiều cài đặt hơn có thể tùy chỉnh bằng tệp /jail.local
. Tiếp theo, chúng ta sẽ xem qua một số thiết lập.Danh sách trắng IP
Bạn có thể đưa danh sách trắng/bỏ qua các IP khỏi bị Fail2ban chặn bằng cách sử dụng mã sau.
Mã:
[DEFAULT]ignoreip = 127.0.0.1/8 123.45.67.89
fail2ban-client
.
Mã:
$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89
JAIL
trong lệnh trên bằng tên của nhà tù mà bạn muốn chỉnh sửa thiết lập.Thời gian cấm và số lần thử lại
Có 3 thiết lập có thể thiết lập thời gian và số lần thử lại cho một lệnh cấm.bantime
- là khoảng thời gian tính bằng giây mà một IP bị cấm. Để thiết lập lệnh cấm vĩnh viễn, hãy đặt giá trị này thành số âm. Giá trị mặc định là 10 phút hoặc 600 giây.findtime
- là khoảng thời gian giữa các lần thử đăng nhập trước khi lệnh cấm được thiết lập. Giá trị này luôn là một số giây. Ví dụ: nếu Fail2ban được thiết lập để cấm một IP sau 5 lần đăng nhập không thành công, thì 5 lần thử đó phải diễn ra trong giới hạn 10 phút bantime
đã đặt.maxretry
- là số lần thử lại từ một địa chỉ IP duy nhất trước khi lệnh cấm được áp dụng. Giá trị mặc định là 3.Để tùy chỉnh các thiết lập này, hãy dán các dòng sau vào tệp
\etc\fail2ban\jail.local
trong phần [DEFAULT]
.
Mã:
bantime = 3600findtime = 300maxretry = 4
Cảnh báo qua email
Để gửi cảnh báo qua email, trước tiên bạn sẽ cần cài đặt Mail Transfer Agent (MTA). Với mục đích của chúng tôi, chúng tôi sẽ cài đặtsendmail
.
Mã:
$ sudo dnf install sendmail
\etc\fail2ban\jail.local
trong phần [DEFAULT]
.
Mã:
destemail = [emailprotected]sendername = Fail2Banmta = sendmailaction = %(action_mw)s
destemail
đề cập đến ID email đích là ID mà bạn muốn nhận email, sendername
đề cập đến tên của người gửi nên chúng tôi sử dụng Fail2Ban cho mục đích này. mta
đề cập đến Đại lý chuyển thư đang được sử dụng, ở đây là sendmail
. Nếu bạn đang sử dụng Postfix
, hãy sử dụng giá trị mail
cho biến mta
.action
đề cập đến hành động mặc định được thực hiện sau khi phát hiện ra sự xâm nhập. Giá trị mặc định là %(action_)s
chỉ cấm người dùng. %(action_mw)s
sẽ cấm và gửi email có báo cáo Whois; trong khi %(action_mwl)s
sẽ cấm và gửi email có báo cáo Whois cùng với thông tin từ các tệp nhật ký có liên quan. Điều này cũng có thể được thay đổi trên cơ sở cụ thể của nhà tù.Cài đặt cho từng nhà tù
Như chúng ta đã biết, phần[DEFAULT]
áp dụng cho tất cả các nhà tù, đã đến lúc xem xét một số nhà tù cụ thể và cài đặt của chúng.Nhà tù SSHD
Chúng tôi đã định nghĩa[sshd]
trước đó trong tệp jail.local
của mình. Chúng tôi có thể tùy chỉnh thêm một chút bằng mã sau.
Mã:
[sshd]enabled = trueport = sshlogpath = %(ssh_log)s
ssh
cho cổng là cổng SSH mặc định. Nếu bạn đang sử dụng cổng SSH khác, bạn nên thay đổi. logpath
đề cập đến vị trí của tệp nhật ký cần theo dõi. %(ssh_log)s
sử dụng giá trị được xác định trong tệp cấu hình chuẩn của Fail2ban (/etc/fail2ban/paths-common.conf
).Nginx Jail
Nginx có một số Jail có thể được sử dụng trong Fail2Ban. Ví dụ, nếu một phần được bảo vệ bằng mật khẩu của trang web của bạn bị tấn công nhiều lần, bạn có thể sử dụng phần[nginx-http-auth]
trong tệp jail.local
cho mục đích đó.
Mã:
[nginx-http-auth]enabled = true
[nginx-botsearch]
để dừng các yêu cầu đến các thư mục hoặc vị trí không tồn tại.
Mã:
[nginx-badbots]enabled = true
Bộ lọc Fail2Ban và Failregex
Có một thiết lập khác trong cấu hình Fail2Ban được gọi là bộ lọc. Bộ lọc quyết định xem một dòng trong tệp nhật ký có biểu thị xác thực không thành công hay không.Giá trị bộ lọc trong tệp cấu hình là tham chiếu đến tệp nằm trong thư mục
/etc/fail2ban/filter.d
với phần mở rộng .conf
đã bị xóa.Bạn có thể xem loại bộ lọc nào khả dụng bằng cách kiểm tra thư mục.
Mã:
$ ls /etc/fail2ban/filter.d
nginx-badbots.conf
và nginx-http-auth.conf
.Các tệp cấu hình này sử dụng Biểu thức chính quy (regex) để phân tích tệp nhật ký. Chúng được gọi là Failregex. Bạn có thể tùy chỉnh hoặc tạo bộ lọc mới bằng cách viết biểu thức chính quy của riêng bạn. Chúng tôi sẽ không đề cập sâu về các biểu thức chính quy này vì chúng nằm ngoài phạm vi của hướng dẫn này.
Giám sát Nhật ký và Tường lửa Fail2Ban
Bạn có thể kiểm tra trạng thái của Fail2Ban bằng cách sử dụngsystemctl
như đã nêu trước đó.
Mã:
$ sudo systemctl status fail2ban
journalctl
.
Mã:
$ sudo journalctl -b -u fail2ban
fail2ban-client
để truy vấn trạng thái của fail2ban-server
hoặc một jail riêng lẻ.
Mã:
$ sudo fail2ban-client status$ sudo fail2ban-client status jail_name
Mã:
$ sudo tail -F /var/log/fail2ban.log
Mã:
$ sudo iptables -L
Mã:
$ sudo iptables -S