Dokumentation: ISPConfig & Proxy Inventar (proxy-inventory.sh)
Beschreibung
Dieses Skript dient der automatisierten Inventarisierung und Statusprüfung aller in ISPConfig (Version 3.3.0p3) verwalteten Web-Domains. Es wurde speziell für ein Routed-Setup auf Hetzner-Systemen entwickelt, bei dem keine separaten MAC-Adressen verwendet werden.
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 openSUSE Tumbleweed/Hidalgo).
- 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
| Script | Parameter | Beschreibung | Beispiel |
|---|---|---|---|
proxy-inventory.sh |
[DOMAIN] |
Filtert das Inventar nach Domainname; unterstützt Wildcards wie *. |
./proxy-inventory.sh "knut*" |
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:
./sync-ispconfig-proxy.sh [DOMAIN] [Optionen]
### Parameter-Referenz
| Script | Parameter | Beschreibung | Beispiel |
| :--- | :--- | :--- | :--- |
| **`sync-ispconfig-proxy.sh`** | `[DOMAIN]` | Synchronisiert gezielt nur eine bestimmte Domain oder deren Parent-Domain. | `./sync-ispconfig-proxy.sh example.com` |
| | `test` | Aktiviert den Test-Modus: Simuliert den Lauf ohne Änderungen an Nginx oder SSL. | `./sync-ispconfig-proxy.sh test` |
| | `force` | Erzwingt die Verarbeitung aller Domains, unabhängig vom Datalog-Status. | `./sync-ispconfig-proxy.sh force` |
| | `renew` / `repair` | Erzwingt eine Neuausstellung der SSL-Zertifikate via acme.sh. | `./sync-ispconfig-proxy.sh renew` |
| | `-debug` | Aktiviert den Debug-Modus und gibt u.a. die SQL-Queries in der Konsole aus. | `./sync-ispconfig-proxy.sh -debug` |
# 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.