Microsoft Exchange Online auf Cryptshare-Appliances

Einleitung

Die Cryptshare-Appliance versendet Benachrichtigungs-E-Mails, wenn Updates für die zugrundeliegenden OpenSUSE-Komponenten verfügbar sind. Zu diesem Zweck ist ein lokaler Postfix-Server installiert, der in der Regel vom Cryptshare-Server konfiguriert wird. Dies geschieht jedoch nur automatisch, wenn ein regulärer SMTP-Server als Ziel für den lokalen Postfix verwendet wird. Falls Microsoft Exchange Online zusammen mit der OAuth-2.0-Authentifizierung genutzt wird, muss die Konfiguration von Postfix manuell vorgenommen werden.

Einrichtung

Postfix installieren

  1. Laden Sie das Paket sasl-xoauth2 für Ihre Version von openSUSE herunter und laden Sie es auf Ihre virtuelle Maschine hoch.

  2. Installieren Sie Postfix.

    zypper install postfix
  3. Konfigurieren Sie die E-Mail-Domäne.

    echo "<your-domain.com>" > /etc/mailname
  4. Installieren Sie das SASL-XOAUTH2-Paket:

    zypper install sasl-xoauth2-0.25-0.x86_64.rpm

Erstellen eines Dummy-Zertifikats für Postfix

Postfix benötigt ein Dummy-Zertifikat für die Verbindung zu Exchange.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem

Sie können dieses Zertifikat mit beliebigen Dummy-Werten erstellen.

Postfix konfigurieren

Öffnen Sie die Datei /etc/postfix/main.cf

vim /etc/postfix/main.cf

Konfigurieren Sie die Datei main.cf so, dass sie auf die richtige Domäne und die richtigen Hostnamen verweist, z. B.:

myorigin = /etc/mailname

biff = no

append_dot_mydomain = no

