Hướng dẫn cài đặt và cấu hình Wazuh SIEM trên Linux Server: Giám sát an ninh và phát hiện lỗ hổng

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

Nhật ký server: Khi hàng nghìn dòng log trở thành mê cung

Quản lý từ 3 đến 5 server Linux trở lên, chắc hẳn bạn không còn lạ gì cảm giác thót tim. Bỗng dưng CPU vọt lên 100%. Hay tồi tệ hơn, một sáng mở mắt ra đã thấy file mã nguồn web lù lù một con webshell lạ hoắc. Trước đây khi chưa gom log tập trung, mình phải SSH vào từng con một để gõ grep và lastb đến mờ cả mắt. Giờ thì chỉ cần liếc qua dashboard là rõ sự tình.

Nhiều anh em hay nhầm lẫn giữa giám sát hiệu năng và giám sát an ninh. Prometheus hay Grafana báo CPU cán mốc 99%, nhưng nó chịu chết không biết ai đang cào cổng SSH. Nó cũng không thể báo cho bạn biết file /etc/shadow vừa bị user nào sửa, hay bản OpenSSL trên máy dính lỗ hổng CVE nghiêm trọng nào. Đó là lúc bạn cần một giải pháp SIEM/XDR mã nguồn mở thực thụ: Wazuh.

Kiến trúc cốt lõi: Wazuh bắt bệnh hệ thống ra sao?

Hiểu đơn giản, Wazuh đóng vai trò như trung tâm điều hành an ninh (SOC) thu nhỏ. Hệ thống gồm 4 mảnh ghép phối hợp nhịp nhàng:

  • Wazuh Indexer: Công cụ tìm kiếm và lập chỉ mục (dựa trên OpenSearch). Nó có nhiệm vụ lưu trữ, đánh chỉ mục toàn bộ alerts và log sự kiện an ninh với tốc độ xử lý hàng nghìn event mỗi giây.
  • Wazuh Server (Manager): Bộ não đầu não. Máy chủ này tiếp nhận log từ agent gửi về, đối chiếu với hơn 4.000 rule bảo mật có sẵn, quét cơ sở dữ liệu CVE và kích hoạt phản ứng tự động.
  • Wazuh Dashboard: Giao diện web trực quan. Nơi bạn theo dõi biểu đồ tấn công theo chuẩn MITRE ATT&CK, tra cứu log và quản lý toàn bộ máy trạm.
  • Wazuh Agent: Ứng dụng daemon siêu nhẹ (chiếm tầm 30-50MB RAM) cài trực tiếp trên máy chủ đích (Linux, Windows, macOS hay Docker container). Agent đọc log hệ thống, theo dõi file, tiến trình rồi đẩy về Manager qua cổng 1514 (mã hóa TLS).

Thực hành chi tiết: Triển khai cụm Wazuh All-in-One

1. Yêu cầu phần cứng và chuẩn bị môi trường

Với hạ tầng vừa và nhỏ (dưới 50 agent), phương án dựng chung Manager + Indexer + Dashboard trên cùng một máy (All-in-One) là kinh tế nhất. Cấu hình khuyến nghị thực tế:

  • Hệ điều hành: Ubuntu 22.04 LTS hoặc Debian 12 (64-bit sạch sẽ).
  • Cấu hình chuẩn: Tối thiểu 4 vCPU, 8GB RAM và 50GB ổ cứng SSD NVMe. Riêng Wazuh Indexer (JVM) đã ngốn cố định ít nhất 4GB heap.
  • Trường hợp RAM hẹp (4GB – 6GB): Bạn bắt buộc phải tạo swap tối thiểu 4GB. Thiếu swap, kernel OOM-killer sẽ thẳng tay hạ gục Indexer ngay khi vừa boot.
# Tạo khẩn cấp 4GB swap chống sập dịch vụ
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

2. Cài đặt Wazuh All-in-One bằng script chính thức

Cài lẻ từng gói OpenSearch và chứng chỉ rất dễ xung đột. Cách an toàn và chuẩn chỉ nhất là dùng script tự động từ hãng. Script sẽ tự generate chứng chỉ TLS nội bộ cho cụm dịch vụ:

# Tải script cài đặt phiên bản mới nhất
curl -sO https://packages.wazuh.com/4.9/wazuh-install.sh

# Chạy cài đặt chế độ All-in-One (-a)
sudo bash ./wazuh-install.sh -a

Quá trình này mất chừng 5 đến 10 phút. Cài xong, màn hình terminal sẽ in ra user admin kèm mật khẩu ngẫu nhiên cực dài. Hãy lưu ngay mật khẩu này lại. Nếu lỡ tay tắt terminal, bạn vẫn có thể đọc lại từ file nén dự phòng:

# Trích xuất mật khẩu quản trị nếu quên lưu
sudo tar -O -xvf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt

Mở trình duyệt, truy cập vào https://<IP-Server-Wazuh>. Hãy chấp nhận cảnh báo SSL tự ký rồi đăng nhập vào Dashboard.

3. Kết nối Agent từ máy chủ client

Server đã sẵn sàng. Giờ là lúc kết nối các máy chủ cần bảo vệ về trung tâm chỉ huy.

  1. Tại Dashboard, mở menu góc trái > Server management > Endpoints Summary > bấm nút Deploy new agent.
  2. Chọn OS máy client (ví dụ Ubuntu/Debian), nhập địa chỉ IP tĩnh của máy Wazuh Server.
  3. Hệ thống tự tạo một chuỗi lệnh hoàn chỉnh. Bạn chỉ việc dán chuỗi lệnh đó vào terminal máy client:
