Windows SMTP-Server richtig einrichten

Achtung. Diese Beschreibung ist NICHT zutreffend, wenn Sie Exchange 2000/2003 auf dem Server installiert haben.

Der Windows SMTP Server kann auch als ausgehender Smarthost für Firmen dienen, deren Postfächer in der Cloud sind aber lokale Dienste Mails per SMTP über so ein Relay in die Cloud zustellen sollen.

Information:
Der Windows SMTP-Dienst ist bei Windows 2008R2 und 2012 ein "Feature", aber wird genauso installiert und betrieben. Die Verwaltung erfolgt aber über die IIS6 Konsole. Anscheinend wird der Code nicht weiter gepflegt.

Achtung:
Auch Windows 2022 enthält immer noch das Feature. Aber beim InPlace Update geht die Konfiguration verloren. Siehe auch
IIS 6.0 SMTP Service in-place upgrade to Windows Server 2022
https://blog.workinghardinit.work/2021/11/25/iis-6-0-smtp-service-in-place-upgrade-to-windows-server-2022/

Exchange 2000/2003 nutzt als Transport-Engine den Windows SMTP-Server, der durch entsprechende EventSinks umfangreich erweitert wird. Aber auch ohne Exchange ist der Windows SMTP-Server ziemlich flexibel und eignet sich für viele Einsatzzwecke. Daher sollten Sie sich auch mit dem Windows SMTP-Server ein wenig auskennen:

  • Relay in der DMZ
    Der Windows SMTP-Server eignet sich wunderbar als einfaches Relay zwischen Exchange und fremden Systemen. So kann ein Windows SMTP-Server als Relay in einer DMZ eingesetzt werden.
  • Lokale Queue für Mails aus ASP.NET/ASP
    Ein weiterer Einsatzzweck ist z.B.: ein Webserver oder anderer Server, welche über das CDONTS-Objekte Mails versenden wollen. Natürlich können Sie heute aus VBScript und anderen Programmen mit Hilfsmitteln wie Blat jederzeit eine Mail versenden aber dieser Ansatz hat immer das Problem, dass es keine Queue gibt. Ist der entfernte Mailserver nicht erreichbar, dann kann dieses Skript nur einen Fehlermeldung senden aber es nicht einfach 5 Minuten später wieder versuchen. Und wenn Sie gerade eine Fehlermeldung senden wollten, die wieder eine Fehlermeldung produziert, haben sie im Idealfall eine wunderbare Schleife programmiert. Auch daher kann es hilfreich sein, auf dem Server selbst einen SMTP-Server zu haben, der aber natürlich nur Mails von diesem Server selbst annimmt und an einen vorgegebenen anderen Server weiter leitet. Auch hierzu kann der SMTP-Server von Windows eingesetzt werden.
  • Event-Sinks ohne Exchange
    Sie können auch den normalen Windows SMTP-Server mit EventSinks um eigene Funktionen erweitern. Bestimmte Funktionen können Sie damit schon vor oder nach Exchange ausführen lassen, die Sie nicht auf dem Exchange Server selbst durchführen wollen.

Sie sehen, dass der Windows SMTP-Server vielseitig einsetzbar ist, wenn er denn richtig konfiguriert ist. Ein falscher Klick und Sie haben ein offenes Relay. Damit dies nicht passiert habe ich hier eine Schritt für Schritt Anleitung für die Konfiguration des virtuellen SMTP-Servers als Relay zwischen Internet und Exchange beschrieben:

Funktionsschaltbild

Am Ende der Konfigurationsschritte soll sich der Windows SMTP-Server wie auf folgendem Bild in die Kommunikation zwischen Exchange und Internet einbinden:

 

Die gelben Pfeile kennzeichnen die eingehende Richtung. Per Default nimmt der SMTP-Server Mails von überall an. Die Einstellung unter den Domains regelt indirekt auch die Weitergabe und damit das Relay-Verhalten von extern. Damit der interne Mailserver nach draußen senden darf, wird dessen IP-Adresse in den Relay-Beschränkungen eingetragen.

Installation Windows 2003

Vor der Konfiguration von NoSpamProxy und dem virtuellen SMTP-Server steht die Installation des virtuellen SMTP-Servers. Über die Systemsteuerung - Software ist der SMTP-Server als optionale Komponente auszuwählen.

