9.9 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ürdig),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
- Das Skript
proxy-inventory.shnach/usr/local/bin/kopieren. - Ausführungsrechte setzen:
chmod +x /usr/local/bin/proxy-inventory.sh. - Sicherstellen, dass die Datei
/usr/local/bin/sync-ispconfig-proxy.conflesbar ist und die VariablenDB_HOST,DB_USER,DB_PASSundDB_NAMEdefiniert.
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.shzur 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:
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:
- Sicherheits-Priorität (
test): Der Parametertestüberschreibt alle schreibenden Aktionen. Auch wennforceoderrenewgesetzt sind, wird im Testmodus nichts am System verändert. - Scope-Priorität (
[DOMAIN]vorforce): Wenn eine spezifischeDOMAINangegeben wird, hat diese Vorrang. Der Parameterforcewird in diesem Fall ignoriert, da das Skript gezielt nur diesen einen Datensatz anspricht. - Aktions-Priorität (
renew): Wirdrenewmitforcekombiniert, werden konsequent für alle in ISPConfig aktiven Domains die Zertifikate neu angefordert.
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.confunter 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 -tSyntax-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.
ISPConfig Proxy Nginx Template (sync-ispconfig-nginx.tpl)
Beschreibung
Dieses Template lagert die Erstellung der Nginx-Konfiguration aus dem Haupt-Sync-Skript aus. Es behebt spezifische Verbindungsprobleme, die bei iOS-Geräten (Safari) und WebDAV-Clients (Nextcloud/ownCloud) in einer IPv4-zu-IPv6-Proxy-Umgebung auftreten.
Gelöste Probleme (iOS / Safari & Nextcloud)
- WebDAV-Authentifizierung: Nginx reicht die Header
AuthorizationundDestinationstandardmäßig nicht durch. Dies verhinderte Logins und Dateifreigaben in der iOS-App. - WebSocket-Protokollinkonsistenz: Ein hart codiertes Blockieren (
proxy_hide_header Upgrade) oder fehlerhaftes Erzwingen (Connection "upgrade") führte zu Abbrüchen regulärer HTTP/2-Verbindungen unter Safari. - Timeouts bei großen Uploads: Aktives Proxy-Buffering verursachte bei "Chunked Transfers" im Mobilfunknetz Verbindungsabbrüche.
- Bash-Escaping-Fehler: Die direkte Generierung der Nginx-Direktiven (wie
$host) im Hauptskript war fehleranfällig.
Kernkonfiguration
Die implementierten Proxy-Parameter gewährleisten eine transparente Durchreichung an das IPv6-Backend:
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Dynamischer WebSocket Support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
# Transparente Header-Weitergabe für WebDAV
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
proxy_set_header Destination $http_destination;
# Optimierung für große Uploads
proxy_read_timeout 3600;
proxy_send_timeout 3600;
proxy_redirect off;
proxy_buffering off;