SIEM/Log Management Tự Động Hóa Báo Cáo An Ninh (CSV) Qua Email Với OpenSearch.

1. Chức năng Delivery trên OpenSearch Dashboad đã "dead"​

Trong quá trình vận hành hệ thống giám sát an ninh (SIEM) bằng OpenSearch, việc tự động hóa trích xuất log và gửi báo cáo định kỳ cho đội ngũ Admin là một yêu cầu bắt buộc. Task của mình hôm nay có vẻ khá cơ bản: "Dùng Reporting plugin để tạo báo cáo CSV từ Saved Search, lên lịch tự động (Cron) và gửi qua Email".

Tuy nhiên, thực tế lại không hề "màu hồng". Trên các phiên bản OpenSearch Dashboards hiện tại, đội ngũ phát triển đã tách biệt tính năng Reporting và Notifications. Hậu quả là khi thiết lập Report Definition trên giao diện Web, chúng ta chỉ có thể lên lịch để hệ thống tự tạo file và lưu cục bộ trên Dashboards, tính năng Delivery (Gửi kèm qua Email) đã hoàn toàn biến mất!

Vậy làm sao để hoàn thành task này một cách trọn vẹn? Chịu thua UI sao? Không hề! Bài viết này sẽ hướng dẫn bạn cách kết hợp sức mạnh của OpenSearch REST APILinux Cronjob để tự động hóa 100% quy trình này.


2. Cách khắc phục để gửi về Mail​

Bước 1: Khởi tạo Báo cáo định kỳ trên OpenSearch Dashboards​

Đầu tiên, chúng ta vẫn cần thiết lập nền tảng trên giao diện để có một truy vấn chuẩn xác.
- Truy cập OpenSearch Dashboards, tạo một Saved Search chứa các log an ninh cần thiết (ví dụ: Log lỗi đăng nhập).
- Vào mục Reporting, chọn Create report definition.
- Thiết lập định dạng file là CSV, Trigger theo dạng Schedule và dùng biểu thức Cron để lên lịch (ví dụ: */5 * * * * - chạy mỗi 5 phút).

1777887556097.png


1777887596299.png

1777887528974.png


Lúc này, hệ thống đã bắt đầu tự động sinh file định kỳ, nhưng chúng ta cần mang file đó đi gửi mail!

Bước 2: Cài đặt và cấu hình "người vận chuyển" Mutt trên Linux​

Thay vì phụ thuộc vào Web UI, mình đẩy việc gửi mail xuống tầng Hệ điều hành (OS) của máy chủ Ubuntu bằng công cụ mutt.

Mở Terminal và cài đặt:
sudo apt update
sudo apt install mutt -y

Tiếp theo, tạo file cấu hình cho Gmail:
nano ~/.muttrc

Khai báo thông số SMTP của Gmail:

set ssl_starttls=yes
set ssl_force_tls=yes
set smtp_url="smtps://your_email@smtp.gmail.com:465"
set smtp_pass="your_app_password_here"
set from="your_email@gmail.com"

set realname="OpenSearch Report Bot"

1777887912696.png


Bước 3: Viết Script "Thần thánh" kết nối API và Mutt​

Đây là bước "ăn tiền" nhất của hệ thống. Mình tạo một Bash script để gọi thẳng vào Export API của OpenSearch, lấy dữ liệu CSV về máy chủ và lập tức dùng mutt để gửi đi.

Tạo file send_report.sh: nano /home/dai/send_report.sh

Nội dung script:
#!/bin/bash
# 1. Gọi API của OpenSearch để xuất dữ liệu log thành file CSV
curl -X GET -u "admin:admin" --insecure "https://localhost:9200/logs-*/_search?format=csv&size=500" > /tmp/security_report.csv

# 2. Gửi email đính kèm file CSV vừa tải
echo "Gửi người quản trị, đây là báo cáo an ninh định kỳ lấy từ hệ thống OpenSearch." | mutt -s "[BÁO CÁO] OpenSearch Security Report" -a /tmp/security_report.csv -- admin_email@gmail.com

Đừng quên cấp quyền thực thi cho script: chmod +x /home/dai/send_report.sh

1777888053355.png




Bước 4: Lên lịch tự động hóa hoàn toàn với Linux Cron​

Bây giờ, thay vì dùng Cron của Dashboards (vốn không gửi được mail), mình dùng luôn Cron của Ubuntu để chạy script vừa tạo.

Gõ lệnh: crontab -e

Thêm dòng sau vào cuối file để hệ thống tự động chạy mỗi 5 phút (khớp với yêu cầu ban đầu): */5 * * * * /home/dai/send_report.sh

1777888209928.png


1777888295005.png



3. Bài học rút ra​

Chỉ với vài dòng lệnh và một chút hiểu biết về kiến trúc API của OpenSearch, chúng ta đã giải quyết thành công một giới hạn lớn của giao diện người dùng. Hệ thống hiện tại đã đáp ứng 100% yêu cầu: Tự động xuất file CSV, Lên lịch định kỳ chuẩn xác, và Gửi báo cáo trực tiếp đến tay người quản trị.
 
Back
Top