Files
IPV4-proxyserver-zu-IPV6-on…/README.md
2026-02-25 17:50:47 +01:00

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ü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:

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.

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.


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 Authorization und Destination standardmäß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;