Einstellungen

Dieser Assistent richtet den EXO Signature Gateway ein. Führe die Schritte der Reihe nach aus. Bereits abgeschlossene Schritte sind grün markiert.

Du migrierst dieses Gateway auf einen neuen Server und hast ein Backup?
1 Adminzugang sichern Aktion erforderlich

Es ist noch ein Standard-/Platzhalter-Passwort aktiv (admin bzw. changeme). Bitte jetzt ein sicheres Passwort setzen.

2 Öffentlicher Hostname hv01.test.zarenko.net

Der öffentliche DNS-Name dieses Servers (z.B. mail.contoso.com). Er wird für Let's Encrypt, das TLS-Zertifikat und den EXO Outbound Connector verwendet.

2.1 TLS-Zertifikat Zertifikat vorhanden — HTTPS aktiv

Aktiviert HTTPS für das Web-UI und stellt das TLS-Client-Zertifikat bereit, das der EXO Inbound Connector für die Signaturprüfung benötigt (nur SMTP-Modus). Drei Wege — je nachdem, ob Port 80 offen ist und ob schon ein Zertifikat vorliegt.

1 · Let's Encrypt (HTTP) — Port 80 muss öffentlich erreichbar sein.
2 · Vorhandenes Zertifikat importieren (PFX/PKCS#12)

Für Betreiber, die Port 80 nicht öffnen wollen und bereits ein Zertifikat haben (auch Wildcard oder interne CA). Das Zertifikat muss zum Hostnamen oben passen.

3 · Let's Encrypt über DNS-01 (ohne Port 80)

Ohne offenen Port 80 und ohne vorhandenes Zertifikat: Du setzt einen TXT-Record im DNS, danach stellt Let's Encrypt aus.

⚠️ Manuell: Die Erneuerung (~alle 90 Tage) musst du auf diesem Weg jedes Mal wiederholen. Wo möglich ist Weg 1 oder ein importiertes Zertifikat pflegeleichter.

Ein Zertifikat ist aktiv. Nach einer Neuausstellung wechselt das Web-UI automatisch zu HTTPS; HTTP wird weitergeleitet.

3 Modus & Funktionen SMTP Port 25

Wähle, wie bearbeitete Mails zurück an Exchange Online geliefert werden. Die Wahl bestimmt, welche weiteren Schritte nötig sind.

S/MIME erfordert SMTP Port 25 oder IMAP + Graph. Im Modus Graph API wird der Haken entfernt und lässt sich nicht setzen.

3.1 Gateway-Name Vor dem Anlegen setzen

Präfix für alle in Exchange angelegten Objekte (Outbound Connector, Transportregeln, Verteilerlisten) und den Namen der App-Registrierung. Jetzt setzen — eine spätere Änderung wirkt erst nach erneutem Ausführen des Assistenten.

4 Entra-Login Ausstehend

1 · Bootstrap-App (Login-Registrierung)

Für den Setup-Login wird eine eigene App-Registrierung benötigt (Microsoft- Public-Clients erlauben unsere Redirect-URI /auth/callback nicht). Hast du bereits eine, trage nur die Client-ID ein — andernfalls lege sie so an:

  1. Öffne das Entra Admin Center → App-Registrierungen
  2. Klicke „Neue Registrierung"
  3. Name: z.B. EXO Signature Gateway Login
  4. Kontotyp: Nur Konten in diesem Organisationsverzeichnis
  5. Redirect-URI-Typ „Public client/native (mobile & desktop)" wählen (im Anmelde-Dialog so benannt; unter Authentifizierung heißt dieselbe Plattform „Mobile and desktop applications"). Redirect-URI exakt:
    https://hv01.test.zarenko.net/auth/callback
    Kein Port, kein Slash am Ende — sonst AADSTS50011. Gleich mit hinzufügen: http://localhost:8080/auth/callback (Localhost-Notausgang).
    Warum diese Plattform (nicht „Web"/„SPA")? „Web" verlangt für den Code-Austausch immer ein Client-Secret (auch mit aktivierten öffentlichen Clientflows) → AADSTS7000218. „SPA" verlangt den Token-Austausch per Browser-CORS-Request — unserer läuft serverseitig → AADSTS9002327. „Mobile and desktop applications" erlaubt als einziger Typ PKCE ohne Secret UND serverseitigen Austausch ohne Origin-Zwang.
  6. Klicke Registrieren
  7. Unter „Authentifizierung" ganz unten: „Öffentliche Clientflows zulassen" → Ja stellen und speichern.
    Muss explizit an sein — wird beim Anlegen der Plattform nicht zuverlässig automatisch gesetzt.
  8. Kopiere die Anwendungs-ID (Client-ID) und füge sie unten ein

2 · Als Entra-Administrator anmelden

Erst die Bootstrap-App oben konfigurieren (Client-ID speichern) — dann wird die Anmeldung freigeschaltet.
5 Entra App-Registrierung Wird nach Schritt 4 automatisch erledigt