Das Windows Setup kopiert benötigte Dateien von der Betriebssystem CD und schließt die Installation ab.

Installation Windows 2008

Bei Windows 2008 erfolgt die Installation als Teil der Rollen und kann per GUI und per PowerShell erfolgen. Ich ziehe mittlerweile die PowerShell fast immer vor.

Import-Module Servermanager
Add-WindowsFeature SMTP-Server

Danach ist die Rolle schon installiert.

Konfiguration starten

Zur Konfiguration des virtuellen SMTP-Servers dient die Konsole für die Internet 6.0 Dienste. Dies gilt auch für Windows 2008! Hier erscheint der virtuelle SMTP-Server als Eintrag unter den Internet Diensten.

In der Standardeinstellung nimmt der virtuelle SMTP-Server nur Mails für den eigenen Hostnamen an und legt diese in ein Verzeichnis ab. Der Server versucht ausgehende Mails per DNS zuzustellen aber ist kein offenes Relay.

Ausgehender Verkehr

Der wichtigste Einsatzfall eines virtuellen SMTP-Servers ist der Versand von Nachrichten in das Internet. NoSpamProxy selbst macht keine DNS-Auflösung oder Routing von Nachrichten, sondern erwartet ausgehend einen Mailserver, der die Nachrichten weiter leitet. Dies kann ein Smarthost eines Providers sein. In den meisten Fällen sind sie selbst aber für die direkte Zustellung der Nachrichten an die Empfänger im Internet zuständig. Wenn der Provider einen Smarthost mit Authentifizierung erfordert, ist ebenfalls ein virtuelle SMTP-Server das Mittel der Wahl.

In den Eigenschaften des virtuellen SMTP-Servers sind daher folgende Einstellungen durchzuführen

Verbindungseinstellungen

Auf diesem Port Empfängt der SMTP-Server Nachrichten. Wenn ein anderer Mailserver auf Port 25 schon Nachrichten annimmt, muss der SMTP-Server auf einen anderen freien Port (z.B.: 30) konfiguriert werden. Soll der Mailserver von außen nicht erreichbar sein, kann auch eine Firewall entsprechende Pakete blockieren.

Globale Einstellungen

Der virtuelle SMTP-Server hat z.B. eine Standardeinstellung von 2 MByte für die Größe eine Mail. Dies ist in den meisten Umgebungen zu gering und muss angepasst werden.

Zustellung

Für die Zustellung ausgehender Mails ist hier optional ein Smarthost einzutragen. In der Regel bleibt der Eintrag aber leer, wenn ihr Windows SMTP-Server die Mails über DNS zustellen soll

ACHTUNG: Wenn Sie auf dem gleichen Server Exchange 2000/2003 nutzen, dürfen Sie hier nichts eintragen. Mit Exchange sollten Sie besser einen SMTP-Connector mit Smarthost konfigurieren. Wenn Sie für bestimmte Domänen abweichende Einstellungen benötigen (z.B.: die eigenen Domänen) dann erfolgen diese später an anderer Stelle.

Zugriff

Hierüber steuern Sie, wer alles eine Mail an den Server senden darf. Wenn der SMTP-Server nut als Zwischenstation zwischen Internet und internem Mailserver genutzt wird, können Sie hier z.B.: die Erreichbarkeit von internen PCs verhindern . Das reduziert das Risiko, dass ein Wurm mit eigener SMTP-Engine von Intern ihren Server missbraucht.

Es ist möglich, auf einem Server zwei Instanzen des virtuellen SMTP-Servers zu betreiben um eingehende und ausgehende Nachrichtenströme zu trennen. Dies wird hier nicht weiter betrachtet.

Relaybeschränkungen

Damit ihr SMTP-Server nicht als offenes Relay missbraucht werden kann, sollten Sie hier auf jeden Fall nur die IP-Adressen eintragen, für die Sie Mails von intern nach extern weiter geben wollen, d.h. ein Relay für ALLE mögliche Zieladressen.

Beim Einsatz mit einem internen Mailserver wird hier die IP-Adresse des internen Mailservers konfiguriert. Die Funktion RELAY für eigene Domänen wird zu einem späteren Zeitpunkt an anderer Stelle konfiguriert.

Damit ist der virtuelle SMTP-Server den ausgehenden Verkehr konfiguriert. Nun könnten Sie ihren internen Mailserver schon so einstellen, dass er ausgehende Mails an diesen virtuellen SMTP-Server sendet.

Eingehender Verkehr

Aber auch in die Rückrichtung ist etwas Konfigurationsaufwand erforderlich. So kann es passieren, dass eine ausgehende Mail nicht zustellbar ist. Dann muss der virtuelle SMTP-Server einen Weg können, diese unzustellbarkeiten sicher nach intern zustellen zu können. Der zweite Grund für diese Einstellungen ist gegeben, wenn der virtuelle Mailserver auch eingehende Verbindungen aus dem Internet annehmen und die Mails nach intern weiter leiten soll. Es kann wünschenswert sein, dass eingehende Mails abhängig von der Domäne an verschiedene Mailserver übertragen werden. In diesem Fall ist der SMTP-Server als Router für Nachrichten einsetzbar.

Um eingehende Mails über den virtuellen SMTP-Server zu leiten, sind folgende Einstellungen erforderlich:

Einrichten der Domänen

Alle internen Domänen müssen im virtuellen SMTP-Server unter „Domänen“ eingetragen werden.

Wählen Sie als Typ „Remote Domäne“ aus und tragen Sie den Domänennamen ein. Die Domäne erscheint dann in der Liste. Nun klicken Sie diesen Eintrag doppelt an, um die Details einzustellen

Hier können Sie nun abweichend von den globalen Einstellung zur Mailübermittlung den Server angeben, an den Mails für diese Domäne weitergegeben werden sollen. Dieser Eintrag stellt zudem sicher, dass Mails an diese Domäne als Relay weiter gegeben werden, selbst wenn die einliefernde IP-Adresse nicht für Relay berechtigt ist. Wird hier eine Domäne vergessen, dann betrachtet der virtuelle SMTP-Server diese als „extern“ und versendet die Mails an das Internet oder lehnt die Verbindung mit „550 5.7.1 unable relay for“ ab. Pflegen Sie daher diese Liste gewissenhaft.

Ab sofort wird der virtuelle SMTP-Server alle Mails an ihn zu den definierten Mailservern weiter leiten auch wenn die einliefernde IP-Adresse nicht explizit für die Nutzung als Relay frei geschaltet ist. Die Konfiguration von Domänen im virtuellen SMTP-Server erklärt den Mailserver für diese Domänen für autoritativ, d.h. zuständig. Dieser Server ist dann für die Weiterleitung und das Queueing zuständig.

Nun müssen Sie nur noch sicherstellen, dass der virtuelle Mailserver zum einen seine Mails an den internen Mailserver zustellen kann (Firewall, IP-Routing, Namensauflösung etc.). Soll der Server aus dem Internet erreichbar sein, dann muss der MX-Eintrag auf eine offizielle IP-Adresse weisen und Verbindungen auf diese Adresse auf den Port 25 müssen zum virtuellen SMTP-Server durchgereicht werden. Dies kann durch Reverse-NAT, einen SMTP-Proxy oder direkt durch die offizielle IP-Adresse auf dem Server realisiert werden.

LDAP Routing

Eine Besonderheit gibt es bei eingehenden Routing. Der Windows SMTP-Server kann einen LDAP-Server befragen, um den nächsten Server für diese Adresse zu finden. Dazu müssen diese diese Konfiguration natürlich komplettieren:

Als Schema steht ihnen neben dem Active Directory noch SiteServer oder Exchange 5.5 zur Verfügung. Die Bindung kann anonym, unverschlüsselt, sicher per SSPI oder über das Dienstkonto des SMTP-Servers erfolgen. Bei "Unverschlüsselt" oder SSPI müssen Sie entsprechende Anmeldedaten zum Lesen des Verzeichnisdienstes angeben.

Leider konnte ich noch nicht genau heraus finden, was der Windows SMTP-Server hier genau abfragt. Meine Analysen mit Packetyzer haben mir zwar gezeigt, dass tatsächlich eine LDAP-Anmeldung erfolgt, aber eine LDAP-Abfrage konnte ich so nicht erkennen. Insofern kann es sein, dass diese Funktion nur Verteiler auflösen kann und ein Routing der Mails gar nicht vorgesehen ist. Anscheinend kann er aber Verteiler auflösen

