Files
2026-01-29 12:44:46 +01:00

9.4 KiB

Dokumentation: ISPConfig & Proxy Inventar (proxy-inventory.sh)

Beschreibung

Dieses Skript dient der automatisierten Statusprüfung aller in ISPConfig (Version 3.3.0p3) verwalteten Web-Domains.

Das Tool gleicht den Datenbankbestand mit der tatsächlichen Nginx-Konfiguration auf dem Proxy-Server ab und validiert den aktuellen DNS-Status.

Kernfunktionen

  • Datenbank-Abgleich: Extrahiert aktive Web-Domains (vhost, alias, subdomain) direkt aus der ISPConfig-Datenbank.
  • Proxy-Validierung: Prüft die Existenz der zugehörigen Nginx-Konfigurationsdateien im definierten Verzeichnis.
  • Routing-Analyse: Liest die Ziel-IP (proxy_pass) aus den generierten Konfigurationen aus.
  • DNS-Live-Check: Verifiziert mittels dig, ob der AAAA-Record der Domain korrekt auf die Infrastruktur zeigt.
  • Automatischer Export: Generiert eine tabellarische Übersicht unter /var/www/html/proxy_inventory.txt.

Voraussetzungen

  • System: Linux-basiert (getestet auf Debian 12, Proxmox Hostserver mit LCX und VM als Client. Proxysever VM).
  • Abhängigkeiten: mysql-client, bind9-host (für dig), grep, sed.
  • Konfigurationsdateien:
    • /usr/local/bin/sync-ispconfig-proxy.conf: Enthält Datenbank-Zugangsdaten.
    • /usr/local/bin/proxy_based_server.conf: Enthält die Liste der zu prüfenden Quell-Server.

Installation & Einrichtung

  1. Das Skript proxy-inventory.sh nach /usr/local/bin/ kopieren.
  2. Ausführungsrechte setzen: chmod +x /usr/local/bin/proxy-inventory.sh.
  3. Sicherstellen, dass die Datei /usr/local/bin/sync-ispconfig-proxy.conf lesbar ist und die Variablen DB_HOST, DB_USER, DB_PASS und DB_NAME definiert.

Nutzung

Das Skript kann ohne Parameter zur vollständigen Inventarisierung oder mit Filtern aufgerufen werden:

Parameter Beschreibung Beispiel
DOMAIN Filtert nach Domainname (Wildcards möglich) ./proxy-inventory.sh knut*
ID <n> Filtert nach der ISPConfig Server-ID ./proxy-inventory.sh ID 17
PROXY <status> Filtert nach Proxy-Status (OK / FEHLT) ./proxy-inventory.sh PROXY FEHLT
DNS <status> Filtert nach DNS-Status (OK / N/A) ./proxy-inventory.sh DNS N/A
MODUS <typ> Filtert nach Modus (NORMAL / DUMMY) ./proxy-inventory.sh MODUS DUMMY

Status-Definitionen

  • PROXY OK: Nginx-Konfigurationsdatei ist vorhanden.
  • PROXY FEHLT: Domain in ISPConfig aktiv, aber keine Proxy-Konfiguration gefunden.
  • DNS OK: AAAA-Record der Domain zeigt auf das korrekte Ziel.
  • DNS N/A: Domain löst nicht auf oder zeigt auf eine abweicheichende IPv6.

Parameter-Referenz

Parameter Beschreibung Beispiel
[DOMAIN] Filtert das Inventar nach Domainname (unterstützt Wildcards wie *). ./proxy-inventory.sh "suchwort*"
ID <n> Filtert die Ergebnisliste nach einer spezifischen ISPConfig Server-ID. ./proxy-inventory.sh ID 17
PROXY <status> Filtert nach dem Proxy-Status: OK (vorhanden) oder FEHLT. ./proxy-inventory.sh PROXY FEHLT
DNS <status> Filtert nach dem DNS-Status: OK oder N/A. ./proxy-inventory.sh DNS N/A
MODUS <typ> Filtert nach dem Modus: NORMAL oder DUMMY. ./proxy-inventory.sh MODUS DUMMY
-h / --help Zeigt die Hilfe-Seite mit Beispielen für das Inventar-Script an. ./proxy-inventory.sh --help

ISPConfig Proxy Sync Script (sync-ispconfig-proxy.sh)

Beschreibung

Dieses Skript automatisiert die Synchronisation von Web-Domains zwischen einem ISPConfig-Master (Version 3.3.0p3) und einem Nginx-Proxy-Server. Es überwacht Änderungen in der ISPConfig-Datenbank und generiert dynamisch Nginx-Vhost-Konfigurationen inklusive SSL-Zertifikatsverwaltung via acme.sh.

Kernfunktionen

  • Safe Lock Mechanism: Verwendet lockfile, um parallele Ausführungen zu verhindern und die Systemstabilität zu gewährleisten.
  • Datalog-basierte Synchronisation: Erkennt Änderungen effizient über die sys_datalog-Tabelle, anstatt bei jedem Durchlauf alle Domains zu verarbeiten.
  • Auto-Subdomain Support: Erkennt automatisch die ISPConfig-Einstellung für www. Subdomains und inkludiert diese in die Nginx-Konfiguration sowie in das SSL-Zertifikat.
  • SSL/TLS Automatisierung: Integriert acme.sh zur automatischen Ausstellung und Erneuerung von Let's Encrypt (ECC) Zertifikaten.
  • Routed-IP Logik: Unterstützt IPv6-Routing und mappt spezifische interne Netze (z.B. ::113) automatisch auf die korrekten Ziel-IPs.
  • Hybrid-Serving: Erkennt lokale Web-Verzeichnisse (/var/www/domain/web) und konfiguriert Nginx so, dass statische Dateien lokal bedient und dynamische Anfragen an den Backend-Server weitergeleitet werden.

