SIEM/Log Management Triển khai hệ thống SIEM theo mô hình All-in-One ( Opensearch + Vector + Wazuh)

1. Giới thiệu chung​

1.1 Mục đích tài liệu​

Tài liệu này được xây dựng với mục đích:

  • Cung cấp hướng dẫn chi tiết quá trình triển khai, cấu hình, tối ưu và bàn giao vận hành hệ thống.
  • Mô tả rõ ràng kiến trúc, thành phần hệ thống, quy trình cài đặt, tích hợp và kiểm thử.
  • Cơ sở tham khảo cho đội ngũ triển khai, vận hành và hỗ trợ kỹ thuật.

1.2 Phạm vi dự án​

Dự án bao gồm việc triển khai mô hình giám sát an ninh All-in-One, tích hợp các thành phần:

  • Hệ thống quản lý bảo mật Wazuh (Wazuh Manager & Agent)
  • Vector Pipeline dùng để thu thập, chuyển đổi và chuyển log tốc độ cao.
  • Opensearch làm nền tảng lưu trữ, phân tích và trực quan hóa dữ liệu log.
Phạm vi module triển khai:

  • Thu thập log hệ thống (Linux, Windows)
  • Thu thập log ứng dụng
  • Chuẩn hóa log và ingest qua Vector.
  • Lưu trữ và hiển thị dashboard trên Opensearch.
  • Thiết lập dashboard.
Phạm vi chức năng:

  • Thu thập - phân tích - cảnh báo log.
  • Lưu trữ dài hạn.
  • Tìm kiếm log nhanh.
  • Dashboard trực quan hóa.

1.3 Danh sách thành phần hệ thống​

Hệ thống chính:

  • Wazuh Manager: Quản lý, phân tích log từ wazuh agent.
  • Wazuh Agent: Thu thập log từ các máy chủ/ endpoint.
  • Vector Pipeline: Thu thập log từ Wazuh, log từ syslog. Parse và chuyển đổi sang định dạng chuẩn ECS.
  • Opensearch Cluster: Lưu trữ log, query, xây dashboard.

2. Kiến trúc tổng thể​

Mô hình kiến trúc​

  • Sơ đồ tổng quan
1764138395867.png


Mô tả sơ đồ

Wazuh Agents:

  • Cài trên các máy trạm, server Windows, Linux, AD, DHCP, DNS…
  • Có trách nhiệm:
    • Thu thập Windows Event Log
    • Gửi log về Wazuh Manager qua giao thức OSSEC protocol (1514/udp + 1515/tcp), Đồng thời nhận policy, cấu hình, rules từ Wazuh Manager
Wazuh Manager:
  • Đây là thành phần xử lý log chính của Wazuh.
  • Trong mô hình AIO, Manager, API và Dashboard chạy chung trong một stack Docker.
  • Có trách nhiệm:
    • Nhận log từ các agents
    • Output mặc định của Wazuh được tắt và logs chuyển cho Vector xử lý
Vector:
  • Đóng vai trò pipeline
  • Chức năng:
    • Nhận log từ Wazuh Manager
    • Là Syslog Collector nhận log trực tiếp thông qua các port TCP/UDP được mở trên container Vector.
    • Parse log bằng VRL để chuẩn hóa theo ECS
    • Tạo các index theo yêu cầu
    • Gửi dữ liệu đã chuẩn hóa sang OpenSearch thông qua Elasticsearch-compatible API
OpenSearch:
  • Thành phần lưu trữ và tìm kiếm log
  • Chức năng
    • Nhận log từ Vector thông qua API /index/_bulk
    • Lưu trữ dữ liệu log theo từng index.
    • Cung cấp khả năng query, search và index management
  • Trong mô hình triển khai hệ thống sử dụng 2 OpenSearch nodes để tăng khả năng chịu tải và độ ổn định.

3. Triển khai chi tiết từng thành phần​

3.1 Chuẩn bị môi trường​

3.1.1 Cài đặt máy chủ
Máy chủ được cài đặt hệ điều hành Ubuntu Server 22.04 LTS.

  • Tài nguyên yêu cầu: CPU: 16, RAM: 32, Disk OS: 100GB
  • Cập nhật các gói hệ thống trước khi triển khai:
sudo apt update && sudo apt upgrade -y

3.1.2 Cài đặt Docker và Docker Compose

Docker là nền tảng chạy Vector, Opensearch trên môi trường container.

sudo apt-get update

sudo apt-get install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \

$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \

sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo usermod -aG docker $USER

newgrp docker

sudo apt install python3.12-venv -y

python3 -m ensurepip --upgrade

3.2 Cài đặt hệ thống chính​

3.2.1 Triển khai Wazuh​

a. Wazuh Manager.
Cài đặt Wazuh Manager.

sudo apt-get install gnupg apt-transport-https

curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg

echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list

apt-get update

apt-get -y install wazuh-manager

Nhận diện lại service và đảm bảo dịch vụ được chạy

systemctl daemon-reload

systemctl enable wazuh-manager

systemctl start wazuh-manager

Chỉnh cấu hình file /var/ossec/etc/ossec.conf:

<alerts_log>no</alerts_log>

<logall>yes</logall>

<logall_json>yes</logall_json>

