Fail2ban là một daemon hệ thống để bảo vệ máy chủ khỏi các cuộc tấn công đăng nhập độc hại và tấn công bằng vũ lực. Fail2ban là một khuôn khổ IPS (Phần mềm phòng chống xâm nhập) mã nguồn mở được viết bằng Python và có thể cấu hình cực kỳ dễ dàng. Nó hoạt động như một dịch vụ daemon sẽ giám sát các tệp nhật ký và nhật ký SystemD và sau đó tìm kiếm bất kỳ nỗ lực xác thực nào không thành công. Khi xác thực không thành công đạt đến số X tối đa, fail2ban sẽ tự động chặn địa chỉ IP bằng phần mềm tường lửa.
Nếu bạn là chủ sở hữu VPS (Máy chủ riêng ảo) hoặc máy chủ chuyên dụng, bạn nên cân nhắc cài đặt fail2ban trên tất cả các máy chủ của mình. Nó sẽ giúp bạn bảo vệ một số dịch vụ cơ bản như SSH và FTP khỏi các cuộc tấn công bằng vũ lực độc hại. Ngoài ra, fail2ban rất tiện dụng, dễ cấu hình và linh hoạt.
Trong hướng dẫn này, bạn sẽ học cách cài đặt fail2ban trên Rocky Linux, cấu hình fail2ban bằng firewalld và bảo mật dịch vụ SSH chống lại các cuộc tấn công bằng cách dùng brute-force.
1. Chạy lệnh sau để đảm bảo gói firewalld có sẵn trên hệ thống của bạn.
Bạn sẽ nhận được đầu ra tương tự như bên dưới.
Như được thấy trên ảnh chụp màn hình, gói firewalld được liệt kê là "Gói đã cài đặt".
2. Tiếp theo, hãy khởi động dịch vụ firewalld bằng lệnh sau.
3. Bây giờ hãy bật dịch vụ firewalld để tự động chạy mỗi khi khởi động hệ thống.
Và bạn sẽ nhận được kết quả sau.
4. Sau đó, hãy kiểm tra trạng thái dịch vụ firewalld bằng lệnh bên dưới.
Và bạn sẽ nhận được kết quả sau.
Như đã thấy, dịch vụ firewalld đang hoạt động và chạy.
5. Tùy chọn, bạn có thể kiểm tra trạng thái dịch vụ firewalld bằng lệnh firewall-cmd. Firewall-cmd là giao diện chính để tương tác với firewalld. Lệnh firewall-cmd là tiện ích để quản lý các quy tắc firewalld, cho phép bạn thêm các quy tắc, xóa các quy tắc, kiểm tra trạng thái, v.v.
Thực hiện lệnh firewall-cmd bên dưới để kiểm tra trạng thái dịch vụ firewalld.
Nếu firewalld của bạn đang hoạt động, bạn sẽ nhận được kết quả là "đang chạy". Nếu không, bạn sẽ nhận được kết quả là "không chạy".
Bây giờ hãy thực hiện lệnh firewall-cmd sau để kiểm tra tất cả các quy tắc firewalld hiện đang được áp dụng.
Bạn sẽ nhận được kết quả tương tự như bên dưới.
1. Bây giờ hãy thực hiện lệnh sau để cài đặt kho lưu trữ EPEL.
Nhập "y" để cài đặt và tiếp tục.
2. Khi quá trình cài đặt hoàn tất, hãy kiểm tra tất cả các kho lưu trữ khả dụng trên hệ thống của bạn bằng lệnh sau.
Bây giờ bạn sẽ thấy đầu ra như bên dưới.
Như đã thấy, kho lưu trữ EPEL khả dụng và đang hoạt động trên hệ thống. Bây giờ, chúng ta hãy tiếp tục cài đặt fail2ban.
Gõ "y" để xác nhận cài đặt và nhấn "Enter" để tiếp tục.
Giống như trên dòng lệnh, bạn cũng đang cài đặt gói bổ sung "fail2ban-firewalld". Nó sẽ cho phép fail2ban thao tác các quy tắc tường lửa.
2. Khi quá trình cài đặt hoàn tất, hãy khởi động dịch vụ fail2ban bằng lệnh bên dưới.
3. Sau đó, hãy chạy lệnh sau để cho phép dịch vụ fail2ban tự động khởi động mỗi khi hệ thống khởi động.
4. Bây giờ, hãy kiểm tra trạng thái dịch vụ fail2ban bằng cách chạy lệnh sau.
Và bạn sẽ thấy dịch vụ fail2ban đang hoạt động và chạy với cấu hình mặc định như bên dưới.
1. Sao chép cấu hình fail2ban mặc định từ "jail.conf" sang "jail.local" bằng lệnh sau.
2. Tiếp theo, chỉnh sửa cấu hình fail2ban bằng lệnh nano editor bên dưới.
Trong phần "[DEFAULT]", hãy kiểm tra các cấu hình bên dưới.
Các tùy chọn bạn phải biết.
3. Cấu hình fail2ban mặc định là sử dụng iptables để chặn. Để cho phép fail2ban sử dụng firewalld để chặn, hãy sao chép cấu hình "00-firewalld.conf" vào "00-firewalld.local" bằng lệnh bên dưới.
Cấu hình "00-firewalld.conf" này là một phần của gói "fail2ban-firewalld".
4. Bây giờ hãy khởi động lại dịch vụ fail2ban để áp dụng các cấu hình mới bằng lệnh bên dưới.
1. Tạo cấu hình jail mới cho dịch vụ SSH bằng lệnh sau.
Bây giờ hãy dán cấu hình sau.
Như đã thấy, cấu hình ghi đè tùy chọn "bantime" và "maxretry" cho jail "sshd".
Nhấn "Ctrl+x" và nhập "Y" rồi nhấn "Enter" để lưu cấu hình jail mới.
2. Để áp dụng cấu hình mới, hãy khởi động lại dịch vụ fail2ban bằng lệnh sau.
3. Sau đó, hãy kiểm tra trạng thái fail2ban bằng lệnh fail2ban-client. fail2ban-client là một dòng lệnh để quản lý máy chủ điều khiển fail2ban.
Bây giờ hãy thực hiện lệnh fail2ban-client bên dưới để xác minh cấu hình jail.
Và bạn sẽ nhận được kết quả tương tự như bên dưới.
Fail2ban đang chạy với 1 jail đang hoạt động có tên là "sshd".
Để kiểm tra cấu hình của jail cụ thể, bạn có thể sử dụng tùy chọn "get" theo sau là tên jail, sau đó là các tùy chọn bạn muốn kiểm tra.
Kiểm tra cấu hình "maxretry" cho jail "sshd" bằng lệnh bên dưới.
Và bạn sẽ thấy kết quả là "3", khớp với giá trị trên cấu hình "sshd.local".
Tiếp theo, hãy kiểm tra hành động cấm mặc định cho jail "sshd" bằng lệnh bên dưới.
Và bạn sẽ thấy đầu ra là "firewallcmd-rich-rules", khớp với cấu hình toàn cục fail2ban tại "00-firewalld.local".
Với mục đích thử nghiệm, bên dưới là ảnh chụp màn hình sau khi cố gắng kết nối với máy chủ SSH bằng mật khẩu không chính xác. Sau khi đạt đến maxretry "3" lần, kết nối sẽ bị máy chủ hủy.
1. Thực hiện lệnh sau để kiểm tra trạng thái của jail cụ thể (ví dụ này là sshd jail).
Và bạn sẽ nhận được đầu ra tương tự như sau.
Như đã thấy, sshd jail có 1 địa chỉ IP bị cấm. Nếu bạn đang sử dụng VPS trực tiếp hoặc máy chủ chuyên dụng, bạn sẽ thấy nhiều địa chỉ IP hơn.
2. fail2ban sẽ tạo các rich-rule firewalld để chặn các địa chỉ IP. firewalld rich-rules là khả năng lọc nâng cao trên firewalld.
Thực hiện lệnh sau để hiển thị firewalld rich-rules được tạo bởi fail2ban.
Và bạn sẽ nhận được đầu ra tương tự như bên dưới.
1. Thực hiện lệnh fail2ban-client bên dưới để bỏ cấm địa chỉ IP "192.168.1.10".
Và địa chỉ IP sẽ được xóa khỏi danh sách bị cấm trên fail2ban.
Tiếp theo, chạy lệnh sau để đảm bảo địa chỉ IP được xóa khỏi cơ sở dữ liệu fail2ban (ví dụ này là jail sshd).
Và bạn sẽ nhận được địa chỉ IP được xóa khỏi phần "Banned IP List".
Nếu bạn là chủ sở hữu VPS (Máy chủ riêng ảo) hoặc máy chủ chuyên dụng, bạn nên cân nhắc cài đặt fail2ban trên tất cả các máy chủ của mình. Nó sẽ giúp bạn bảo vệ một số dịch vụ cơ bản như SSH và FTP khỏi các cuộc tấn công bằng vũ lực độc hại. Ngoài ra, fail2ban rất tiện dụng, dễ cấu hình và linh hoạt.
Trong hướng dẫn này, bạn sẽ học cách cài đặt fail2ban trên Rocky Linux, cấu hình fail2ban bằng firewalld và bảo mật dịch vụ SSH chống lại các cuộc tấn công bằng cách dùng brute-force.
Điều kiện tiên quyết
- Người dùng có quyền root sudo.
Thiết lập Firewalld
Firewalld là phần mềm tường lửa mặc định trên Rocky Linux. Nó được tự động cài đặt trong quá trình cài đặt Rocky Linux của bạn, nhưng nó không được kích hoạt theo mặc định.1. Chạy lệnh sau để đảm bảo gói firewalld có sẵn trên hệ thống của bạn.
Mã:
sudo dnf info firewalld
Như được thấy trên ảnh chụp màn hình, gói firewalld được liệt kê là "Gói đã cài đặt".
2. Tiếp theo, hãy khởi động dịch vụ firewalld bằng lệnh sau.
Mã:
sudo systemctl start firewalld
Mã:
sudo systemctl enable firewalld
Mã:
Tạo liên kết tượng trưng /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Tạo liên kết tượng trưng /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
Mã:
sudo systemctl status firewalld
Như đã thấy, dịch vụ firewalld đang hoạt động và chạy.
5. Tùy chọn, bạn có thể kiểm tra trạng thái dịch vụ firewalld bằng lệnh firewall-cmd. Firewall-cmd là giao diện chính để tương tác với firewalld. Lệnh firewall-cmd là tiện ích để quản lý các quy tắc firewalld, cho phép bạn thêm các quy tắc, xóa các quy tắc, kiểm tra trạng thái, v.v.
Thực hiện lệnh firewall-cmd bên dưới để kiểm tra trạng thái dịch vụ firewalld.
Mã:
sudo firewall-cmd --state
Bây giờ hãy thực hiện lệnh firewall-cmd sau để kiểm tra tất cả các quy tắc firewalld hiện đang được áp dụng.
Mã:
sudo firewall-cmd --list-all
Thêm kho lưu trữ EPEL vào Rocky Linux
Trước khi cài đặt fail2ban, bạn phải thêm kho lưu trữ EPEL (Gói bổ sung cho Enterprise Linux) vào hệ thống của mình.1. Bây giờ hãy thực hiện lệnh sau để cài đặt kho lưu trữ EPEL.
Mã:
sudo dnf install epel-release
2. Khi quá trình cài đặt hoàn tất, hãy kiểm tra tất cả các kho lưu trữ khả dụng trên hệ thống của bạn bằng lệnh sau.
Mã:
sudo dnf repolist
Như đã thấy, kho lưu trữ EPEL khả dụng và đang hoạt động trên hệ thống. Bây giờ, chúng ta hãy tiếp tục cài đặt fail2ban.
Cài đặt Fail2ban trên Rocky Linux
1. Để cài đặt fail2ban, hãy thực hiện lệnh bên dưới.
Mã:
sudo dnf install fail2ban fail2ban-firewalld
Giống như trên dòng lệnh, bạn cũng đang cài đặt gói bổ sung "fail2ban-firewalld". Nó sẽ cho phép fail2ban thao tác các quy tắc tường lửa.
2. Khi quá trình cài đặt hoàn tất, hãy khởi động dịch vụ fail2ban bằng lệnh bên dưới.
Mã:
sudo systemctl start fail2ban
Mã:
sudo systemctl enable fail2ban
Mã:
sudo systemctl status fail2ban
Cấu hình Fail2ban
Bây giờ bạn sẽ cấu hình fail2ban và cho phép fail2ban hoạt động với tường lửa.1. Sao chép cấu hình fail2ban mặc định từ "jail.conf" sang "jail.local" bằng lệnh sau.
Mã:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Mã:
sudo nano /etc/fail2ban/jail.local
Mã:
[DEFAULT]
....
bantime = 1h
findtime = 1h
maxretry = 5
- [DEFAULT] = Tất cả các cấu hình trong phần này sẽ áp dụng như một cấu hình mặc định toàn cục.
- bantime = Số lần x địa chỉ IP sẽ bị cấm. Nó hỗ trợ định dạng là ngày, phút hoặc giờ. Đối với ví dụ này, máy chủ hoặc địa chỉ IP sẽ bị cấm trong "1 giờ" sau khi xác thực tối đa không thành công.
- findtime = Địa chỉ IP sẽ bị cấm nếu xác thực tối đa không thành công trong "findtime" cuối cùng.
- maxretry = Khi địa chỉ IP có X lần đăng nhập maxrtry không thành công, thì IP sẽ bị cấm. Đối với ví dụ này, địa chỉ IP sẽ bị cấm sau 5 lần xác thực không thành công.
3. Cấu hình fail2ban mặc định là sử dụng iptables để chặn. Để cho phép fail2ban sử dụng firewalld để chặn, hãy sao chép cấu hình "00-firewalld.conf" vào "00-firewalld.local" bằng lệnh bên dưới.
Mã:
sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
4. Bây giờ hãy khởi động lại dịch vụ fail2ban để áp dụng các cấu hình mới bằng lệnh bên dưới.
Mã:
sudo systemctl restart fail2ban
Bảo vệ dịch vụ SSH bằng Fail2ban
Theo mặc định, fail2ban không chặn bất kỳ địa chỉ IP nào, cho đến khi bạn bật cấu hình jail cho mọi dịch vụ bạn muốn bảo vệ. Ngoài ra, cấu hình jail sẽ ghi đè lên cấu hình mặc định trên "jail.local". Cấu hình jail sẽ có sẵn tại thư mục "/etc/fail2ban/jail.d".1. Tạo cấu hình jail mới cho dịch vụ SSH bằng lệnh sau.
Mã:
sudo nano /etc/fail2ban/jail.d/sshd.local
Mã:
[sshd]
enabled = true
# Ghi đè cấu hình toàn cục mặc định
# cho sshd jail cụ thể
bantime = 1d
maxretry = 3
Nhấn "Ctrl+x" và nhập "Y" rồi nhấn "Enter" để lưu cấu hình jail mới.
2. Để áp dụng cấu hình mới, hãy khởi động lại dịch vụ fail2ban bằng lệnh sau.
Mã:
sudo systemctl restart fail2ban
Bây giờ hãy thực hiện lệnh fail2ban-client bên dưới để xác minh cấu hình jail.
Mã:
sudo fail2ban-client status
Fail2ban đang chạy với 1 jail đang hoạt động có tên là "sshd".
Để kiểm tra cấu hình của jail cụ thể, bạn có thể sử dụng tùy chọn "get" theo sau là tên jail, sau đó là các tùy chọn bạn muốn kiểm tra.
Kiểm tra cấu hình "maxretry" cho jail "sshd" bằng lệnh bên dưới.
Mã:
sudo fail2ban-client get sshd maxretry
Tiếp theo, hãy kiểm tra hành động cấm mặc định cho jail "sshd" bằng lệnh bên dưới.
Mã:
sudo fail2ban-client get sshd actions
Xác minh cài đặt Fail2ban và Firewalld
Để xác minh cài đặt fail2ban, hãy kiểm tra trạng thái đầy đủ của jail (đối với hướng dẫn này là sshd jail) và kiểm tra các quy tắc firewalld do fail2ban tạo ra.Với mục đích thử nghiệm, bên dưới là ảnh chụp màn hình sau khi cố gắng kết nối với máy chủ SSH bằng mật khẩu không chính xác. Sau khi đạt đến maxretry "3" lần, kết nối sẽ bị máy chủ hủy.
1. Thực hiện lệnh sau để kiểm tra trạng thái của jail cụ thể (ví dụ này là sshd jail).
Mã:
sudo fail2ban-client status sshd
Như đã thấy, sshd jail có 1 địa chỉ IP bị cấm. Nếu bạn đang sử dụng VPS trực tiếp hoặc máy chủ chuyên dụng, bạn sẽ thấy nhiều địa chỉ IP hơn.
2. fail2ban sẽ tạo các rich-rule firewalld để chặn các địa chỉ IP. firewalld rich-rules là khả năng lọc nâng cao trên firewalld.
Thực hiện lệnh sau để hiển thị firewalld rich-rules được tạo bởi fail2ban.
Mã:
firewall-cmd --list-rich-rules
Địa chỉ IP Uban trên Fail2ban
Để bỏ lệnh cấm địa chỉ IP khỏi fail2ban, bạn có thể sử dụng lệnh fail2ban-client.1. Thực hiện lệnh fail2ban-client bên dưới để bỏ cấm địa chỉ IP "192.168.1.10".
Mã:
sudo fail2ban-client unban 192.168.1.10
Tiếp theo, chạy lệnh sau để đảm bảo địa chỉ IP được xóa khỏi cơ sở dữ liệu fail2ban (ví dụ này là jail sshd).
Mã:
sudo fail2ban-client status sshd