Live-Audit der drei alten PMTA-Relays, Mandanten-zu-IP-Zuordnung über alle 41 App-Instanzen und sämtliche serverübergreifenden Datenflüsse, die für das Tunnel-Design relevant sind.
Jede konfigurierte Quell-IP ist tatsächlich gebunden — nirgendwo verwaiste vmtas. Aber ein Fünftel der gebundenen IPs hat nie eine Senderolle bekommen.
Nicht zugeordnet = Pools, auf die nur 380 verwaiste Routing-Regeln zeigen (Mandant in der App gelöscht, Konfiguration nie bereinigt). Zusammen mit dem ungenutzten Block: die primären Nicht-migrieren-Kandidaten — vorher orphan_rules.csv prüfen (API-/Transaktions-Sender tauchen nie in user_addresses auf).
Elf Subnetze sind praktisch voll belegt (247–253 IPs). Die meisten verteilen sich auf zwei oder drei Relays — genau deshalb erlaubt der V2-Tunnel, der jedes /24 an beiden Standorten announced, einen Umzug entlang der Mandanten statt entlang der Subnetze.
Join der Versanddomains aus user_addresses aller Instanzen gegen die PMTA-Regeln mail-from → vmtapool (aktive Regeln, dann auskommentierte Relikte, dann Pool-Namenskonvention). Jeder aktive echte Kunde aufgelöst; 2.218 IPs tragen einen Mandantennamen.
Alles zwischen App und MTA läuft bereits über externe IPs — es passiert den Tunnel unverändert. Sämtlicher interner Verkehr bleibt in Wien und endet mit der Hardware — sofern die unten vereinbarten Lösungen die zwei Wien-gebundenen Abhängigkeiten ersetzen. Entschieden: Der Tunnel selbst ist unverschlüsselt (bare L2) — daraus folgen verbindliche Regeln, siehe unten.
| Fluss | Pfad | IPs | Verschlüsselung | Status | Lösung |
|---|---|---|---|---|---|
| A | App → MTA SMTP :25/:2025 | öffentlich | STARTTLS | STARTTLS erzwingen | Tunnel unverschlüsselt → für standortübergreifenden Versand ist STARTTLS Pflicht (SMTP_STRICT_TLS vorhanden) |
| B | MTA → App Bounce-Feed, NFSv3 | öffentlich | Klartext | quert nie Standorte | NFS niemals über den Tunnel (Empfänger-PII im Klartext) — je migriertem Mandanten läuft die se2--Filter- + rsync/SSH-Pipeline, produktiv erprobt |
| C | Web → DB MySQL | intern | — | kein Einfluss | Web+DB je Mandant am selben Standort, ziehen gemeinsam um |
| D | middleware_common-Replikation 03 → 05/07/08/12 | intern | — | Lösung vereinbart | Sync alt → neu per Webhook oder ~10-Minuten-Cron über TLS/SSH, solange die Inhalte aus der alten Infrastruktur gepflegt werden |
| E | MTA → Web Unsubscribe + FBL, HTTPS | öffentlich | TLS | Fix je Instanz | siehe unten — eine Instances-Zeile je migrierter Instanz + eindeutige Instanznummern; FBL-Nachfolger zum Cutover |
| F | Backups NFS → old-03 | intern | — | gelöst | neue Infrastruktur sichert lokal — kein standortübergreifender Backup-Verkehr |
| G/H | Hoster-LDAP/SAN · Link 09↔07 | intern | — | kein Einfluss | an die Wiener Hardware gebunden / ungenutzt |
| I | Neue VM ↔ alte Flotte SMTP, rsync, SSH | öffentlich | TLS/SSH | läuft heute | quert das offene Internet bereits verschlüsselt — das Muster für alles darüber |
List-Unsubscribe-Antworten landen bei PMTAs unsubmail, das den zentralen Forwarder mit der numerischen Instanz-ID aufruft, die in jeder versendeten Mail steckt. Der Forwarder schlägt middleware_common.Instances → IemBaseUrl nach und leitet den Browser des Abonnenten per 302-Redirect zur Instanz. Im Code auf old-08 verifiziert.
| Punkt | Lösung |
|---|---|
| Alle 30 /24er portierbar | Wien → Leipzig; kleiner als /24 zieht nichts um. Der V2-Tunnel verankert jedes /24 während der Übergangszeit an beiden Standorten. |
| Tunnel unverschlüsselt | Bare L2, keine zusätzliche Schicht. Konsequenz: Klartext-Protokolle queren nie die Standorte; STARTTLS-Pflicht für standortübergreifendes SMTP; strikte IP-Verankerung je Welle. |
| middleware_common-Sync | Webhook oder ~10-Minuten-Cron, alt → neu, öffentliche IPs + TLS/SSH — ein Zusatzwerkzeug der Migration, ersetzt die interne MySQL-Replikation standortübergreifend. |
| Backups | Die neue Infrastruktur sichert auf ihrer Seite. Null Backup-Verkehr zwischen den Standorten. |
| Bounces | Gelöst: se2--Token-Filter auf old-04 + Abholung per rsync/SSH. Ende-zu-Ende mit einem echten old-13-Bounce nachgewiesen. |
| # | Punkt | Warum es zählt |
|---|---|---|
| 1 | STARTTLS-Durchsetzung App → MTA für standortübergreifenden Übergangsverkehr | Folge der Tunnel-Entscheidung: Klartext-SMTP darf den Tunnel nicht queren (Fluss A) |
| 2 | Instanznummern-Namensraum fürs Unsub-Routing | neue Instanzen dürfen keine lebenden Alt-Nummern wiederverwenden (Fluss E) |
| 3 | FBL-Empfänger-Nachfolger + Allowlist-Pflege | Kontinuität der Beschwerdeverarbeitung, wenn 02/13 stillgelegt werden |
| 4 | 948 nicht zugeordnete IPs prüfen via orphan_rules.csv | bevor sie als „nicht migrieren" gelten (versteckte API-Sender) |
| 5 | Resilienz old-03 — middleware-Master + Backup-Ziel der Flotte mit totem DRBD-Peer | Single Point of Failure für das gesamte Migrationsfenster |
| 6 | Hygiene: old-12 rpcbind :111 antwortet Internet-Scannern; NFS-Export-Beschränkungen der MTAs prüfen | Angriffsfläche verkleinern, solange Wien produktiv ist |