1. Tại sao chúng ta cần cảnh báo tự động?
Trong quản trị hệ thống, việc theo dõi log (nhật ký hệ thống) là bắt buộc. Tuy nhiên, dù bạn có triển khai hệ thống thu thập log xịn xò đến đâu, cũng không ai có thể ngồi nhìn chằm chằm vào màn hình Dashboard 24/7 để canh hacker được. Khi có kẻ gian cố tình dò mật khẩu (Brute Force) vào máy chủ Linux hay Windows của bạn, từng giây phút đều vô cùng quý giá.Đó là lý do chúng ta cần biến OpenSearch thành một "Mini SIEM" (Hệ thống quản lý sự kiện và thông tin bảo mật). Trong bài viết này, mình sẽ hướng dẫn các bạn cách cấu hình tính năng Alerting của OpenSearch để tự động phát hiện hành vi Brute Force và gửi tin nhắn cảnh báo "ting ting" về điện thoại qua Telegram ngay lập tức.
2. Chi tiết các bước cài đặt
Trước khi bắt đầu, hãy đảm bảo hệ thống OpenSearch & Dashboards của bạn đang chạy ổn định. Bạn cũng cần chuẩn bị sẵn 1 Bot Token và Chat ID của Telegram (có thể dễ dàng tạo qua @BotFather).Bước 1: Xây dựng Notification Channel
Đầu tiên, chúng ta cần khai báo một "đường ống" để OpenSearch biết cách gọi API của Telegram.- Truy cập vào OpenSearch Dashboards, ở menu bên trái chọn Notifications -> Channels.
- Bấm Create channel và thiết lập như sau:
Name: Telegram_Alert_Channel
Channel type: Custom webhook
Method: POST
Webhook URL: https://api.telegram.org/bot<TOKEN_CỦA_BẠN>/sendMessage (Lưu ý: Bỏ ngoặc <> và dán dính liền Token vào chữ bot). - Tại phần Webhook headers, đảm bảo có dòng:
Key: Content-Type | Value: application/json - Bấm Create để lưu lại.
Bước 2: Lắp đặt công cụ truy tìm dấu vết (Monitor)
Monitor sẽ chạy ngầm định kỳ để lục tìm các log đăng nhập thất bại.- Vào menu Alerting -> Monitors -> Create monitor.
- Đặt tên là Failed_Login_Monitor, chọn Monitor type: Per query monitor và Method: Extraction query.
- Lịch trình (Schedule) bạn có thể để 1 minute (để test) hoặc 5 minutes cho thực tế.
- Ở phần Data source, chọn index chứa log của bạn (ví dụ: logs-*).
- Xóa mã mặc định ở khung Query và dán đoạn JSON sau (đoạn mã này quét cả log Failed password của Linux và Event ID 4625 của Windows trong 5 phút gần nhất):
{
"size": 0,
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{ "match": { "message": "Failed password" } },
{ "match": { "winlog.event_id": "4625" } }
]
}
},
{
"range": {
"@timestamp": { "from": "now-5m" }
}
}
]
}
}
}
Bước 3: Thiết lập "Bộ phản ứng nhanh" (Trigger & Action)
Sau khi có "máy quét", ta phải chỉ định khi nào thì báo động và báo động nội dung gì.
- Cuộn xuống phần Triggers (hoặc bấm Add trigger). Đặt tên là Failed_Login_Trigger, mức độ 1 (Highest).
- Ở ô Trigger condition, nhập điều kiện: ctx.results[0].hits.total.value > 5 (Nghĩa là: Nếu có lớn hơn 5 lần đăng nhập sai thì mới báo động).
- Cuộn tiếp xuống phần Actions, bấm Add action. Đặt tên Action và chọn Channel Telegram đã tạo ở Bước 1.
- Ở ô Message, đây là phần quan trọng nhất. Hãy dán đoạn JSON sau để định dạng chuẩn tin nhắn gửi đi (Nhớ thay ID của bạn):
{
"chat_id": "ĐIỀN_ID_CỦA_BẠN_VÀO_ĐÂY",
"text": "CẢNH BÁO BẢO MẬT \nHệ thống phát hiện dấu hiệu Brute Force!\n- Số lần đăng nhập sai: {{ctx.results.0.hits.total.value}} lần\n- Thời gian: Trong 5 phút vừa qua\n- Cảnh báo từ: {{ctx.monitor.name}}\n
Đề nghị kiểm tra server ngay!"
}
- Bấm Save để hoàn thành toàn bộ quá trình.
Bước 4: Thử nghiệm thực tế (End-to-End Test)
Không có gì chắc chắn bằng việc tự đóng vai Hacker để test hệ thống!
- Mở Terminal, thử SSH vào server bằng một user ảo để cố tình tạo log lỗi: ssh hacker@localhost.
- Cố ý gõ sai mật khẩu khoảng 6-7 lần liên tục.
- Chờ tối đa 1 phút, và điện thoại của bạn sẽ "Ting ting" báo cáo cực kỳ chuẩn xác!
3. Nền tảng cho một hệ thống vững chắc
Với việc thiết lập thành công luồng cảnh báo này, bạn đã tự tay xây dựng được một hệ thống an ninh mạng chủ động. Không chỉ giới hạn ở Brute Force, từ nền tảng này, bạn hoàn toàn có thể áp dụng cơ chế tương tự để cảnh báo khi dung lượng ổ cứng máy chủ sắp đầy (Disk usage), khi website trả về lỗi 500 (Web Server Logs), hoặc khi có người truy cập vào các file nhạy cảm.
OpenSearch là một công cụ cực kỳ mạnh mẽ, và khi kết hợp với sự linh hoạt của webhook Telegram, giới hạn duy nhất chỉ là sự sáng tạo của bạn. Chúc các bạn áp dụng thành công và xây dựng được những hệ thống an toàn, vững chắc!