Hướng dẫn bảo vệ SSH bằng Fail2Ban trên CentOS 7

6 năm trước

 

Giới thiệu

Việc kết nối với server thông qua SSH sẽ rất bảo mật, nhưng SSH daemon muốn hoạt động được thì cần có internet , thế nên sẽ dẫn tới những rủi ro tiềm ẩn và khả năng tấn công là hoàn toàn có thể xảy ra.

Tất cả các chương trình cần internet để hoạt động đều gặp phải vấn đề này, nếu bạn để ý nhật ký hoạt động của các ứng dụng này thì sẽ thường xuyên thấy các hacker luôn cố gắng đăng nhập vào một cách có hệ thống theo kiểu tấn công vét cạn.

Nhưng Fail2ban có thể khắc phục vấn đề này bằng việc đưa ra những quy chuẩn thay thế tự động firewall dựa trên số lần đăng nhập bất thành. Cho phép server phản hồi lại truy cập bất hợp pháp khi không có sự can thiệp của bạn.

 

Cài Fail2ban trên CentOS 7

Đầu tiên ta sẽ mở kho lưu trữ EPEL :

sudo yum install epel-release 

Nhấn y sau đó nhấn Enter:

yum promptTransaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y

Giờ sẽ cài gói fail2ban :

sudo yum install fail2ban 

Tiếp tục nhấn y và Enter .

Sau đó sử dụng systemctl hữu hiệu hóa chương trình fail2ban :

sudo systemctl enable fail2ban 
 

Cấu hình cài đặt cục bộ

 Fail2ban có cấu hình ở mục /etc/fail2ban , ở đây bạn sẽ tìm file  jail.conf. Để tránh tình trạng ghi đè lên các file này, ta sẽ tạo một file mới gọi là jail.local. Giá trị trong file jail.local sẽ tương ứng với giá trị trong file jail.conf.

jail.conf chứa một mục [DEFAULT] được theo dõi bởi các chương trình riêng biệt. jail.local có thể trùng giá trị với nó. Thêm vào nữa , file ở mục  /etc/fail2ban/jail.d/ có thể ghi đè lên các file này theo thứ tự như sau:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, alphabetically
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, alphabetically

File nào mà chứa mục [DEFAULT]  thì sẽ được thực thi trước.

Bắt đầu với bản đơn giản nhất của jail.local. mở file sử dụng lệnh nano :

sudo nano /etc/fail2ban/jail.local 

Dán đoạn sau:

/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true

Mục bantime sử dụng  iptables cho firewall và hữu hiệu hóa sshd jail.

Nhấn Ctrl-X để thoát, y để lưu và Enter để xác nhận.

Sau đó khởi động lại fail2ban dùng systemctl:

sudo systemctl restart fail2ban 

Lệnh systemctl không có đầu ra hiển thị,nên để check lại ta sử dụng fail2ban-client:

sudo fail2ban-client status 
OutputStatus |- Number of jail: 1 `- Jail list: sshd

Muốn tìm hiểu chi tiết thì nhập:

sudo fail2ban-client status sshd 
 

Tìm hiểu các cài đặt có sẵn

Phiên bản jail.local là khá ổn, nhưng ta cần điều chỉnh một vài thông số. Mở jail.conf để xem xét thay đổi, nếu muốn thay đổi thì cần copy tới mục tương xứng ở jail.local và điều chỉnh ở đó chứ không phải ở mục .conf này nữa.

sudo nano /etc/fail2ban/jail.conf 

Cài đặt mặc định cho tất cả các Jails

Mở mục [DEFAULT] .

ignoreip = 127.0.0.1/8

Điều chỉnh địa chỉ bằng cách thêm thông số ignoreip , hiện tại thì nó cho phép truy cập tự do từ máy tính. Bạn có thể điều chỉnh thông số này.

bantime = 600

 bantime là khoảng thời gian khách hàng sẽ bị cấm truy cập khi mà xác thực sai. Đơn vị tính bằng giây, thường là 600 giây hay 10 phút.

findtime = 600
maxretry = 3

Còn hai thông số findtime và maxretry. Là các yếu tố tạo lên các quy chuẩn để cấm.

 maxretry là số lần cho phép khách hàng xác thực trên một giao diện trong một đơn vị thời gian findtime. ( Mặc định là 3 lần trong 10 phút).

destemail = root@localhost
sendername = Fail2Ban
mta = sendmail

Nếu muốn cảnh báo email thì cần chèn thêm destemailsendername, và mta.  destemail thiết lập địa chỉ email nhận.  sendername thiết lập nơi gửi email, mta cấu hình loại dịch vụ gửi mail.

action = $(action_)s

Thông số này cấu hình Fail2ban để đưa ra thể chế để cấm.  action_ dùng để định nghĩa file. Đơn giản là cấu hình cho firewall từ chối luồng dữ liệu vào từ host cho tới khi hết lệnh cấm.

Nếu muốn cấu hình cảnh báo qua email , bạn cần ghi đè các giá trị ở action_ lên action_mw. Nếu muốn email lưu nhật ký hoạt động thì thay đổi ở mục action_mwl.

Cài đặt cho các Jails riêng 

Ta sẽ cấu hình jail cho các chương trình khác nhau. Có một port cấm và một logpath để giám sát khả năng tấn công bằng mã độc. Ví dụ, SSH jail muốn hữu hiệu ở mục jail.local thì cần cài đặt:

/etc/fail2ban/jail.local
[sshd]
port = ssh
logpath = %(sshd_log)s

 ssh định nghĩa cổng SSH chuẩn, %(sshd_log)s sử dụng giá trị được định nghĩa ở nơi khác (để giúp jail.conf có thể chuyển động mượt mà giữa các hai hệ thống vận hành khác nhau).

Còn filter để lọc những xác thực sai trong nhật ký.

Giá trị filter nằm ở mục /etc/fail2ban/filter.d với đuôi .conf bị lược bỏ dùng để xác định các dòng không an toàn trong nhật ký. 

Bạn có thể truy cập danh mục đó để xem các loại filter:

ls /etc/fail2ban/filter.d 

Nếu thấy file nào liên quan đến chương trình đang sử dụng thì mở nó ra. Hầu hết những filter này đều có các mục ở jail.confta có thể hữu hiệu hóa ở mục jail.local nếu muốn.

Giả dụ như ta đang truy cập một website sử dụng Nginx và nhận ra có ai đó đang cố đăng nhập với mật khẩu đã được bảo vệ, ta sẽ lệnh cho Fail2ban sử dụng file nginx-http-auth.conf để kiểm tra trong file    /var/log/nginx/error.log .

 [nginx-http-auth] thực ra đã được cài sẵn trong file /etc/fail2ban/jail.conf. Chúng ta chỉ cần thêm thông số enabled vào jail nginx-http-auth ở mục jail.local

/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true[nginx-http-auth]enabled = true

Khởi động lại fail2ban :

sudo systemctl restart fail2ban 
 

Giám sát nhật ký Fail2ban và cấu hình Firewall 

Dùng  systemctl để check trạng thái chương trình:

sudo systemctl status fail2ban 

Nếu có gì đó không ổn thì check mục fail2ban :

sudo journalctl -b -u fail2ban 

Sử dụng fail2ban-client để xem trạng thái của fail2ban-server:

sudo fail2ban-client status 
sudo fail2ban-client status jail_name

Nhấn Ctrl-C để thoát:

sudo tail -F /var/log/fail2ban.log 

Liệt kê quy chuẩn cấu hình cho iptable::

sudo iptables -L 

Hiển thị các quy chuẩn Iptables cho các lệnh cần thiết:

sudo iptables -S 
 

Kết luận

Giờ thì bạn đã có thể cấu hình một vài quy chuẩn cấm cơ bản cho chương trình. Fail2ban rất dễ cài đặt và là một cách hữu hiệu để bảo vệ các chương trình có dùng công cụ xác thực.