SMTP Relay mit Authentifizierung

Manchmal kann es nötig sein, ein Relay für einen Server aus dem Internet erreichbar zu machen (unser Exchange wird also als Smarthost verwendet). Dabei muss man sehr genau auf die Absicherung dieses Relays achten. Zu viele Berechtigungen können dazu führen, dass man schnell ein beliebter Versender von Spamnachrichten wird und auf den Blacklists landet. Im folgenden möchte ich kurz erklären, wie man hier am besten vorgeht (am Beispiel von Exchange 2010, gilt aber auch für 2007/2013).

1. Einen AD-Benutzer einrichten, der für das authentifizierte Relaying genutzt werden soll

Zunächst einmal erstellen wir uns einen Benutzer für das Relaying. Hier ist es wichtig, ein langes und komplexes Passwort zu verwenden (es wird ja ohnehin im Client gespeichert). Der Benutzer muss außerdem eine Exchange Mailbox erhalten.

2. Einen neuen Empfangsconnector einrichten

Als nächstes erstellen wir einen neuen Empfangsconnector vom Typ „Custom“. Hier geben wir die IP an, auf der „gelauscht“ werden soll und den Port. Da Port 25 ja in den meisten Fällen schon für dem Empfang von SMTP ohne Authentifizierung vergeben ist, können wir hier einen alternativen Port wählen, z.B. Port 587.
Außerdem geben wir den/die Remote IPs ein, die diesen Connector verwenden sollen.

Jetzt kommen die wichtigsten Einstellungen, nämlich die Authentifizierungseinstellungen und die Berechtigungsgruppen.

1

Wir nutzen die TLS (SSL) Verschlüsselung um den Datenverkehr (und natürlich vor allem auch die Benutzerdaten/Passwort) zu verschlüsseln. Voraussetzung ist, dass wir ein gültiges Zertifikat auf dem Server besitzen, welches auch an den SMTP Dienst gebunden ist. Außerdem verwenden wir die Standardauthentifizierung – und zwar erst nach der Herstellung einer TLS Verbindung, da ansonsten unverschlüsselt und die Daten im Klartext gesendet werden.

2

Als Berechtigungsgruppen aktivieren wir die Exchange-Benutzer. Standardmäßig hat die Gruppe Exchange-Benutzer (entspricht der Security Gruppe Authentifizierte Benutzer).

Diese Gruppe besitzt Standardmäßig schon folgende Berechtigungen:

  • ms-exch-smtp-submit (zwingend erforderlich)
  • ms-exch-smtp-accept-any-recipient (Nachrichten dürfen an jeden Empfänger intern/extern gesendet werden)
  • ms-exch-bypass-anti-spam (Nachrichten durchlaufen nicht den Spamfilter)
  • ms-exch-accept-headers-routing (Alle Nachrichtenheader werden beim Routing beibehalten)

 

Hier kommen jetzt noch zwei Rechte hinzu:

  • ms-exch-smtp-accept-any-sender (Die Absenderadresse kann organisationsfremd sein)
  • ms-exch-smtp-accept-authoritative-domain-sender (Als Absenderadresse kann jede Maildomäne verwendet werden, für die der Exchange Server autorisierend ist)

Je nach Anforderung fügen wir also noch eines dieser beiden Rechte hinzu. Soll die Absenderadresse einer Adresse innerhalb der Organisation entsprechen, setzen wir ms-exch-smtp-accept-authoritative-domain-sender. Soll die Absenderadresse beliebig sein, setzen wir ms-exch-smtp-accept-any-sender.

Get-ReceiveConnector -Identity <ExServer\Connector> | Add-ADPermission -User <DOMÄNE\SMTPUSER> -ExtendedRights ms-exch-smtp-accept-any-sender

oder

Get-ReceiveConnector -Identity <ExServer\Connector> | Add-ADPermission -User <DOMÄNE\SMTPUSER> -ExtendedRights ms-exch-smtp-accept-authoritative-domain-sender

 

3.  Testen per Telnet

Wir können nun mit dem entsprechenden Client testen. Sollte etwas nicht funktionieren, können wir Troubleshooting betreiben. Dazu sollte das Logging für den Connector auf „Ausführlich/Verbose“ gestellt werden. Außerdem können wir den Test manuell per Telnet oder Putty fahren. Dazu müssen wir allerdings temporär die Authentifizierung des Connectors so ändern, dass die Standardauthentifizierung auch ohne TLS ablaufen kann. (Haken bei „Standardauthentifizierung erst nach dem Starten von TLS anbieten“ entfernen).