Erstellt nach erfolgreichem Entra-Login (Schritt 4).

POOL App-Pool konfigurieren (optional) Optional

Für sehr hohes Mail-Aufkommen können mehrere App-Registrierungen im Round-Robin genutzt werden, um die Graph-API-Drosselung zu verteilen.

Dieser Schritt ist optional. Bei < 500 Postfächern ist eine App ausreichend.

KEY VAULT Azure Key Vault (optional) Optional

Private S/MIME-Schlüssel werden in Azure Key Vault gespeichert. Jede Signierung ruft die Key Vault Sign API auf — der Schlüssel verlässt Azure nie. Optional und benötigt eine Azure-Subscription — grundsätzlich empfehlenswert, besonders wenn das Gateway selbst in Azure läuft. Ohne Azure-Subscription kann dieser Schritt übersprungen werden.

Erst Schritt 5 (Entra App-Registrierung) abschließen.

Key Vault URL direkt unten eintragen — oder oben den Assistenten aktivieren.

Format: https://<vaultname>.vault.azure.net
6 EXO Outbound Connector + Transport Rule Ausstehend

Erstellt in Exchange Online (Loop-Back-Architektur):

  • Outbound Connectorhv01.test.zarenko.net:25 (EXO → Gateway)
  • Inbound Connectorhv01.test.zarenko.net (Gateway → EXO, TLS required)
  • Transport Rule: alle ausgehenden Mails via Gateway, außer X-Sig-Applied: 1

Erst Schritt 3 (Entra-Login) abschließen.
S/MIME S/MIME – Inbound Transport-Regeln Optional

Erstellt zwei Transport-Regeln in Exchange Online:

  • Signierte Mails: Externe signierte Eingangs-Mails werden über das Gateway geleitet. Das Gateway entfernt S/MIME-Signatur, sammelt Public Key des Absenders und ergänzt den Betreff ([signiert von Max Mustermann]).
  • Verschlüsselte Mails: Das Gateway entschlüsselt mit dem privaten Schlüssel des internen Empfängers und ergänzt Betreff ([verschlüsselt] oder [verschlüsselt, signiert von …]).
    Voraussetzung: privater Schlüssel unter S/MIME → Signatur-Zertifikate importiert.
Erst Schritt 6 (EXO Connector) abschließen.
7 Verbindungstest & Abnahme Ausstehend

Sende eine Test-Mail durch den Service und bestätige, dass die Signatur korrekt eingefügt wird.

Abnahme — Betriebsbereitschaft

Geht jeden Punkt durch, den ein laufendes Gateway erfüllen muss — Erreichbarkeit, Anmeldung, Exchange, Signaturvorlage, aktivierte Postfächer, Rückweg, Benachrichtigung.

Entra-Konten für SSO-Login Noch keine Entra-Konten

Ohne Entra-Konto funktioniert der SSO-Login nicht. Trage mindestens einen Admin-UPN ein, damit du dich künftig mit deinem Microsoft-Konto anmelden kannst.

Entra-Konten verwalten →
WATCHER Update-Watcher-Service Nicht erkannt

Der Update-Watcher ist ein systemd-Dienst auf dem Host, der Aktualisierungen aus dem Web UI (Erweitert → Gateway aktualisieren) entgegennimmt. Bei einer Azure-Neuinstallation (azure-vm-setup.ps1) wird er automatisch eingerichtet; auf anderen Wegen (selbst gehostet – z. B. Linux-Host, Raspberry Pi –, on-prem, reines docker compose) einmalig mit dem Installer unten.
● Service nicht erkannt — bitte einmalig per SSH einrichten.

Einrichtung auf dem Host (einmalig)

Am einfachsten per SSH auf dem Host, aus dem Gateway-Verzeichnis:

sudo bash install-update-watcher.sh

Oder den systemd-Dienst von Hand anlegen (führt dasselbe aus):

ssh azureuser@hv01.test.zarenko.net

sudo chmod 755 /opt/exo-gateway/update-watcher.sh

sudo tee /etc/systemd/system/exo-gateway-updater.service > /dev/null << 'UNITEOF'
[Unit]
Description=EXO Gateway Update Watcher
After=docker.service
Requires=docker.service

[Service]
ExecStart=/opt/exo-gateway/update-watcher.sh
Restart=always
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
UNITEOF

sudo systemctl daemon-reload
sudo systemctl enable --now exo-gateway-updater
sudo systemctl status exo-gateway-updater --no-pager

Nach ca. 60 Sekunden schreibt der Service seinen ersten Heartbeat — dann wird dieser Schritt automatisch als erledigt markiert (Seite neu laden).

ADD-IN Outlook Add-in
Zeigt die Gateway-Signatur beim Verfassen direkt in Outlook — wird einmalig im M365 Admin Center deployt