Konfiguration & Dateien

  • Konfiguration: /usr/local/bin/sync-ispconfig-proxy.conf.
  • Server-Liste: /usr/local/bin/proxy_based_server.conf (Definiert die zu synchronisierenden Quell-Server).
  • Status-Speicher: /var/local/sync-ispconfig-last-id (Speichert den letzten verarbeiteten Datenbank-Index).

Nutzung & Parameter

Das Skript kann manuell oder via Cronjob aufgerufen werden:

./sync-ispconfig-proxy.sh [DOMAIN] [Optionen]

Parameter-Referenz

Parameter Beschreibung Beispiel
[DOMAIN] Beschränkt die Ausführung auf eine spezifische Domain. ./sync-ispconfig-proxy.sh example.com
test Dry-Run: Simuliert alle Schritte ohne Nginx-Configs zu schreiben oder Dienste zu laden. ./sync-ispconfig-proxy.sh test
force Ignoriert den Zeitstempel/ID der letzten Änderung und verarbeitet den gesamten Bestand. ./sync-ispconfig-proxy.sh force
renew / repair Erzwingt die Neuausstellung aller betroffenen SSL-Zertifikate (acme.sh --force). ./sync-ispconfig-proxy.sh renew
-debug Aktiviert detaillierte Ausgaben (z.B. SQL-Queries und interne Variablen). ./sync-ispconfig-proxy.sh -debug

Kombination & Priorität

Die Parameter können kombiniert werden, um das Verhalten präzise zu steuern. Dabei gilt folgende Priorisierung:

  1. Sicherheits-Priorität (test): Der Parameter test überschreibt alle schreibenden Aktionen. Auch wenn force oder renew gesetzt sind, wird im Testmodus nichts am System verändert.
  2. Scope-Priorität ([DOMAIN] vor force): Wenn eine spezifische DOMAIN angegeben wird, hat diese Vorrang. Der Parameter force wird in diesem Fall ignoriert, da das Skript gezielt nur diesen einen Datensatz anspricht.
  3. Aktions-Priorität (renew): Wird renew mit force kombiniert, werden konsequent für alle in ISPConfig aktiven Domains die Zertifikate neu angefordert.

Gängige Kombinationen:

  • ./sync-ispconfig-proxy.sh example.com renew: Erneuert gezielt nur das Zertifikat für example.com.
  • ./sync-ispconfig-proxy.sh force -debug: Verarbeitet alle Domains neu und zeigt dabei die SQL-Abfragen zur Fehleranalyse an.
  • ./sync-ispconfig-proxy.sh renew test: Simuliert die Erneuerung aller Zertifikate, ohne acme.sh tatsächlich aufzurufen.

Kombination und Priorität (sync-ispconfig-proxy.sh)

Kombination Ergebnis
domain.de renew Verarbeitet nur domain.de und erzwingt für diese ein neues Zertifikat.
force renew Verarbeitet alle Domains der Datenbank und erzwingt für alle neue Zertifikate.
domain.de force Verarbeitet nur domain.de. (Der Parameter force wird ignoriert).
force test Simuliert die Verarbeitung aller Domains (Dry-Run), ohne Änderungen vorzunehmen.
renew test Simuliert die Erneuerung aller Zertifikate (Dry-Run).
domain.de renew test Simuliert die Erneuerung nur für domain.de (Dry-Run).

Prioritäts-Regel: 1. test (Verhindert jegliche Änderung) 2. [DOMAIN] (Beschränkt auf ein Ziel, ignoriert globalen force) 3. force (Erfasst alles, falls keine Domain definiert ist)

ISPConfig Proxy Cleanup Script (sync-ispconfig-cleanup.sh)

Beschreibung

Dieses Skript dient der Bereinigung des Proxy-Servers von verwaisten Konfigurationsdateien. Es vergleicht die lokal unter /etc/nginx/conf.d/proxy_generated vorhandenen .conf-Dateien mit den aktiven Domains in der ISPConfig-Datenbank (Version 3.3.0p3). Dateien, die keiner aktiven Domain mehr zugeordnet sind und nicht auf einer geschützten Blocklist stehen, werden entfernt.

Kernfunktionen

  • Verwaisten-Check: Identifiziert lokale Nginx-Konfigurationen, die in ISPConfig gelöscht oder deaktiviert wurden.
  • Blocklist-Schutz: Ignoriert Dateien, die in der proxy_based_server.conf unter der Sektion [blocklist] definiert sind, um manuelle Spezialkonfigurationen zu schützen.
  • Sicherheits-Lock: Verwendet ein Lockfile (/tmp/restart.cleanproxy.lock), um gleichzeitige Ausführungen zu verhindern.
  • Integritätsprüfung: Führt nach Löschvorgängen automatisch einen nginx -t Syntax-Check durch, bevor der Dienst neu geladen wird.

Parameter-Referenz

Parameter Beschreibung Beispiel
-e / --execute Führt den Löschvorgang und den Nginx-Reload tatsächlich aus (Standard ist Dry-Run). ./sync-ispconfig-cleanup.sh --execute
-h / --help Zeigt die Hilfe und Nutzungsinformationen an. ./sync-ispconfig-cleanup.sh --help

Hinweis: Ohne den Parameter -e startet das Skript immer im Dry-Run Modus und zeigt lediglich an, welche Dateien gelöscht würden, ohne physische Änderungen am Dateisystem vorzunehmen.