# Tải GPG key và thêm repo chính thức
wget -qO - https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --dearmor -o /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee -a /etc/apt/sources.list.d/wazuh.list
sudo apt-get update

# Cài agent và trỏ IP về Manager (thay bằng IP máy chủ Wazuh của bạn)
sudo WAZUH_MANAGER='192.168.1.100' apt-get install wazuh-agent -y

# Khởi chạy dịch vụ
sudo systemctl daemon-reload
sudo systemctl enable --now wazuh-agent

F5 lại Dashboard. Mục Endpoints sẽ lập tức chuyển sang trạng thái Active xanh lá sau chưa đầy 10 giây.

4. Bật FIM (File Integrity Monitoring): Giám sát từng dòng mã

FIM là “vũ khí” đáng giá nhất của Wazuh. Nó liên tục bám sát checksum SHA256, quyền hạn và nội dung file. Khi kẻ tấn công chèn backdoor vào /var/www/ hoặc sửa đổi file /etc/passwd, chuông báo động sẽ reo ngay tức khắc.

Để cấu hình, bạn mở file /var/ossec/etc/ossec.conf trên máy client và bổ sung thư mục nhạy cảm vào khối <syscheck>:

<syscheck>
  <!-- Quét toàn bộ định kỳ mỗi 6 tiếng -->
  <frequency>21600</frequency>
  
  <!-- Bật chế độ realtime và ghi lại chi tiết nội dung thay đổi (diff) -->
  <directories realtime="yes" check_all="yes" report_changes="yes">/etc,/usr/bin,/usr/sbin</directories>
  <directories realtime="yes" check_all="yes" report_changes="yes">/var/www</directories>
  
  <!-- Loại trừ thư mục log hoặc cache của framework để tránh nghẽn alert -->
  <ignore>/var/www/*/storage/logs</ignore>
  <ignore>/var/www/*/runtime/logs</ignore>
  <ignore>/var/www/*/var/cache</ignore>
</syscheck>

Tùy chọn report_changes="yes" cực kỳ lợi hại. Nó chụp lại chính xác từng dòng text bị thêm bớt giống hệt lệnh git diff ngay trên giao diện web. Đừng quên restart agent để kích hoạt:

# Khởi động lại agent sau khi sửa cấu hình
sudo systemctl restart wazuh-agent

5. Tự động rà soát lỗ hổng CVE (Vulnerability Detection)

Thay vì ngồi đọc bản tin bảo mật thủ công, Wazuh Manager sẽ tự động so khớp danh sách package trên máy client với cơ sở dữ liệu National Vulnerability Database (NVD) cùng các thông cáo từ Canonical, Debian hay RedHat.

Từ Wazuh 4.8 trở đi, module này được tối ưu đáng kể. Trên Wazuh Server, hãy mở file /var/ossec/etc/ossec.conf để chắc chắn tính năng đã bật:

<vulnerability-detection>
  <enabled>yes</enabled>
  <index-status>yes</index-status>
  <feed-update-interval>60m</feed-update-interval>
</vulnerability-detection>

Vào Dashboard, chọn agent tương ứng rồi bấm sang tab Vulnerability. Bạn sẽ thấy danh sách toàn bộ CVE đi kèm điểm số CVSS cụ thể. Nhờ phân loại rõ ràng từ Low đến Critical, bạn biết chính xác gói nào cần chạy apt upgrade ngay lập tức, dẹp bỏ cảnh đoán mò.

6. Thực chiến: Chặn đứng IP brute-force bằng Active Response

Quan sát thôi chưa đủ. Hãy biến Wazuh thành tấm khiên phản xạ tự động. Nếu một địa chỉ IP cố tình gõ sai mật khẩu SSH 8 lần liên tiếp (kích hoạt rule ID 5712 hoặc 5720), Wazuh Server sẽ chỉ thị cho agent drop thẳng tay IP đó qua tường lửa.

Trên Wazuh Server, bổ sung khối sau vào file /var/ossec/etc/ossec.conf:

<active-response>
  <command>firewall-drop</command>
  <location>local</location>
  <rules_id>5712, 5720</rules_id>
  <timeout>600</timeout> <!-- Tạm thời khóa IP trong 10 phút -->
</active-response>

Lưu file và restart server bằng lệnh sudo systemctl restart wazuh-manager. Từ thời điểm này, mọi đợt dò quét tự động từ botnet sẽ bị dập tắt ngay từ tầng mạng. Bạn không cần thức đêm canh log nữa.

Lời khuyên khi vận hành

Rời bỏ thói quen SSH thủ công để chuyển sang giám sát tập trung là bước ngoặt lớn của người làm vận hành. Wazuh mang lại sức mạnh tương đương các giải pháp SIEM thương mại đắt đỏ mà không tốn một đồng phí bản quyền.

Sau khi hệ thống chạy trơn tru, bước tiếp theo bạn nên làm là tích hợp Webhook gửi cảnh báo về Telegram hoặc Slack. Hãy lọc các cảnh báo từ Level 10 trở lên. Bằng cách này, bạn sẽ nhận tin báo tức thời trên điện thoại mỗi khi có biến, thay vì phải dán mắt liên tục vào màn hình máy tính.

Share: