Files
docker-wazuh/docker-compose.yml
T
duffyduckandClaude Opus 5.5 e6aad53fb5 Optionalen HTTP(S)-Proxy ueber .env unterstuetzen
- .env: HTTP_PROXY, HTTPS_PROXY, NO_PROXY (leer = kein Proxy)
- Image-Build: Proxy als Build-Argumente (dnf, apt, pip)
- Laufzeit: Manager und Dashboard bekommen den Proxy (Wazuh-Feeds, Update-Check);
  interne Dienstnamen stehen immer in NO_PROXY
- setup.sh: exportiert den Proxy (Podman-Pulls/-Builds), reicht ihn ans
  Zertifikat-Tool weiter, warnt bei Docker-Daemon ohne Proxy, uebernimmt beim
  ersten Lauf einen Proxy aus der Shell und ergaenzt neue Schluessel in bestehenden .env
- README: Abschnitt Proxy

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 12:57:55 +02:00

175 lines
6.9 KiB
YAML

# Wazuh single-node (basiert auf wazuh/wazuh-docker single-node)
# + sshpull-collector: holt Logs per SSH von Hosts, auf die nur per SSH zugegriffen werden kann
# + Manager-Erweiterung: Agentless-Integritaets- und Befehls-Checks per SSH
#
# Vor dem ersten Start: ./setup.sh (erkennt Docker/Podman selbst, danach ./setup.sh up)
#
# Kompatibel mit docker compose, docker-compose, podman-compose und "podman compose":
# - Images voll qualifiziert (docker.io/..., localhost/...) wegen Podman-Short-Name-Policy
# - Bind-Mounts mit ":z" fuer SELinux (RHEL/Fedora); ohne SELinux wirkungslos
services:
wazuh.manager:
build:
context: .
dockerfile: manager/Dockerfile
args:
WAZUH_VERSION: ${WAZUH_VERSION}
HTTP_PROXY: ${HTTP_PROXY}
HTTPS_PROXY: ${HTTPS_PROXY}
NO_PROXY: ${NO_PROXY}
http_proxy: ${HTTP_PROXY}
https_proxy: ${HTTPS_PROXY}
no_proxy: ${NO_PROXY}
image: localhost/sshpull/wazuh-manager:${WAZUH_VERSION}
hostname: wazuh.manager
restart: always
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 655360
hard: 655360
# Keine Ports nach aussen: Agents (falls ueberhaupt) kommen ueber den SSH-Tunnel
# des Collectors. Fuer klassisch angebundene Agents freischalten:
# ports:
# - "1514:1514"
# - "1515:1515"
environment:
- TZ=${TZ}
- INDEXER_URL="https://wazuh.indexer:9200" # Anfuehrungszeichen gehoeren dazu (filebeat.yml)
- INDEXER_USERNAME=admin
- INDEXER_PASSWORD=${INDEXER_PASSWORD}
- 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=${API_PASSWORD}
# optionaler Proxy (.env); interne Namen nie ueber den Proxy
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTPS_PROXY}
- NO_PROXY=wazuh.manager,wazuh.indexer,wazuh.dashboard,sshpull.collector,localhost,127.0.0.1,${NO_PROXY}
- http_proxy=${HTTP_PROXY}
- https_proxy=${HTTPS_PROXY}
- no_proxy=wazuh.manager,wazuh.indexer,wazuh.dashboard,sshpull.collector,localhost,127.0.0.1,${NO_PROXY}
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:ro,z
- ./config/wazuh_indexer_ssl_certs/wazuh.manager.pem:/etc/ssl/filebeat.pem:ro,z
- ./config/wazuh_indexer_ssl_certs/wazuh.manager-key.pem:/etc/ssl/filebeat.key:ro,z
- ./config/wazuh_cluster/wazuh_manager.conf:/wazuh-config-mount/etc/ossec.conf:ro,z
# sshpull
- ./hosts.yml:/sshpull/hosts.yml:ro,z
- ./ssh:/sshpull/ssh:ro,z
- remote_logs:/remote-logs:ro
wazuh.indexer:
image: docker.io/wazuh/wazuh-indexer:${WAZUH_VERSION}
hostname: wazuh.indexer
restart: always
environment:
- "OPENSEARCH_JAVA_OPTS=-Xms${INDEXER_HEAP} -Xmx${INDEXER_HEAP}"
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/config/certs/root-ca.pem:ro,z
- ./config/wazuh_indexer_ssl_certs/wazuh.indexer-key.pem:/usr/share/wazuh-indexer/config/certs/wazuh.indexer.key:ro,z
- ./config/wazuh_indexer_ssl_certs/wazuh.indexer.pem:/usr/share/wazuh-indexer/config/certs/wazuh.indexer.pem:ro,z
- ./config/wazuh_indexer_ssl_certs/admin.pem:/usr/share/wazuh-indexer/config/certs/admin.pem:ro,z
- ./config/wazuh_indexer_ssl_certs/admin-key.pem:/usr/share/wazuh-indexer/config/certs/admin-key.pem:ro,z
- ./config/wazuh_indexer/wazuh.indexer.yml:/usr/share/wazuh-indexer/config/opensearch.yml:ro,z
- ./config/wazuh_indexer/internal_users.yml:/usr/share/wazuh-indexer/config/opensearch-security/internal_users.yml:ro,z
wazuh.dashboard:
image: docker.io/wazuh/wazuh-dashboard:${WAZUH_VERSION}
hostname: wazuh.dashboard
restart: always
ports:
- "${DASHBOARD_PORT}:5601"
environment:
- INDEXER_USERNAME=admin
- INDEXER_PASSWORD=${INDEXER_PASSWORD}
- WAZUH_API_URL=https://wazuh.manager
- DASHBOARD_USERNAME=kibanaserver
- DASHBOARD_PASSWORD=${DASHBOARD_PASSWORD}
- API_USERNAME=wazuh-wui
- API_PASSWORD=${API_PASSWORD}
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTPS_PROXY}
- NO_PROXY=wazuh.manager,wazuh.indexer,wazuh.dashboard,sshpull.collector,localhost,127.0.0.1,${NO_PROXY}
- http_proxy=${HTTP_PROXY}
- https_proxy=${HTTPS_PROXY}
- no_proxy=wazuh.manager,wazuh.indexer,wazuh.dashboard,sshpull.collector,localhost,127.0.0.1,${NO_PROXY}
volumes:
- ./config/wazuh_indexer_ssl_certs/wazuh.dashboard.pem:/usr/share/wazuh-dashboard/certs/wazuh-dashboard.pem:ro,z
- ./config/wazuh_indexer_ssl_certs/wazuh.dashboard-key.pem:/usr/share/wazuh-dashboard/certs/wazuh-dashboard-key.pem:ro,z
- ./config/wazuh_indexer_ssl_certs/root-ca.pem:/usr/share/wazuh-dashboard/certs/root-ca.pem:ro,z
- ./config/wazuh_dashboard/opensearch_dashboards.yml:/usr/share/wazuh-dashboard/config/opensearch_dashboards.yml:ro,z
- wazuh-dashboard-config:/usr/share/wazuh-dashboard/data/wazuh/config
- wazuh-dashboard-custom:/usr/share/wazuh-dashboard/plugins/wazuh/public/assets/custom
depends_on:
- wazuh.indexer
- wazuh.manager
sshpull.collector:
build:
context: .
dockerfile: collector/Dockerfile
args:
HTTP_PROXY: ${HTTP_PROXY}
HTTPS_PROXY: ${HTTPS_PROXY}
NO_PROXY: ${NO_PROXY}
http_proxy: ${HTTP_PROXY}
https_proxy: ${HTTPS_PROXY}
no_proxy: ${NO_PROXY}
image: localhost/sshpull/collector:latest
hostname: sshpull.collector
restart: always
environment:
- TZ=${TZ}
- MANAGER_HOST=wazuh.manager
- MAX_LOG_MB=${COLLECTOR_MAX_LOG_MB}
volumes:
- ./hosts.yml:/sshpull/hosts.yml:ro,z
- ./ssh:/ssh:z # rw, damit "keyscan" known_hosts schreiben kann
- remote_logs:/remote-logs
- collector_state:/state
depends_on:
- 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-dashboard-config:
wazuh-dashboard-custom:
remote_logs:
collector_state: