Files
docker-podman-installation-…/.env.example
T
duffyduckandClaude Opus 5 b912578f27 Firewall-Pruefung: welche Ports offen sein muessen - und welche nicht
Auf RHEL ist firewalld ab Werk aktiv und gibt in aller Regel nur SSH
frei. Der Stack laeuft dann sauber, ist aber von aussen nicht zu
erreichen: die Agents kommen nicht durch den Receiver auf 8000, und im
Browser passiert nichts. Das war bisher nur eine Handvoll statischer
Beispielzeilen in der README und in install.sh.

Neu ist "cmk-manage.sh firewall". Erkannt werden firewalld, ufw,
nftables und iptables; welche Ports noetig sind, ergibt sich aus der
Konfiguration statt aus einer festen Liste:

  - ohne Proxy Manager wird 5000 zum Pflichtport, mit ihm soll es zu
    bleiben - offenes 5000 wird deshalb ausdruecklich angemerkt
  - der Admin-Port kommt aus NPM_ADMIN_PORT, nicht fest aus 81
  - FW_ROLE unterscheidet single/central/remote: eine Remote-Site
    braucht 6557 eingehend, die Zentrale baut die Verbindungen selbst
    auf und braucht dafuer nichts. Steht FW_ROLE=remote bei
    CMK_LIVESTATUS_TCP=off, ist der Port zwar offen, es lauscht aber
    niemand - auch darauf weist der Bericht hin.
  - Event Console ueber FW_EC_SYSLOG / FW_EC_SNMPTRAP / FW_EC_TCP,
    Agent dieses Hosts ueber FW_AGENT, alles Weitere (Grafana, NSCA)
    ueber FW_EXTRA_PORTS

Syslog und SNMP-Traps laufen ueber UDP, eine TCP-Freigabe nuetzt ihnen
nichts. Ports werden deshalb durchweg als nummer/protokoll gefuehrt -
beim Pruefen wie beim Erzeugen der Regeln. Bestehende Regeln werden
entsprechend gelesen: Portbereiche (6556-6558 bzw. 6556:6558) werden
aufgeloest, firewalld-Dienstnamen und Rich Rules zaehlen mit, bei
firewalld alle aktiven Zonen statt nur der Standardzone, und eine
ufw-Regel ohne Protokoll zaehlt fuer TCP und UDP - so wie ufw sie
anlegt.

"firewall open" zeigt die passenden Kommandos, --apply setzt sie nach
Rueckfrage, --source begrenzt sie auf ein Quellnetz (fuer Port 80 mit
Warnung, weil Lets Encrypt von aussen prueft). Ohne Befund ist der
Rueckgabewert 1, damit sich das auswerten laesst. In der Oberflaeche
steckt derselbe Bericht unter "Firewall pruefen".

Nebenbei: env_set hat Werte mit Leerzeichen samt Anfuehrungszeichen in
die laufende Umgebung exportiert. In der Datei gehoeren sie hin, im
Wert nicht - das fiel erst mit den Beschreibungen in FW_EXTRA_PORTS auf.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-20 19:46:33 +02:00

223 lines
9.4 KiB
Bash

# =====================================================================
# Checkmk + NGINX Proxy Manager - zentrale Konfiguration
# Kopieren nach ".env" und anpassen: cp .env.example .env
#
# Diese Datei ist die EINZIGE Quelle der Wahrheit. Sie wird gelesen von
# * docker-compose.yml / podman-compose (Variablen-Ersetzung)
# * der systemd-Unit (EnvironmentFile=)
# * scripts/cmk-manage.sh (source)
# Das Verwaltungsskript SCHREIBT hier nur hinein (z.B. CMK_IMAGE),
# es haelt keine zweite Konfiguration.
#
# Werte mit Leerzeichen bitte in Anfuehrungszeichen setzen.
# =====================================================================
# ---------------------------------------------------------------------
# Container-Runtime (leer = automatische Erkennung: docker oder podman)
# ---------------------------------------------------------------------
CMK_RUNTIME=
# =====================================================================
# CHECKMK-IMAGE
# =====================================================================
# Das ist der einzige Wert, den compose/systemd tatsaechlich verwendet.
#
# IMMER VOLLQUALIFIZIERT ANGEBEN (mit Registry-Praefix)!
# Podman loest kurze Namen ueber "unqualified-search-registries" auf -
# auf RHEL steht dort registry.access.redhat.com an erster Stelle. Ein
# kurzer Name wie "checkmk/check-mk-enterprise" wird deshalb dort gesucht
# und nicht gefunden ("image not known") oder es erscheint eine Abfrage.
#
# Beispiele:
# docker.io/checkmk/check-mk-raw:2.3.0-latest
# registry.checkmk.com/enterprise/check-mk-enterprise:2.3.0p23
# localhost/checkmk/check-mk-enterprise:2.3.0p23 (aus Tarball geladen)
CMK_IMAGE=docker.io/checkmk/check-mk-raw:2.3.0-latest
# ---------------------------------------------------------------------
# Nur fuer den Image-Downloader: scripts/cmk-manage.sh image ...
# Daraus wird CMK_IMAGE ermittelt und oben automatisch eingetragen.
# ---------------------------------------------------------------------
# Edition:
# raw Docker Hub, frei (bis 2.4)
# community Docker Hub, frei (ab 2.5, Nachfolger von "raw")
# enterprise NUR registry.checkmk.com oder Tarball - NICHT auf Docker Hub!
# pro Docker Hub (ab 2.5, Nachfolger von "enterprise")
# cloud Docker Hub
# managed Docker Hub (bis 2.4)
# ultimate Docker Hub (ab 2.5)
# ultimatemt Docker Hub (ab 2.5, Nachfolger von "managed")
CMK_EDITION=raw
# Konkrete Version. Fuer den Tarball-Download muss eine exakte Version
# angegeben werden (z.B. 2.3.0p23), "-latest" funktioniert dort nicht.
CMK_VERSION=2.3.0-latest
# Woher soll das Image geholt werden, wenn es lokal fehlt?
# auto erst Registry, dann Downloadportal (Vorgabe)
# registry nur aus der Registry
# download nur als Tarball vom Downloadportal
# Hintergrund: Registries halten meist nur die juengsten Patchstaende
# vor. Eine aeltere Version - etwa die einer zu migrierenden Site -
# liegt dann nur noch im Downloadportal.
CMK_IMAGE_SOURCE=auto
# --- Bezugsweg 1: private Registry (Enterprise) ----------------------
# Zugangsdaten aus dem Checkmk-Kundenportal (portal.checkmk.com)
CMK_REGISTRY=registry.checkmk.com
CMK_REGISTRY_USER=
CMK_REGISTRY_PASSWORD=
# --- Bezugsweg 2: Image-Tarball vom Download-Portal ------------------
# Zugangsdaten der Checkmk-Downloadseite. Der Downloader probiert die
# ueblichen Dateinamen unter <BASEURL>/<version>/ durch; mit
# CMK_DOWNLOAD_URL laesst sich die vollstaendige URL fest vorgeben.
CMK_DOWNLOAD_BASEURL=https://download.checkmk.com/checkmk
CMK_DOWNLOAD_URL=
CMK_DOWNLOAD_USER=
CMK_DOWNLOAD_PASSWORD=
# =====================================================================
# CHECKMK-LAUFZEIT
# =====================================================================
CMK_CONTAINER_NAME=checkmk
CMK_HOSTNAME=checkmk
# Site, die der Container beim Start automatisch anlegt/startet.
# Bei einer Migration hier den Namen der importierten Site eintragen!
CMK_SITE_ID=cmk
# Initiales Passwort fuer den Benutzer "cmkadmin" (nur bei Neuanlage relevant)
CMK_PASSWORD=bitte-aendern
# Livestatus via TCP (Port 6557) fuer verteilte Umgebungen: on / off
CMK_LIVESTATUS_TCP=off
# Optionaler SMTP-Relay fuer Benachrichtigungen
MAIL_RELAY_HOST=
# Zeitzone
TZ=Europe/Berlin
# =====================================================================
# NGINX PROXY MANAGER (HTTPS: Let's Encrypt ODER selbstsigniert)
# =====================================================================
# Ebenfalls vollqualifiziert - siehe Hinweis oben zu Podman!
# Soll der Proxy-Manager-Container ueberhaupt betrieben werden?
# on = wird gebaut und gestartet (Vorgabe)
# off = wird weder angelegt noch gestartet - sinnvoll, wenn die
# HTTPS-Terminierung ein bereits vorhandener NGINX auf einem
# anderen System uebernimmt. Der leitet dann auf Port 5000 weiter.
# Die Daten unter ./data/npm bleiben beim Abschalten erhalten.
# Umschalten ueber das Menue oder: ./scripts/cmk-manage.sh npm-enable off
NPM_ENABLED=on
NPM_IMAGE=docker.io/jc21/nginx-proxy-manager:2
NPM_CONTAINER_NAME=nginx-proxy-manager
NPM_DISABLE_IPV6=true
# Erstes Administratorkonto.
# WICHTIG: Ohne diese beiden Werte zeigt der Proxy Manager beim ersten
# Aufruf einen Einrichtungsassistenten im Browser - die frueher ueblichen
# Standardzugangsdaten admin@example.com/changeme gibt es seit 2.15 NICHT
# mehr. Mit den Werten legt der Container das Konto beim ERSTEN Start
# selbst an (nur bei leerer Datenbank) und die REST-API ist sofort
# nutzbar - damit funktioniert "cmk-manage.sh proxy ...".
# Ist das Konto bereits von Hand angelegt, hier dessen Daten eintragen.
NPM_ADMIN_EMAIL=admin@example.com
NPM_ADMIN_PASSWORD=bitte-aendern-mindestens-8-zeichen
# Port der Adminoberflaeche. Vorgabe im Image ist fest 81; ein abweichender
# Port wird ueber einen zusaetzlichen nginx-Server bereitgestellt.
# NICHT von Hand aendern - dabei muss die nginx-Zusatzdatei mitgezogen werden:
# ./scripts/cmk-manage.sh npm-port 10443
# oder im Menue unter "Einstellungen".
NPM_ADMIN_PORT=81
# =====================================================================
# TERMINAL-BROWSER (lokale Bedienung des Proxy Managers)
# Fuer den Fall, dass Port 81 von aussen nicht erreichbar ist.
# Aufruf: ./scripts/cmk-manage.sh browser
# =====================================================================
# Vorgaben fuer "cmk-manage.sh proxy add" (Proxy-Host fuer Checkmk)
PROXY_DOMAIN=
PROXY_FORWARD_HOST=127.0.0.1
PROXY_FORWARD_PORT=5000
# Startseite des Browsers. Leer = automatisch aus NPM_ADMIN_PORT abgeleitet.
NPM_ADMIN_URL=
# Vorgabe-Engine: browsh | carbonyl | links | w3m | lynx | shell
# ACHTUNG: nur browsh und carbonyl koennen JavaScript und damit die
# Oberflaeche des Proxy Managers darstellen.
BROWSER_ENGINE=browsh
# Images der Engines (vollqualifiziert - siehe Podman-Hinweis oben)
BROWSH_IMAGE=docker.io/browsh/browsh:v1.8.3
CARBONYL_IMAGE=docker.io/fathyb/carbonyl:latest
# Selbst gebautes Werkzeug-Image (Textbrowser, curl, jq, openssl).
# Leer lassen - das Skript waehlt automatisch den zur Runtime passenden
# Namen (Podman braucht das Praefix "localhost/", Docker darf es nicht haben).
BROWSER_TOOLS_IMAGE=
# =====================================================================
# PFADE (relativ zum Projektverzeichnis)
# Ausschliesslich Bind-Mounts - keine Docker/Podman-Volumes!
# =====================================================================
CMK_DATA_DIR=./data/checkmk/sites
NPM_DATA_DIR=./data/npm/data
NPM_LE_DIR=./data/npm/letsencrypt
# Ablage fuer MANUELLE Backups und Migrations-Bundles.
# Geplante Jobs bringen ihr eigenes Zielverzeichnis mit (backup-jobs.conf).
BACKUP_DIR=./backups
# Sollen die Backup-Jobs automatisch per cron laufen?
# Umschalten ueber das Menue oder: ./scripts/cmk-manage.sh job auto on
BACKUP_AUTO=off
IMAGE_DIR=./images
# =====================================================================
# SELBSTSIGNIERTES ZERTIFIKAT (Vorgaben fuer "cmk-manage.sh cert")
# =====================================================================
CERT_DOMAIN=checkmk.example.local
CERT_DAYS=3650
CERT_COUNTRY=DE
CERT_ORG="Beispiel GmbH"
# ---------------------------------------------------------------------
# Firewall: was von aussen erreichbar sein muss
#
# Diese Werte oeffnen nichts von selbst - sie sagen "cmk-manage.sh
# firewall", welche Ports dieser Aufbau braucht.
# ---------------------------------------------------------------------
# Rolle im verteilten Monitoring:
# single - eigenstaendige Site (Vorgabe)
# central - Zentrale; baut die Verbindungen selbst auf, braucht
# eingehend nichts zusaetzlich
# remote - Remote-Site; die Zentrale fragt hier Livestatus (6557) ab,
# dazu muss CMK_LIVESTATUS_TCP=on gesetzt sein
FW_ROLE=single
# Event Console: Syslog annehmen - off, udp, tcp oder beide (Port 514)
FW_EC_SYSLOG=off
# Event Console: SNMP-Traps annehmen (Port 162/udp)
FW_EC_SNMPTRAP=off
# Event Console: Status und Ereignisse ueber TCP (Port 6558)
FW_EC_TCP=off
# Laeuft auf diesem Host ein Checkmk-Agent, der im Pull-Betrieb
# abgefragt wird? (Port 6556/tcp)
FW_AGENT=off
# Weitere Ports, die mitgeprueft werden sollen - durch Komma getrennt,
# Beschreibung nach dem Gleichheitszeichen. Ohne Protokoll gilt tcp.
# Enthaelt eine Beschreibung Leerzeichen, gehoert der ganze Wert in
# Anfuehrungszeichen (das erledigt "cmk-manage.sh config set" selbst).
# FW_EXTRA_PORTS=3000/tcp=Grafana,5667/tcp=NSCA,514/udp=Syslog
FW_EXTRA_PORTS=