Tắt alerts_log để không cho Wazuh manager xử lý các raw log biến nó thành alert vì mục đích ban đầu là thu thập log về Opensearch.

File log nằm ở /var/ossec/logs/archives/archives.log và /var/ossec/logs/archives/archives.json.

Tạo group cho Agent trên Wazuh Manager:

/var/ossec/bin/agent_groups -a -g <tên group agent> -q

Với bước đầu triển khai, tạo 2 group agent quan trọng là linux và window.

/var/ossec/bin/agent_groups -a -g linux_agent -q

/var/ossec/bin/agent_groups -a -g windows_agent -q
b. Wazuh Agent
- Cài đặt trên Windows:
Tải Windows Installer: https://packages.wazuh.com/4.x/windows/wazuh-agent-4.12.0-1.msi
Chạy lệnh:
.\wazuh-agent-4.12.0-1.msi /q WAZUH_MANAGER="<IP WAZUH MANAGER" WAZUH_AGENT_GROUP="windows_agent"NET START Wazuh

Chỉnh file config để cấp policy cho Windows Agent thu log theo yêu cầu: /var/ossec/etc/shared/windows_agent/agent.conf

Link cài đặt tự động: https://securityzone.vn/t/huong-dan-chay-script-cai-at-tu-ong-wazuh-agent-tren-window-server.12644/

- Cài đặt trên Linux:

Tiến hành cài Wazuh Agent lên máy Linux:
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list
apt-get update

WAZUH_MANAGER="<IP WAZUH MANAGER" WAZUH_AGENT_GROUP="linux_agent" apt-get install wazuh-agent
systemctl daemon-reload
systemctl enable wazuh-agent

systemctl start wazuh-agent
Link cài tự động: https://securityzone.vn/t/huong-dan-chay-script-cai-at-tu-ong-wazuh-agent-tren-linux.12645/

3.2.2 Triển khai Opensearch + Vector​

Tạo file docker-compose.yml:

version: '3.8'

services:
opensearch-node1:
image: opensearchproject/opensearch:3
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster
- node.name=opensearch-node1
- discovery.seed_hosts=opensearch-node1,opensearch-node2
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
- bootstrap.memory_lock=true
- OPENSEARCH_JAVA_OPTS=-Xms8g -Xmx8g
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=Admin123@
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- opensearch-data1:/usr/share/opensearch/data
networks:
- opensearch-net
ports:
- "9200:9200"
- "9600:9600"
healthcheck:
test: ["CMD", "curl", "-f", "-sS", "-u", "admin:Admin123@", "--insecure", "https://localhost:9200/_cluster/health"]
interval: 20s
timeout: 10s
retries: 20

opensearch-node2:
image: opensearchproject/opensearch:3
container_name: opensearch-node2
environment:
- cluster.name=opensearch-cluster
- node.name=opensearch-node2
- discovery.seed_hosts=opensearch-node1,opensearch-node2
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
- bootstrap.memory_lock=true
- OPENSEARCH_JAVA_OPTS=-Xms8g -Xmx8g
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=Admin123@
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- opensearch-data2:/usr/share/opensearch/data
networks:
- opensearch-net
healthcheck:
test: ["CMD", "curl", "-f", "-sS", "-u", "admin:Admin123@", "--insecure", "https://localhost:9200/_cluster/health"]
interval: 20s
timeout: 10s
retries: 20

opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:3
container_name: opensearch-dashboards
environment:
OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]'
ports:
- "5601:5601"
networks:
- opensearch-net
depends_on:
opensearch-node1:
condition: service_healthy
opensearch-node2:
condition: service_healthy

vector:
image: timberio/vector:nightly-2025-08-22-debian
container_name: vector
environment:
- VECTOR_DATA_DIR=/vector-data-dir
- VECTOR_LOG=info
- VECTOR_WATCH_CONFIG=true
volumes:
- ./vector:/etc/vector:ro
- /var/ossec/logs/archives:/var/log/wazuh:ro
- vector-data:/vector-data-dir
command: >
--config-dir /etc/vector
networks:
- opensearch-net
ports:
- "6000:6000"
- "8686:8686"
- "514:514/udp"
- "515:515/udp"
- "602:602/udp"
depends_on:
opensearch-node1:
condition: service_healthy
opensearch-node2:
condition: service_healthy


networks:
opensearch-net:

volumes:
opensearch-data1:
opensearch-data2:
vector-data:


Tạo file vector.yaml đây là file cấu hình cho vector:

data_dir: "/vector-data-dir"

api:
enabled: true
address: "0.0.0.0:8686"

sources:
logs:
type: file
include:
- "/var/log/wazuh/archives.json"
ignore_older: 0

transforms:
parse_json_message:
type: remap
inputs: ["logs"]
source: |
. = parse_json!(.message)

sinks:
to_opensearch_logs:
type: elasticsearch
inputs: ["parse_json_message"]
endpoints:
- "https://opensearch-node1:9200"
- "https://opensearch-node2:9200"
api_version: "v7"
bulk:
index: "{{ index_name }}"
request:
concurrency: 2
auth:
strategy: basic
user: admin
password: "Admin123@"
tls:
verify_certificate: false
verify_hostname: false
 
Back
Top