這邊文章會利用 Docker-compose架設wazuh伺服器
下一篇文章才會安裝,連線到Wazuh確認agent有work
摘要回顧甚麼是Wazh~
資訊安全在現代科技環境中變得至關重要。
Wazuh 是一個開源的資安資訊和事件管理平台,幫助組織監控和保護系統免受各種威脅。
首先,確保你的系統已經安裝了 Docker 和 Docker Compose
這邊我就不教學docker相關的安裝跟操作了
接著我們要使用Docker-compose來建立Wazuh
官方其實已經有提供了使用Docker部署Wazuh的教學與docker-compose.yml檔案
https://documentation.wazuh.com/current/deployment-options/docker/wazuh-container.html
架設主要可以分成單點以及多點部署,如果有足夠的資源,也需要高可用性的情況下,絕對是優先首選multi
但這邊我的示範都是採用單點部署,一來是示範跟操作都更單純容易,再來是也是呼應主題有限資源下的資安防禦的建置
接著進入手把手架設教學,依照下列流程進行
這邊我們以直接以root進行操作,sudo -s切換成root
選擇一個你想要的目錄(我直接切換到root目錄),
然後將github上的程式碼給checkout下來
git clone https://github.com/wazuh/wazuh-docker.git -b v4.5.0
進入到single-node的目錄,執行以下的指令,目的是要產生憑證
cd wazuh-docker/single-node/
docker-compose -f generate-indexer-certs.yml run --rm generator
接下來我們在single-node目錄下執行
docker-compose up -d
-d是表示要在背景執行,這樣應該就可以成功把wazuh架設起來了
是不是非常簡單的呢!docker就是這麼的方便阿XD
我們可以從幾個地方確認有沒有錯誤資訊
確認運行狀態
docker ps -a
查看log,我們可以使用docker-compose來查看全部的log
或是單獨查看某個容器的log資訊
docker-compose logs
docker logs single-node_wazuh.manager_1
直接訪問https:// 確認服務正常運行
使用預設的帳號密碼admin:SecretPassword登入
登入之後它會自行進行health的檢查,每個檢查項目都打勾就OK了
以下附上這次啟動時使用的官方的docker-compose內容
順便先簡單提一下關於這個內容
我知道內容有點長QQ 不過身為一個有責任的專家
還是請先看過內容了解一下大概都是甚麼設定
# Wazuh App Copyright (C) 2017, Wazuh Inc. (License GPLv2)
version: '3.7'
services:
wazuh.manager:
image: wazuh/wazuh-manager:4.5.0
hostname: wazuh.manager
restart: always
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 655360
hard: 655360
ports:
- "1514:1514"
- "1515:1515"
- "514:514/udp"
- "55000:55000"
environment:
- INDEXER_URL=https://wazuh.indexer:9200
- INDEXER_USERNAME=admin
- INDEXER_PASSWORD=SecretPassword
- FILEBEAT_SSL_VERIFICATION_MODE=full
- SSL_CERTIFICATE_AUTHORITIES=/etc/ssl/root-ca.pem
- SSL_CERTIFICATE=/etc/ssl/filebeat.pem
- SSL_KEY=/etc/ssl/filebeat.key
- API_USERNAME=wazuh-wui
- API_PASSWORD=MyS3cr37P450r.*-
volumes:
- wazuh_api_configuration:/var/ossec/api/configuration
- wazuh_etc:/var/ossec/etc
- wazuh_logs:/var/ossec/logs
- wazuh_queue:/var/ossec/queue
- wazuh_var_multigroups:/var/ossec/var/multigroups
- wazuh_integrations:/var/ossec/integrations
- wazuh_active_response:/var/ossec/active-response/bin
- wazuh_agentless:/var/ossec/agentless
- wazuh_wodles:/var/ossec/wodles
- filebeat_etc:/etc/filebeat
- filebeat_var:/var/lib/filebeat
- ./config/wazuh_indexer_ssl_certs/root-ca-manager.pem:/etc/ssl/root-ca.pem
- ./config/wazuh_indexer_ssl_certs/wazuh.manager.pem:/etc/ssl/filebeat.pem
- ./config/wazuh_indexer_ssl_certs/wazuh.manager-key.pem:/etc/ssl/filebeat.key
- ./config/wazuh_cluster/wazuh_manager.conf:/wazuh-config-mount/etc/ossec.conf
wazuh.indexer:
image: wazuh/wazuh-indexer:4.5.0
hostname: wazuh.indexer
restart: always
ports:
- "9200:9200"
environment:
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- wazuh-indexer-data:/var/lib/wazuh-indexer
- ./config/wazuh_indexer_ssl_certs/root-ca.pem:/usr/share/wazuh-indexer/certs/root-ca.pem
- ./config/wazuh_indexer_ssl_certs/wazuh.indexer-key.pem:/usr/share/wazuh-indexer/certs/wazuh.indexer.key
- ./config/wazuh_indexer_ssl_certs/wazuh.indexer.pem:/usr/share/wazuh-indexer/certs/wazuh.indexer.pem
- ./config/wazuh_indexer_ssl_certs/admin.pem:/usr/share/wazuh-indexer/certs/admin.pem
- ./config/wazuh_indexer_ssl_certs/admin-key.pem:/usr/share/wazuh-indexer/certs/admin-key.pem
- ./config/wazuh_indexer/wazuh.indexer.yml:/usr/share/wazuh-indexer/opensearch.yml
- ./config/wazuh_indexer/internal_users.yml:/usr/share/wazuh-indexer/opensearch-security/internal_users.yml
wazuh.dashboard:
image: wazuh/wazuh-dashboard:4.5.0
hostname: wazuh.dashboard
restart: always
ports:
- 443:5601
environment:
- INDEXER_USERNAME=admin
- INDEXER_PASSWORD=SecretPassword
- WAZUH_API_URL=https://wazuh.manager
- DASHBOARD_USERNAME=kibanaserver
- DASHBOARD_PASSWORD=kibanaserver
- API_USERNAME=wazuh-wui
- API_PASSWORD=MyS3cr37P450r.*-
volumes:
- ./config/wazuh_indexer_ssl_certs/wazuh.dashboard.pem:/usr/share/wazuh-dashboard/certs/wazuh-dashboard.pem
- ./config/wazuh_indexer_ssl_certs/wazuh.dashboard-key.pem:/usr/share/wazuh-dashboard/certs/wazuh-dashboard-key.pem
- ./config/wazuh_indexer_ssl_certs/root-ca.pem:/usr/share/wazuh-dashboard/certs/root-ca.pem
- ./config/wazuh_dashboard/opensearch_dashboards.yml:/usr/share/wazuh-dashboard/config/opensearch_dashboards.yml
- ./config/wazuh_dashboard/wazuh.yml:/usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
depends_on:
- wazuh.indexer
links:
- wazuh.indexer:wazuh.indexer
- wazuh.manager:wazuh.manager
volumes:
wazuh_api_configuration:
wazuh_etc:
wazuh_logs:
wazuh_queue:
wazuh_var_multigroups:
wazuh_integrations:
wazuh_active_response:
wazuh_agentless:
wazuh_wodles:
filebeat_etc:
filebeat_var:
wazuh-indexer-data:
可以看到啟動了三個容器
分別為
wazuh/wazuh-manager:4.5.0
wazuh/wazuh-indexer:4.5.0
wazuh/wazuh-dashboard:4.5.0
三個服務的用途與架構會在後面文章介紹
然後可以看到有透過ulimits、environment來設定一些資源使用限制的參數
還有內容當中有寫入服務彼此間串API需要的機敏資訊
有使用過ELK的人也可以注意到他服務使用的9200和5601 Port是不是有點熟悉
因為Wazuh那兩個服務的確就是從ELK模改而來
接著可以注意到檔案中已經寫好需要mount的volumes
這邊mount同時使用了兩種方式,兩種都是持久性儲存的方式
也就是容器被刪除後,資料還是會保留
是實際上很常使用的方式,對於升級或是轉移也是方便
第一種方式是named volume方式,可以我們架設完成後
也就是yml最下面的部分
volumes:
wazuh_api_configuration:
wazuh_etc:
wazuh_logs
...
架設完之後可以發現,
當前路徑當中並沒有出現wazuh_api_configuration這個目錄
這個其實是透過docker自行管理的目錄
當然也是會儲存在實體的主機路徑上
預設情況會被儲存在/var/lib/docker/volumes
這種方式有許多好處,可以直接使用docker volume指令管理
也不用太過於注意關於權限的問題
第二種是bind mount的方式
在我們剛剛啟動docker-compose up的路徑下
可以看到存在config這個目錄
這樣的方式,以這次啟動的方式的確不會有甚麼問題
不過如果你是要將原先的檔案給mount進container當中
必須要特別注意到檔案擁有者以及權限問題
會特別提到這一點
是因為我在自行架設wazuh的時候
其實是有全部改寫整個docker-compose的,有遇到權限的一些問題
但改寫這件事情不會涵蓋在這系列的文章,因為其實完全沒有特別必要XDDD
我是因為一些習慣與管理問題,全面改寫成使用bind mount的方式
主機上的目錄結構也重新編排過
當然,即使改寫mount方式跟目錄,進到容器裡面之後內容是完全一樣的
總之,在改寫架設的過程當中,遇到幾個owner與權限的問題
所以也稍微提醒大家