Für die Authentifizierung über Telnet benötigen wir einen Base64 Encoder (einfach mal Google nutzen und dann Benutzername und Passwort nacheinander codieren), da Benutzername und Passwort codiert übertragen werden (codiert heißt nicht verschlüsselt!)

220 EX-SRV.trg.local Microsoft ESMTP MAIL Service ready at Fri, 23 May 2014 14:41:05 +0200
ehlo
250-EX-SRV.trg.local Hello [172.20.100.56]
250-SIZE 10485760
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-AUTH LOGIN
250-8BITMIME
250-BINARYMIME
250 CHUNKING
auth login
334 VXNlcm5hbWU6
dHJds3ddHA=334 UGFzc3dvccmQ6
QWJjZD398jds=235 2.7.0 Authentication successful
mail from:adresse@meinedomain.com
250 2.1.0 Sender OK
rcpt to:empfaenger@domain.com
250 2.1.5 Recipient OK
data
354 Start mail input; end with <CRLF>.<CRLF>
Test
.
250 2.6.0 <5476eb87-3b3b-4f85-920b-3b49f8f50f80@EX-SRV.trg.local> [InternalId=9]
Queued mail for delivery

Tagged with: ,
Veröffentlicht in Exchange
7 comments on “SMTP Relay mit Authentifizierung
  1. Vadim sagt:

    Hallo,

    danke für den tollen Eintrag.

    Ist es zwingend erforderlich eine AD-Benutzer + Postfach zu verwenden?
    Oder würde dies auch mit einem lokalen Benutzer auf dem Exchange Server ohne Postfach funktionieren?

    • Hallo,

      ein Postfach ist nötig, da der Benutzer erst dann ein „Exchange Benutzer“ wird, wie in den Berechtigungsgruppen angegeben. Demzufolge muss natürlich dann auch ein AD Account vorhanden sein.

  2. Nicholas Werner sagt:

    Interessant….

  3. Andreas sagt:

    Gibt es auch eine Lösung für Exchange 2016

      • Andreas sagt:

        Funktioniert leider so nicht beim 16er. „ms-exch-smtp-accept-any-sender“ scheint bei einem „Exchange-User“ keine Wirkung zu haben.
        Hab das Relaying mit Anmeldung an 2010er Exchangeservern auch genutzt.
        Einfach im AD einen User angelegt und mit
        Get-ReceiveConnector „Konnektorname“ | Add-ADPermission -user „Domain\Konto“ -ExtendedRights ms-Exch-SMTP-Submit, ms-Exch-SMTP-Accept-Any-Sender, ms-Exch-SMTP-Accept-Any-Recipient
        entsprechende Berechtigungen hinzugefügt. Am Konnektor noch Standardauthentifizierung aktivieren und fertig. Der User hat hierzu auch kein Exchange-Postfach benötigt.

        Hat jemand eine Lösung?

  4. Andreas sagt:

    Ich möchte meine Aussage zu „Funktioniert am 16er so nicht“ etwas konkretisieren:
    Wenn der Sender (MFC, Applicationserve etc.) per „MAIL FROM:“ die primäre Adresse des am Konnektor berechtigten „Authentifikationskontos“ verwendet, dann funktioniert es selbstverständlich.
    In unseren Setups nutzen jedoch eine Vielzahl von Diensten auf unterschiedlichen Servern den Relay Konnektor, der Dienst/Server/MFC verwendet hierzu eine eigene eindeutige Absenderadresse. Selbstverständlich werden die Absenderadresse unter Einhaltung einer „Accepted Domain“ aufgebaut, aber auch das Setzten der erweiterten Berechtigung „ms-exch-smtp-accept-authoritative-domain-sender“ ändert nichts daran.

    Der EX16/Konnektor antwortet mit „550 5.7.60 SMTP; Client does not have permission to send as this sender“

    Wenn man den Anonymous Login entsprechend berechtigt und aktiviert, klappt alles wie erwartet. Dieses Setup ist mir aber trotz gesetzten IPs am Konnektor zu offen…

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

DeBugIT Autoren

Gib deine E-Mail-Adresse ein, um diesem Blog zu folgen und per E-Mail Benachrichtigungen über neue Beiträge zu erhalten.

Follow DeBugIT – IT Blog on WordPress.com
%d Bloggern gefällt das: