I. Yêu cầu và Setup ban đầu
Dựng SIEM engine bằng OpenSearch 2.12.0 trên Docker. Mục tiêu là thu nhập log tập trung cho SOC Lab.
1. Hardening hệ điều hành
Trước khi đổ dữ liệu vào, hệ thống cần được tinh chỉnh để tránh tình trạng container (văng) liên tục hoặc sai lệnh thời gian log.
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
timedatectl set-ntp on
Hình 1: Xác nhận thông số Kernel và trạng thái đồng bộ thời gian trên Ubuntu trước khi triển khai.
Cấu trúc docker-compose.yml tối ưu:
version: '3'services:
opensearch-node:
image: opensearchproject/opensearch:2.12.0
container_name: opensearch-node
environment:
- cluster.name=uef-soc-cluster
- node.name=os-node1
- discovery.type=single-node
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=Cyber_Secure_@2026!
ulimits:
memlock: {soft: -1, hard: -1}
nofile: {soft: 65536, hard: 65536}
ports:
- 9200:9200
volumes:
- os-data:/usr/share/opensearch/data
networks:
- soc-net
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:2.12.0
container_name: opensearch-dashboards
ports:
- 5601:5601
environment:
OPENSEARCH_HOSTS: '["https://opensearch-node:9200"]'
OPENSEARCH_USERNAME: admin
OPENSEARCH_PASSWORD: Cyber_Secure_@2026!
networks:
- soc-net
volumes:
os-data:
networks:
soc-net:
Hình 2: Kiểm tra trạng thái thực thi bằng lệnh sudo docker ps. Cả node xử lý dữ liệu và Dashboard đều đã ở trạng thái Up ổn định.
3. Xác minh Cluster Health
Sau khi chạy sudo docker-compose up -d, cần đợi khoảng 1 phút để hệ thống khởi tạo TLS Certificates nội bộ. Kiểm tra trạng thái Cluster qua API:
curl -XGET https://localhost:9200/_cluster/health?pretty -u 'admin:Cyber_Secure_@2026!' -k
Hình 3: Truy vấn trạng thái Cluster qua API nội bộ, xác nhận hệ thống đạt trạng thái Yellow (mức tối ưu cho Single-node).
Hình 4: Kết quả mapping thành công. User thong_analyst đã được gán vào Role readall, sẵn sàng cho các tác vụ giám sát log với quyền hạn tối thiểu.
Hình 5: Xác nhận hoàn tất phân quyền. User thong_analyst đã được ánh xạ thành công vào vai trò readall, đảm bảo quyền hạn truy cập an toàn cho nhân viên SOC.
Dựng SIEM engine bằng OpenSearch 2.12.0 trên Docker. Mục tiêu là thu nhập log tập trung cho SOC Lab.
- Môi trường: Ubuntu 20.04 (VMware)
- Cấu hình: Ít nhất 4GB RAM ( dưới mức này OpenSearch cực kì dễ treo).
- Dependency: Docker Engine & Docker Compose.
1. Hardening hệ điều hành
Trước khi đổ dữ liệu vào, hệ thống cần được tinh chỉnh để tránh tình trạng container (văng) liên tục hoặc sai lệnh thời gian log.
- Tăng giới hạn ảo: OpenSearch yêu cầu mức mmap lớn để index dữ liệu.
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
- Đồng bộ thời gian (NTP): Rất quan trọng trong SOC để điều tra số (Forensics). Đảm bảo máy ảo đã đồng bộ giờ:
timedatectl set-ntp on
- Hostname & DNS: Đảm bảo /etc/hosts đã định danh đúng IP máy ảo để các dịch vụ trong cụm nhận diện nhau qua DNS nội bộ.
Hình 1: Xác nhận thông số Kernel và trạng thái đồng bộ thời gian trên Ubuntu trước khi triển khai.
2. Triển khai bằng Docker Compose (V2.12)
Điểm gây ức chế nhất ở bản 2.12 là cơ chế Strong Password Policy. Nếu đặt mật khẩu thiếu ký tự đặc biệt hoặc quá ngắn (như admin123), Security Plugin sẽ chặn startup ngay lập tức.Cấu trúc docker-compose.yml tối ưu:
version: '3'services:
opensearch-node:
image: opensearchproject/opensearch:2.12.0
container_name: opensearch-node
environment:
- cluster.name=uef-soc-cluster
- node.name=os-node1
- discovery.type=single-node
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=Cyber_Secure_@2026!
ulimits:
memlock: {soft: -1, hard: -1}
nofile: {soft: 65536, hard: 65536}
ports:
- 9200:9200
volumes:
- os-data:/usr/share/opensearch/data
networks:
- soc-net
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:2.12.0
container_name: opensearch-dashboards
ports:
- 5601:5601
environment:
OPENSEARCH_HOSTS: '["https://opensearch-node:9200"]'
OPENSEARCH_USERNAME: admin
OPENSEARCH_PASSWORD: Cyber_Secure_@2026!
networks:
- soc-net
volumes:
os-data:
networks:
soc-net:
Hình 2: Kiểm tra trạng thái thực thi bằng lệnh sudo docker ps. Cả node xử lý dữ liệu và Dashboard đều đã ở trạng thái Up ổn định.
3. Xác minh Cluster Health
Sau khi chạy sudo docker-compose up -d, cần đợi khoảng 1 phút để hệ thống khởi tạo TLS Certificates nội bộ. Kiểm tra trạng thái Cluster qua API:
curl -XGET https://localhost:9200/_cluster/health?pretty -u 'admin:Cyber_Secure_@2026!' -k
Hình 3: Truy vấn trạng thái Cluster qua API nội bộ, xác nhận hệ thống đạt trạng thái Yellow (mức tối ưu cho Single-node).
- Chỉ số cần chú ý: Dòng "status" : "yellow".
- Lưu ý kỹ thuật: Trong môi trường Lab Single-node, trạng thái Yellow là mức cao nhất (vẫn đảm bảo Full tính năng). Hệ thống chỉ lên Green khi có ít nhất 2 Node để phân bổ các bản sao dữ liệu (Replica shards).
4. Cấu hình Security Plugin (RBAC)
Mục tiêu là tuân thủ nguyên tắc Least Privilege (Quyền hạn tối thiểu). Tuyệt đối không dùng account admin để làm việc hằng ngày.- Tạo Analyst User: Truy cập giao diện Dashboards (Port 5601), vào mục Security > Internal Users. Khởi tạo user thong_analyst.
- Mapping Roles: Vào mục Roles, tìm role hệ thống là readall.
- Tại tab Mapped users, gán user thong_analyst vào.
- Kết quả: User này có thể xem log và biểu đồ nhưng không có quyền can thiệp sâu vào cấu hình Cluster.
Hình 4: Kết quả mapping thành công. User thong_analyst đã được gán vào Role readall, sẵn sàng cho các tác vụ giám sát log với quyền hạn tối thiểu.
Hình 5: Xác nhận hoàn tất phân quyền. User thong_analyst đã được ánh xạ thành công vào vai trò readall, đảm bảo quyền hạn truy cập an toàn cho nhân viên SOC.