With the LDAP Routing tab, you can configure the SMTP service so that it will consult an LDAP server to resolve senders and recipients. für example, you can use Active Directory directory service as an LDAP server, and use Active Directory Users and Computers to create a group mailing list that is automatically expanded on the Simple Mail Transfer Protocol (SMTP) virtual server.
Quelle: LDAP Routing http://technet.microsoft.com/en-us/library/cc776291(v=ws.10).aspx

Aber viel mehr Informationen habe ich noch nicht in Erfahrung bringen können

Ausgehender Port verändern

Es ist sicher ein sehr seltener Fall, aber Sie können den Windows SMTP-Server auch anweisen, auf der Gegenseite nicht den Port 25 zu verwenden. Solche Konfigurationen sind oft der Fall, wenn auf einem Server mehrere Produkte installiert werden, die in einer SMTP-Kette verschaltet werden sollen und eine Beschränkung auf bestimmte IP-Adressen nicht greift.

Über diese Einstellung können Sie auch einen Exchange Server dazu bringen, ausgehende Mails über einen SMTP-Connector an ein Empfängersystem auf einem abweichenden Port zu senden. Damit die interne Kommunikation zwischen Exchange Servern und über Routinggruppenconnectoren nicht gestört wird, sollten Sie aber erst einen eigenen virtuellen SMTP-Server anlegen, dort den Zielport anpassen und im SMTP-Connector dann diesen neuen virtuellen SMTP-Server als lokalen Bridgehead einbinden

POP3

Seit Windows 2003 gibt es sogar einen POP3-Server, der den virtuellen SMTP-Server um Postfächer erweitert. Damit wird aus dem kleinen SMTP-Server sogar ein kompletter Mailserver für den Versand und Empfang von Nachrichten per SMTP und den Zugriff von Anwendern per POP3. Der virtuelle SMTP-Server kann aber selbst keine Mails per POP3 abholen. Adressbücher erhalten Sie durch den Zugriff auf das Active Directory.

Entwickler und Administratoren

Wenn Sie nun den virtuellen SMTP-Server auf ihrem Server als Dienst zum Versand von Statusmails per ASP o.ä. einrichten wollten, dann sollten Sie den Server nicht nur installieren sondern auch konfigurieren. Dazu zählen im wesentlichen zwei Einstellungen:

  • Zugriffsschutz
    Stellen Sie sicher, dass der Server nur von 127.0.0.1 erreicht werden kann. Damit ist der Schutz sehr hoch, dass der Server nicht von einem Virus oder Wurm erreicht wird, da er jede Verbindung über das Netzwerk ablehnt. Sie können auch den SMTP-Port verändern, damit er nicht so einfach zu finden ist. Letztlich können Sie auch mit den Windows Firewall Einstellungen erreichen, dass der Server nicht über das Netzwerk erreichbar ist. So ist der SMTP-Server sehr sicher und kann nur von Programmen auf dem Server selbst genutzt werden.
  • Zustellung
    Konfigurieren Sie den Server so, dass er er alle Mails an einen vollwertigen Mailserver weiter leitet. Hierzu müssen Sie einfach nur den globalen Smarthost eintragen (Siehe Zustellung). Sie benötigen keine Domänen oder andere weitere Einstellungen. Eventuell müssen Sie die Nachrichtengröße anpassen
  • Überwachung
    Wenn der SMTP-Server die Mails nicht versenden kann, dann bleiben diese für einige Zeit in der Warteschlange und werden wieder versucht. Wenn Sie ihre Server überwachten (z.B.: mit MOM2005), dann sollen Sie einfach das Eventlog und den entsprechenden Performance Counter kontrollieren lassen. So erkennen Sie schnell etwaige Probleme.

Fehlersuche und Protokollierung

Für die Fehlersuche und Überwachung können Sie im virtuellen SMTP-Server das Logging einschalten. Beachten Sie bitte, dass Sie auf der Karteikarte „Erweitert“ die gewünschten Felder aktivieren.

Prüfen Sie weiterhin, dass die Protokoll nicht ihre Festplatte unkontrolliert voll schreibt. Zusätzlich können Sie im Eventlog nach Fehlern suchen.

TLS und SSL

Natürlich unterstützt der Windows SMTP-Server auch SSL-Verbindungen und STARTTLS. Allerdings müssen Sie auf dem Server natürlich ein passendes Zertifikat haben. Die GUI für den virtuellen SMTP-Server erlaubt nicht die Anforderung eines Zertifikats. Die Option für TLS ist an den verschiedenen Stellen einfach nur grau.

Das müssen Sie dann über die MMC, den IISManager oder andere Tools machen. Achten Sie dabei, dass der Hostname auch im Zertifikat enthalten ist. Ansonsten wird die Option nicht aktiv. Siehe dazu auch:

Wenn das Zertifikat installiert ist, sollte alleine schon die TLS-Funktion aktiv sein. Es ist aber dazu erforderlich, dass im Zertifikat auch der Name des SMTP-Service drin ist und der wird hier eingestellt.

Es reicht schon dass der SMTP-Server das Zertifikat findet, damit er STARTTLS anbietet. Nur wenn Sie z.B. TLS "erzwingen" wollen, dann müssen Sie weitere Einstellungen vornehmen.

Hier z.B. die Einstellung um eingehende Verbindungen nur per TLS zuzulassen.

Und hier die Konfiguration für den Versand von Mails:

Anders als in Exchange können Sie aber den gleichen virtuellen Server nicht für TLS und "nicht TLS" verwenden. Das geht aber über einen zweiten virtuellen SMTP-Server.

Verwaltung per WMI

Für den SMTP-Server habe ich auch unter Windows 2008 und Windows 2012 keine Commandlets für PowerShell gefunden. Sie können den SMTP-Server aber weiterhin per WMI verwalten. Erforderlich ist dazu aber, dass Sie die IIS6 WMI-Kompatibilität installiert haben.

Das folgende Skript ist ein Beispiel, wie Sie z.B. die Liste der Domains erweitern können.

# add-remotedomain

param (
   [Parameter(Position=0,Mandatory=$true,HelpMessage="Remote SMTP-Domain",ValueFromPipeline=$false)]
   [string]$smtpdomain,

   [Parameter(Position=1,Mandatory=$false,HelpMessage="Virtual SMTP Instance",ValueFromPipeline=$false)]
   [string]$smarthost = "",

   [Parameter(Position=3,Mandatory=$false,HelpMessage="Virtual SMTP Instance",ValueFromPipeline=$false)]
   [string]$vsmtp = "1"
)

try {
   write-host "Loading SMTPDomains"
   $smtpDomains = [wmiclass]'root\MicrosoftIISv2:IIsSmtpDomain'

   write-host "Adding $smtpdomain"
   $newSMTPDomain = $smtpDomains.CreateInstance()
   $newSMTPDomain.Name = "SmtpSvc/$vsmtp/Domain/$smtpdomain"
   $newSMTPDomain.Put()  | Out-Null

   write-host "Configure the smtpdomain as remote domain with smarthost"
   $smtpDomainSettings = [wmiclass]'root\MicrosoftIISv2:IIsSmtpDomainSetting'
   $newSMTPDomainSetting = $smtpDomainSettings.CreateInstance()
   $newSMTPDomainSetting.Name = "SmtpSvc/$vsmtp/Domain/$smtpdomain"
   $newSMTPDomainSetting.RouteAction = 4098 # Set the type of the domain to "Remote"
   $newSMTPDomainSetting.RouteActionString = $smarthost
   $newSMTPDomainSetting.Put() | Out-Null

   Write-Host -Foregroundcolor Green " OK"
}
catch {
   Write-Host -Foregroundcolor Red " [Error]"
   Exit
}

Mit Get-WMIObject können Sie die aktuelle Konfiguration auch auslesen.

gwmi `
   -Namespace 'root/MicrosoftIISv2' `
   -list | where {$_.name -like "*smtp*"}

Die Liste der Objekte ist nicht gerade klein. Es sind die verschiedenen Klassen, die in der Konfiguration genutzt werden, auf die ich aber nicht weiter im Detail eingehen möchte.

Weitere Links