Nguyễn Kim Khánh
Intern
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.
- 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.
- 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
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
- Đâ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ý
- Đó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
- 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:
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.
b. Wazuh Agent/var/ossec/bin/agent_groups -a -g linux_agent -q
/var/ossec/bin/agent_groups -a -g windows_agent -q
- 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
Link cài tự động: https://securityzone.vn/t/huong-dan-chay-script-cai-at-tu-ong-wazuh-agent-tren-linux.12645/systemctl daemon-reload
systemctl enable wazuh-agent
systemctl start wazuh-agent
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
Bài viết liên quan
Được quan tâm
Bài viết mới