# 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 ` | Filtert nach der ISPConfig Server-ID | `./proxy-inventory.sh ID 17` | | `PROXY `| Filtert nach Proxy-Status (OK / FEHLT) | `./proxy-inventory.sh PROXY FEHLT` | | `DNS ` | Filtert nach DNS-Status (OK / N/A) | `./proxy-inventory.sh DNS N/A` | | `MODUS ` | 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 ` | Filtert die Ergebnisliste nach einer spezifischen ISPConfig Server-ID. | `./proxy-inventory.sh ID 17` | | `PROXY ` | Filtert nach dem Proxy-Status: `OK` (vorhanden) oder `FEHLT`. | `./proxy-inventory.sh PROXY FEHLT` | | `DNS ` | Filtert nach dem DNS-Status: `OK` oder `N/A`. | `./proxy-inventory.sh DNS N/A` | | `MODUS ` | 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: ```bash ./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.