#I.Đặt vấn đề
Một server public ra ngoài mạng internet đứng trước nguy cơ mất dữ liệu khi có nhiều cuộc tấn công cố gắng truy cập vào hệ thống với tài khoản quản trị nhằm chiếm quyền sử dụng, thao tác với hệ thống. Vì vậy cần có biện pháp phòng ngừa, cảnh báo khi có sự kiện đăng nhập trực tiếp hoặc SSH.
#II. Giải pháp
Khi có sự kiện đăng nhập trực tiếp hay từ xa hệ thống sẽ ghi lại nhật ký trong file log
tail /var/log/auth.log
Giải pháp được đưa ra là viết chương trình lấy thông tin trong file log này, thông tin cần lấy gồm có
-
Số lần đăng nhập ssh thành công bao gồm user đăng nhập và ip máy đăng nhập từ xa
-
Số lần đăng nhập bằng ssh thất bại, bao gồm cả thông tin user, user không tồn tại, IP của máy đăng nhập từ xa, port
-
Số lần đăng nhập trực tiếp thành công, bao gồm user đăng nhập, và đăng nhập trên tty của user nào
-
Số lần đăng nhập trực tiếp thất bại, gồm có cả user đăng nhập
Tất cả thông tin này chương trình sẽ chuyển sang định sang json và đẩy lên server, server sẽ dựa vào số biến động những số liệu này để gửi cảnh báo về cho người quản trị
Tuy nhiên hệ thống sẽ xóa file log định kỳ nên để số lần đăng nhập đúng chương trình sẽ ghi dữ liệu sang file text
Tải script và tạo thư mục chứa file script:
wget https://raw.githubusercontent.com/thanhha123/zabbix_monitor_login/master/monitor_login.py
mkdir -p /var/tools/zabbix/monitor/
cp login_monitor.py /var/tools/zabbix/monitor/login_monitor.py
chmod +x /var/tools/zabbix/monitor/login_monitor.py
Chạy script dữ liệu sẽ dưới dạng file JSON
Sau khi chạy script xong tại thư mục /var/zabbix/monitor/ sẽ sinh ra file login_monitor.txt chứa các dòng dữ liệu trong file log để lưu dữ liệu khi file log bị xóa
Thêm các UserParameter vào file cấu hình /etc/zabbix/zabbix_agentd.conf
echo " UserParameter=direct.log.fail[*],cat /var/tools/zabbix/monitor/login_monitor.txt |grep \": FAILED LOGIN\"|wc -l" >> /etc/zabbix/zabbix_agentd.conf
echo "UserParameter=ssh.log.success[*],cat /var/tools/zabbix/monitor/login_monitor.txt |grep \": Accepted password\"|wc -l">>/etc/zabbix/zabbix_agentd.conf
echo "UserParameter=direct.log.success[*],cat /var/tools/zabbix/monitor/login_monitor.txt |grep \"pam_unix(login:session): session opened\"|wc -l" >> /etc/zabbix/zabbix_agentd.conf
echo "UserParameter=direct.log.fail[*],cat /var/tools/zabbix/monitor/login_monitor.txt |grep \": Failed password\"|wc -l" >> /etc/zabbix/zabbix_agentd.conf
echo "UserParameter=login.monitor,/usr/bin/python /var/tools/zabbix/monitor/login_monitor.py" >> /etc/zabbix/zabbix_agentd.conf
Khởi động lại Zabbix Agent:
service zabbix_agent restart
Bước 1: Tạo host với IP máy cần giám sát
Bước 2: Tạo Discovery rules trong host vừa khởi tạo với MACRO LOGIN
Bước 3: Khởi tạo các item
Kết quả: