Firewall-Check fuer den Dashboard-Port einbauen

- firewall-check.sh (auch ./setup.sh firewall): prueft Listener, Container-
  Portweiterleitung (DNAT), ip_forward, firewalld, ufw/ufw-docker, iptables
  (INPUT, DOCKER-USER), natives nftables, CSF, Shorewall und lokalen HTTPS-Test
- Legt fehlende Regeln an (Rueckfrage, --yes ohne, --check nur pruefen);
  Podman: podman network reload --all bei fehlender Weiterleitung
- Erkennt "TCP offen, aber kein HTTPS" (conmon haelt Port nur reserviert)
- setup.sh: kein firewall-cmd --reload mehr (loescht ggf. Container-Regeln),
  up ruft stattdessen den Firewall-Check auf
- README: Abschnitt Firewall-Check

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-10-07 13:34:44 +02:00
co-authored by Claude Opus 5.5
parent e6aad53fb5
commit 174c10505a
3 changed files with 380 additions and 15 deletions
+13 -14
View File
@@ -4,7 +4,7 @@
# Compose-Werkzeug (docker compose, docker-compose, podman-compose, podman compose).
#
# ./setup.sh Erstinstallation (Passwoerter, Zertifikate, SSH-Key, Images)
# ./setup.sh up Stack starten (+ Kernel-Parameter, Firewall, Autostart als root)
# ./setup.sh up Stack starten (+ Kernel-Parameter, Firewall-Check, Autostart als root)
# ./setup.sh down Stack stoppen
# ./setup.sh ps | logs [dienst]
# ./setup.sh host-script Skript zum Vorbereiten eines Zielhosts ausgeben
@@ -16,6 +16,8 @@
# ./setup.sh apply hosts.yml uebernehmen (Manager + Collector neu starten)
# ./setup.sh passwords Zugangsdaten anzeigen
# ./setup.sh info Erkannte Umgebung anzeigen
# ./setup.sh firewall Erreichbarkeit des Dashboard-Ports pruefen, fehlende Regeln anlegen
# (--check nur pruefen, --yes ohne Rueckfrage, --port N)
#
# Mit Podman bitte als root ausfuehren (sudo ./setup.sh ...), siehe check_rootless.
# Erkennung uebersteuern: CONTAINER_ENGINE=docker|podman ./setup.sh ...
@@ -155,17 +157,12 @@ tune_kernel() {
fi
}
open_firewall() {
local port
port=$(env_get DASHBOARD_PORT)
command -v firewall-cmd >/dev/null 2>&1 && firewall-cmd --state >/dev/null 2>&1 || return 0
if firewall-cmd --query-port="$port/tcp" >/dev/null 2>&1; then return 0; fi
if is_root; then
info "firewalld: oeffne Port $port/tcp fuer das Dashboard"
firewall-cmd -q --permanent --add-port="$port/tcp" && firewall-cmd -q --reload
else
warn "firewalld aktiv, Port $port/tcp nicht freigegeben: sudo firewall-cmd --permanent --add-port=$port/tcp && sudo firewall-cmd --reload"
fi
check_firewall() {
# Nach dem Start: Erreichbarkeit des Dashboard-Ports pruefen (firewalld, ufw, iptables,
# nftables, Container-Portweiterleitung) und als root fehlende Regeln anlegen.
# Wichtig: niemals "firewall-cmd --reload" - das loescht die Portregeln von Podman/Docker.
if is_root; then ./firewall-check.sh --yes || warn "Firewall-Check meldet Probleme (siehe oben)"
else ./firewall-check.sh --check || warn "Firewall-Check: fuer automatische Regeln 'sudo ./setup.sh firewall'"; fi
}
enable_autostart() {
@@ -337,7 +334,8 @@ cmd_up() {
tune_kernel
compose up -d
enable_autostart
open_firewall
sleep 5 # Portweiterleitung der Container steht erst nach dem Start
check_firewall
info "Gestartet ($ENGINE). Dashboard in 1-3 Minuten: https://$(uname -n):$(env_get DASHBOARD_PORT)"
}
@@ -349,6 +347,7 @@ case "$CMD" in
ps) detect_runtime; compose ps ;;
logs) shift; detect_runtime; compose logs -f --tail=100 "$@" ;;
info) cmd_info ;;
firewall) shift; ./firewall-check.sh "$@" ;;
host-script) shift; cmd_host_script "$@" ;;
keyscan) detect_runtime; compose run --rm --no-deps sshpull.collector keyscan ;;
test) detect_runtime; compose run --rm --no-deps sshpull.collector test ;;
@@ -357,5 +356,5 @@ case "$CMD" in
echo "Dashboard: admin / $(env_get INDEXER_PASSWORD)"
echo "Wazuh-API: wazuh-wui / $(env_get API_PASSWORD)"
;;
*) sed -n '2,23p' "$0"; exit 2 ;;
*) sed -n '2,25p' "$0"; exit 2 ;;
esac