delay_warning_time = 0h

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_always_send_ehlo = yes
smtp_tls_security_level=encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = <hostname>
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, , <hostname>, localhost.localhost, localhost
relayhost = [smtp.office365.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = all
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options =
smtp_sasl_mechanism_filter = xoauth2
smtp_tls_security_level = encrypt
smtp_generic_maps = hash:/etc/postfix/generic
  • Richten Sie die Postfix-Datei generic.de ein

    touch /etc/postfix/generic
    postmap /etc/postfix/generic
  • Erstellen Sie das Verzeichnis, in dem das OAuth-Token gespeichert wird:

    mkdir -p /var/spool/postfix/etc/tokens
  • Setzen Sie die Berechtigungen so, dass Postfix das Token lesen kann:

    chown -R postfix:postfix /var/spool/postfix/etc/tokens
  • Starten Sie den Postfix-Dienst neu:

    systemctl restart postfix
  • Kopieren Sie die CA-Zertifikate in die chroot-Umgebung (⚠️ diese Datei wird bei jedem Neustart von Postfix gelöscht):

    cp /etc/ssl/certs/ca-certificates.crt /var/spool/postfix/etc/ssl/certs/ca-certificates.crt
  • Erstellen Sie die Datei /etc/postfix/sasl_passwd mit folgendem Inhalt:

    [smtp.office365.com]:587 <sendermail>:/etc/tokens/<sendermail>

    Beispiel:

    [smtp.office365.com]:587 john.doe@domain.com:/etc/tokens/john.doe@domain.com

    und setzen Sie die Berechtigungen:

    chmod 600 /etc/postfix/sasl_passwd
  • Generieren Sie die gehashte SASL-Passwort-Datenbank:

    postmap /etc/postfix/sasl_passwd

(Optional) Kopieren des Zertifikats mit systemd automatisieren

Wie wir gesehen haben, löscht der Postfix-Dienst bei jedem Start die Datei /var/spool/postfix/etc/ssl/certs/ca-certificates.crt. Anstatt die Datei jedes Mal manuell zu kopieren, können Sie den systemd -Dienst so bearbeiten, dass dies automatisch beim Start erfolgt.

  • Bearbeiten Sie die Override-Konfiguration von postfix.service:

root@host:~# systemctl edit postfix.service

  • Fügen Sie den folgenden Override hinzu, um das Zertifikat nach dem Start von Postfix zu kopieren:

### Bearbeiten /etc/systemd/system/postfix.service.d/override.conf
### Alles zwischen dieser Stelle und dem folgenden Kommentar wird zum neuen
Inhalt der Datei

[Service] ExecStart=/usr/bin/cp
/etc/ssl/certs/ca-certificates.crt
/var/spool/postfix/etc/ssl/certs/ca-certificates.crt

### Zeilen unterhalb dieses Kommentars werden ignoriert

### /lib/systemd/system/postfix.service
# [Unit]
# Description=Postfix Mail Transport Agent
# Documentation=man:postfix(1)
# Conflicts=sendmail.service exim4.service
# ConditionPathExists=/etc/postfix/main.cf

# [Service]
# Type=oneshot
# RemainAfterExit=yes
# ExecStart=/bin/true
# ExecReload=/bin/true

# [Install]
# WantedBy=multi-user.target

Note: Vergessen Sie nicht, nach der Bearbeitung den Befehl systemctl daemon-reload auszuführen, falls dies nicht automatisch geschieht.

OAuth-Token generieren

  • Bearbeiten Sie die Datei /etc/sasl-xoauth2.conf mit den folgenden Parametern:

    • client_id: Anwendungs- (Client-)ID

    • client_secret: Lassen Sie dieses Feld leer

    • <TENANT_ID>: Tenant-ID

    • log_full_trace_on_failure: (Optional) detaillierte Protokollierung bei Fehlern aktivieren

    • log_to_syslog_on_failure: (Optional) Fehler in syslog protokollieren

Hier ist ein Beispiel für eine Konfiguration der Datei /etc/sasl-xoauth2.conf mit Ihren Anwendungs- und Tenant-IDs:

{
 „client_id“: „<CLIENT_ID>“,

„client_secret“: „“,
 „log_full_trace_on_failure“: „yes“,
 „log_to_syslog_on_failure“: „no“,
 ‚token_endpoint‘:„https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token“
}
„client_id“: „2105063f-f128-4060-96fc-18d5de605999“,

 „client_secret“: „“,
 ‚log_full_trace_on_failure‘: „yes“,

„log_to_syslog_on_failure“: „no“,

 ‚token_endpoint‘: „https://login.microsoftonline.com/365a21da-ebd9-4e7a-af3a-95844dfa91bb/oauth2/v2.0/token“
  • Generieren Sie das OAuth-Token mit dem folgenden Befehl:

    • postfix@std.rocks: Outlook 365-Konto

    • --client-id: Anwendungs-ID

    • --tenant: Tenant-ID

root@host:~# sasl-xoauth2-tool get-token outlook /var/spool/postfix/etc/tokens/postfix@std.rocks --client-id=„<CLIENT_ID>“ --use-device-flow --tenant=„<TENANT_ID>“ Der Befehl fordert Sie auf, sich über den Browser zu authentifizieren. Es wird eine Meldung wie diese angezeigt: Um sich anzumelden, öffnen Sie die Seite <nowiki>https://microsoft.com/devicelogin</nowiki>; in einem Webbrowser und geben Sie den Code XXXXXXXXX ein, um sich zu authentifizieren.

  • Befolgen Sie die Anweisungen: Öffnen Sie <nowiki>https://microsoft.com/devicelogin</nowiki>; in Ihrem Browser und geben Sie den angegebenen Code ein. Melden Sie sich mit dem dafür vorgesehenen Postfix-Konto an. Ein Administrator muss die Berechtigungsanfrage genehmigen. (⚠️Stellen Sie sicher, dass Sie sich mit Ihrem Office 365 Postfix-Konto anmelden, da Sie sonst mit dem Token, das Sie erhalten, keine E-Mails versenden können.⚠️)

  • Wenn alles erfolgreich verläuft, gibt das Tool Folgendes zurück: Token erhalten.

    • Sie sollten nun eine Token-Datei sehen, die im konfigurierten Verzeichnis erstellt wurde: root@host:~# ls -lh /var/spool/postfix/etc/tokens/``total 4,0K -rw-r—​r-- 1 root root 3,5K 13. Juli 15:31 <sendermail>

    • Testen Sie Ihre OAuth-Token-Datei mit der Option test-token-refresh : root@host:~# sasl-xoauth2-tool test-token-refresh /var/spool/postfix/etc/tokens/<sendermail>

    • Wenn das Token gültig und aktualisierbar ist, gibt das Tool Folgendes zurück: Konfigurationsprüfung bestanden.``Token-Aktualisierung erfolgreich.

Testen und Debuggen

Testen des E-Mail-Relays mit sendmail

Ihr Relay sollte nun betriebsbereit sein. Um die Konfiguration vom Relay- Host aus zu testen, können Sie den Befehl sendmail direkt vom Terminal aus verwenden.

  • Erstellen Sie eine Testnachrichtendatei:

From: <Absender-E-Mail>To: <Empfänger-E-Mail>Subject: Testnachricht

Funktioniert es?

  • Senden Sie die E-Mail mit sendmail: root@host:~# cat /tmp/test.txt | sendmail -F <Absender-E-Mail> <Empfänger-E-Mail>