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>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
61232af61c
commit
e6aad53fb5
@@ -4,6 +4,15 @@ DASHBOARD_PORT=443
|
|||||||
INDEXER_HEAP=1g
|
INDEXER_HEAP=1g
|
||||||
COLLECTOR_MAX_LOG_MB=50
|
COLLECTOR_MAX_LOG_MB=50
|
||||||
|
|
||||||
|
# Optionaler HTTP(S)-Proxy, falls der Server nicht direkt ins Internet kommt.
|
||||||
|
# Leer lassen = kein Proxy. Beispiel: HTTP_PROXY=http://proxy.firma.local:3128
|
||||||
|
# Genutzt fuer: Image-Build (dnf/apt/pip), Zertifikat-Tool, Wazuh-Feeds (Schwachstellen, Updates),
|
||||||
|
# unter Podman auch fuer das Laden der Images. SSH zu den Hosts laeuft nie ueber den Proxy.
|
||||||
|
# NO_PROXY: zusaetzliche Ausnahmen; die internen Dienstnamen sind immer ausgenommen.
|
||||||
|
HTTP_PROXY=
|
||||||
|
HTTPS_PROXY=
|
||||||
|
NO_PROXY=
|
||||||
|
|
||||||
# Werden von ./setup.sh zufaellig erzeugt
|
# Werden von ./setup.sh zufaellig erzeugt
|
||||||
INDEXER_PASSWORD=
|
INDEXER_PASSWORD=
|
||||||
DASHBOARD_PASSWORD=
|
DASHBOARD_PASSWORD=
|
||||||
|
|||||||
@@ -80,6 +80,29 @@ unangetastet. Mit `CONTAINER_ENGINE=docker|podman` lässt sich die Erkennung üb
|
|||||||
nano hosts.yml # Hosts eintragen (siehe hosts.yml.example)
|
nano hosts.yml # Hosts eintragen (siehe hosts.yml.example)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Proxy (optional)
|
||||||
|
|
||||||
|
Kommt der Server nur über einen Proxy ins Internet, trägst du ihn in `.env` ein:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env # nur vor dem allerersten ./setup.sh nötig
|
||||||
|
nano .env # HTTP_PROXY=http://proxy.firma.local:3128, HTTPS_PROXY=..., ggf. NO_PROXY=...
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternativ übernimmt `./setup.sh` beim ersten Lauf `HTTP_PROXY`/`HTTPS_PROXY` aus der Shell.
|
||||||
|
Genutzt wird der Proxy für:
|
||||||
|
|
||||||
|
- Image-Build (`dnf`, `apt`, `pip`) und das Zertifikat-Tool
|
||||||
|
- Laufzeit: Manager und Dashboard (Schwachstellen-Feeds von cti.wazuh.com, Update-Check)
|
||||||
|
- Podman: auch für das Laden der Images
|
||||||
|
|
||||||
|
Die internen Dienstnamen (`wazuh.manager`, `wazuh.indexer`, …) sind immer in `NO_PROXY`. SSH
|
||||||
|
zu den Hosts läuft nie über den Proxy.
|
||||||
|
|
||||||
|
**Docker:** Images lädt der Docker-Daemon, nicht der Container. Ohne Daemon-Proxy gibt
|
||||||
|
`setup.sh` eine Warnung mit der fertigen systemd-Konfiguration aus. `setup.sh` ändert die nicht
|
||||||
|
selbst, weil ein Neustart von Docker alle Container auf dem Server neu startet.
|
||||||
|
|
||||||
### Red Hat / Podman
|
### Red Hat / Podman
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -15,6 +15,12 @@ services:
|
|||||||
dockerfile: manager/Dockerfile
|
dockerfile: manager/Dockerfile
|
||||||
args:
|
args:
|
||||||
WAZUH_VERSION: ${WAZUH_VERSION}
|
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}
|
image: localhost/sshpull/wazuh-manager:${WAZUH_VERSION}
|
||||||
hostname: wazuh.manager
|
hostname: wazuh.manager
|
||||||
restart: always
|
restart: always
|
||||||
@@ -41,6 +47,13 @@ services:
|
|||||||
- SSL_KEY=/etc/ssl/filebeat.key
|
- SSL_KEY=/etc/ssl/filebeat.key
|
||||||
- API_USERNAME=wazuh-wui
|
- API_USERNAME=wazuh-wui
|
||||||
- API_PASSWORD=${API_PASSWORD}
|
- 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:
|
volumes:
|
||||||
- wazuh_api_configuration:/var/ossec/api/configuration
|
- wazuh_api_configuration:/var/ossec/api/configuration
|
||||||
- wazuh_etc:/var/ossec/etc
|
- wazuh_etc:/var/ossec/etc
|
||||||
@@ -99,6 +112,12 @@ services:
|
|||||||
- DASHBOARD_PASSWORD=${DASHBOARD_PASSWORD}
|
- DASHBOARD_PASSWORD=${DASHBOARD_PASSWORD}
|
||||||
- API_USERNAME=wazuh-wui
|
- API_USERNAME=wazuh-wui
|
||||||
- API_PASSWORD=${API_PASSWORD}
|
- 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:
|
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.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/wazuh.dashboard-key.pem:/usr/share/wazuh-dashboard/certs/wazuh-dashboard-key.pem:ro,z
|
||||||
@@ -114,6 +133,13 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: collector/Dockerfile
|
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
|
image: localhost/sshpull/collector:latest
|
||||||
hostname: sshpull.collector
|
hostname: sshpull.collector
|
||||||
restart: always
|
restart: always
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ is_root() { [ "$(id -u)" -eq 0 ]; }
|
|||||||
ENGINE=""
|
ENGINE=""
|
||||||
DC=()
|
DC=()
|
||||||
SELINUX=no
|
SELINUX=no
|
||||||
|
PROXY_ARGS=()
|
||||||
|
|
||||||
detect_runtime() {
|
detect_runtime() {
|
||||||
[ -n "$ENGINE" ] && return
|
[ -n "$ENGINE" ] && return
|
||||||
@@ -71,6 +72,10 @@ detect_runtime() {
|
|||||||
if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then
|
if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then
|
||||||
SELINUX=yes # docker-compose.yml nutzt ":z" auf allen Bind-Mounts
|
SELINUX=yes # docker-compose.yml nutzt ":z" auf allen Bind-Mounts
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
sync_env_keys
|
||||||
|
load_proxy
|
||||||
|
check_docker_proxy
|
||||||
}
|
}
|
||||||
|
|
||||||
check_rootless() {
|
check_rootless() {
|
||||||
@@ -96,7 +101,44 @@ set_env() { # set_env KEY VALUE
|
|||||||
if grep -q "^$1=" .env; then sed -i "s|^$1=.*|$1=$2|" .env; else echo "$1=$2" >> .env; fi
|
if grep -q "^$1=" .env; then sed -i "s|^$1=.*|$1=$2|" .env; else echo "$1=$2" >> .env; fi
|
||||||
}
|
}
|
||||||
|
|
||||||
env_get() { grep "^$1=" .env 2>/dev/null | cut -d= -f2-; }
|
env_get() { grep "^$1=" .env 2>/dev/null | cut -d= -f2- || true; }
|
||||||
|
|
||||||
|
INTERNAL_NO_PROXY="wazuh.manager,wazuh.indexer,wazuh.dashboard,sshpull.collector,localhost,127.0.0.1"
|
||||||
|
|
||||||
|
sync_env_keys() {
|
||||||
|
# Neue Schluessel aus .env.example in eine bestehende .env uebernehmen (leer bzw. Default)
|
||||||
|
[ -f .env ] || return 0
|
||||||
|
local line key
|
||||||
|
while IFS= read -r line; do
|
||||||
|
[[ $line =~ ^([A-Z_]+)= ]] || continue
|
||||||
|
key=${BASH_REMATCH[1]}
|
||||||
|
grep -q "^$key=" .env || { echo "$line" >> .env; info ".env: $key ergaenzt"; }
|
||||||
|
done < .env.example
|
||||||
|
}
|
||||||
|
|
||||||
|
load_proxy() {
|
||||||
|
# Proxy aus .env in die Umgebung dieses Skripts: Podman nutzt ihn fuer Pull und Build,
|
||||||
|
# "run" reicht ihn an das Zertifikat-Tool weiter.
|
||||||
|
local hp hsp np
|
||||||
|
hp=$(env_get HTTP_PROXY); hsp=$(env_get HTTPS_PROXY); np=$(env_get NO_PROXY)
|
||||||
|
[ -n "$hp$hsp" ] || return 0
|
||||||
|
export HTTP_PROXY="$hp" http_proxy="$hp" HTTPS_PROXY="$hsp" https_proxy="$hsp"
|
||||||
|
export NO_PROXY="$INTERNAL_NO_PROXY${np:+,$np}" no_proxy="$INTERNAL_NO_PROXY${np:+,$np}"
|
||||||
|
PROXY_ARGS=(-e HTTP_PROXY -e HTTPS_PROXY -e NO_PROXY -e http_proxy -e https_proxy -e no_proxy)
|
||||||
|
}
|
||||||
|
|
||||||
|
check_docker_proxy() {
|
||||||
|
# Docker laedt Images ueber den Daemon, nicht ueber die Umgebung dieses Skripts
|
||||||
|
[ "$ENGINE" = docker ] && [ -n "${HTTPS_PROXY:-}${HTTP_PROXY:-}" ] || return 0
|
||||||
|
[ -n "$(docker info --format '{{.HTTPSProxy}}{{.HTTPProxy}}' 2>/dev/null)" ] && return 0
|
||||||
|
warn "Proxy in .env gesetzt, aber der Docker-Daemon hat keinen (Image-Pulls brauchen ihn)."
|
||||||
|
warn "Als root /etc/systemd/system/docker.service.d/http-proxy.conf mit diesem Inhalt anlegen:"
|
||||||
|
{
|
||||||
|
echo " [Service]"
|
||||||
|
echo " Environment=\"HTTP_PROXY=${HTTP_PROXY:-}\" \"HTTPS_PROXY=${HTTPS_PROXY:-}\" \"NO_PROXY=localhost,127.0.0.1\""
|
||||||
|
} >&2
|
||||||
|
warn "Dann: systemctl daemon-reload && systemctl restart docker (startet alle Container neu)"
|
||||||
|
}
|
||||||
|
|
||||||
tune_kernel() {
|
tune_kernel() {
|
||||||
local mmc
|
local mmc
|
||||||
@@ -147,6 +189,7 @@ cmd_info() {
|
|||||||
echo "SELinux: $SELINUX"
|
echo "SELinux: $SELINUX"
|
||||||
echo "root: $(is_root && echo ja || echo nein)"
|
echo "root: $(is_root && echo ja || echo nein)"
|
||||||
echo "max_map: $(cat /proc/sys/vm/max_map_count)"
|
echo "max_map: $(cat /proc/sys/vm/max_map_count)"
|
||||||
|
echo "Proxy: ${HTTPS_PROXY:-${HTTP_PROXY:-keiner}}${NO_PROXY:+ (NO_PROXY=$NO_PROXY)}"
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_init() {
|
cmd_init() {
|
||||||
@@ -156,7 +199,18 @@ cmd_init() {
|
|||||||
tune_kernel
|
tune_kernel
|
||||||
|
|
||||||
# --- .env + Passwoerter -------------------------------------------------
|
# --- .env + Passwoerter -------------------------------------------------
|
||||||
[ -f .env ] || cp .env.example .env
|
if [ ! -f .env ]; then
|
||||||
|
cp .env.example .env
|
||||||
|
# Proxy aus der Shell uebernehmen (z.B. export HTTPS_PROXY=... vor dem ersten Setup)
|
||||||
|
local k v
|
||||||
|
for k in HTTP_PROXY HTTPS_PROXY NO_PROXY; do
|
||||||
|
v=$(printenv "$k" || printenv "${k,,}" || true)
|
||||||
|
if [ -n "$v" ]; then set_env "$k" "$v"; info ".env: $k aus der Umgebung uebernommen"; fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
sync_env_keys
|
||||||
|
load_proxy
|
||||||
|
check_docker_proxy
|
||||||
for k in INDEXER_PASSWORD DASHBOARD_PASSWORD API_PASSWORD; do
|
for k in INDEXER_PASSWORD DASHBOARD_PASSWORD API_PASSWORD; do
|
||||||
if [ -z "$(env_get $k)" ]; then set_env "$k" "$(genpw)"; info "$k erzeugt"; fi
|
if [ -z "$(env_get $k)" ]; then set_env "$k" "$(genpw)"; info "$k erzeugt"; fi
|
||||||
done
|
done
|
||||||
@@ -202,7 +256,7 @@ EOF
|
|||||||
if [ ! -f config/wazuh_indexer_ssl_certs/root-ca.pem ]; then
|
if [ ! -f config/wazuh_indexer_ssl_certs/root-ca.pem ]; then
|
||||||
info "Erzeuge TLS-Zertifikate"
|
info "Erzeuge TLS-Zertifikate"
|
||||||
mkdir -p config/wazuh_indexer_ssl_certs
|
mkdir -p config/wazuh_indexer_ssl_certs
|
||||||
engine run --rm \
|
engine run --rm "${PROXY_ARGS[@]}" \
|
||||||
-e CERT_TOOL_VERSION="${version%.*}" \
|
-e CERT_TOOL_VERSION="${version%.*}" \
|
||||||
-v "$PWD/config/wazuh_indexer_ssl_certs/:/certificates/:z" \
|
-v "$PWD/config/wazuh_indexer_ssl_certs/:/certificates/:z" \
|
||||||
-v "$PWD/config/certs.yml:/config/certs.yml:ro,z" \
|
-v "$PWD/config/certs.yml:/config/certs.yml:ro,z" \
|
||||||
|
|||||||
Reference in New Issue
Block a user