Hướng dẫn bảo vệ SSH bằng Fail2Ban trên CentOS 7
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 prompt
Transaction 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:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
, alphabetically/etc/fail2ban/jail.local
/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:
[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
Output
Status |- 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 destemail
, sendername
, 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:
[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.conf
ta 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
[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.