sniggls
Goto Top

SMTP TLS Powershell

Hi,

ich informiere meine Linux Kollegen via via Email, wenn ihr AD Passwort abgeändert werden muss. Dafür benutze ich ein Powershellscript. Ich habe vor kurzem auf unserem internen SMTP Server TLS (auf Port25) aktiviert. Seitdem funktioniert das tolle Script nicht mehr.
Habe im Script selbst Use SSL und Port 25 eingegeben

Send-Mailmessage -smtpServer $smtpServer  -UseSSL -Port 25  -from $from -to $emailaddress -subject $subject -body $body -bodyasHTML -priority High -Encoding $textEncoding

Das Script läuft ohne Fehler durch.

Auf dem SMTP Server in den Logs erhalte ich folgende Meldung:
EHLO - +smtpserver 250 0 231 15 0 SMTP - - - -
2021-01-11 12:58:28 192.168.10.12 SMTPSVC1 smtpserver 192.168.10.10 0 STARTTLS - - 220 0 0 8 0 SMTP - - - -
2021-01-11 12:58:28 192.168.10.12 SMTPSVC1 smtpserver  192.168.10.10 0 STARTTLS - - 220 0 29 8 0 SMTP - - - -
2021-01-11 12:58:28 192.168.10.12 SMTPSVC1 smtpserver  192.168.10.10 0 QUIT - server 240 32 29 8 32 SMTP - - - -
2021-01-11 13:01:29 192.168.10.12 SMTPSVC1 smtpserver  192.168.10.10 0 EHLO - +server 250 0 231 15 0 SMTP - - - -
2021-01-11 13:01:29 192.168.10.12 SMTPSVC1 smtpserver  192.168.10.10 0 STARTTLS - - 220 0 0 8 0 SMTP - - - -
2021-01-11 13:01:29 192.168.10.12 SMTPSVC1 smtpserver  192.168.10.10 0 STARTTLS - - 220 0 29 8 0 SMTP - - - -
2021-01-11 13:01:29 192.168.10.12 SMTPSVC1 smtpserver  192.168.10.10 0 QUIT - server 240 15 29 8 15 SMTP - - - -
Könnt ihr mir weiterhelfen?

Gruß
Kommentar vom Moderator Dani am Jan 11, 2021 um 14:15:52 Uhr
Formatierung hinzugefügt.

Content-Key: 639664

Url: https://administrator.de/contentid/639664

Printed on: April 19, 2024 at 02:04 o'clock

Member: Doskias
Doskias Jan 11, 2021 updated at 13:50:37 (UTC)
Goto Top
Moin,

warum Port und SSL manuell angegeben?

Gruß
Doskias
Member: sniggls
sniggls Jan 11, 2021 updated at 14:04:42 (UTC)
Goto Top
warum Port und SSL manuell angegeben?

Wusste nicht wie ich es sonst durchführe, hatte die beiden Parameter hinzugefügt, vorher kam die Fehlermeldung, das TLS benutzt werden muss (was ich ja bewusst eingeschaltet hatte)
Member: Doskias
Doskias Jan 11, 2021 at 14:09:30 (UTC)
Goto Top
Ok, dann eine andere Frage direkt auf den Port bezogen: Wieso nimmst du Port 25. 25 ist (standardmäßig) für SMTP Nachrichten. SMTP mit TLS (auch TSMTP genannt) ist normalerweise Port 465.
Member: Dani
Dani Jan 11, 2021 updated at 14:28:49 (UTC)
Goto Top
Moin,
welches Produkt setzt ihr als E-Mailserver (Exchange Server, Postfix, etc...)? Je nach dem wird für SSL/TLS ein dedizierte Port 465/587 genutzt und muss auch angegeben werden.

Kann es sein, dass durch die Aktivierung von TLS auf dem E-Mail-Server (keine) älteren SSL Protokolle als auch Cipher Suites nutzbar sind? Je nachdem kannst du das mit [System.Net.ServicePointManager]::SecurityProtocol innerhalb des PowerShell Skripts steuern.

Ich bin mir gerade auch nicht sicher, ob du bei Port 25/SMTP überhaupt explizit UseTls angegeben werden muss...


Gruß,
Dani
Member: Doskias
Doskias Jan 11, 2021 at 14:27:36 (UTC)
Goto Top
Zitat von @Dani:
Ich bin mir gerade auch nicht sicher, ob du bei Port 25/SMTP überhaupt explizit angegeben werden muss...

Nein müssen nicht. Ich nutze einige PS-Skripte ohne den Port-Parameter über SMTP.
Member: aqui
aqui Jan 11, 2021 updated at 14:46:43 (UTC)
Goto Top
Member: sniggls
sniggls Jan 11, 2021 at 14:45:52 (UTC)
Goto Top
Zitat von @Dani:

Moin,
welches Produkt setzt ihr als E-Mailserver (Exchange Server, Postfix, etc...)? Je nach dem wird für SSL/TLS ein dedizierte Port 465/587 genutzt und muss auch angegeben werden.


Wir nutzen Exchange 365, die SMTP Benachrichtung ist ausschließlich von internen Maschinen die ich zugelassen habe für anonymes versenden.

Kann es sein, dass durch die Aktivierung von TLS auf dem E-Mail-Server (keine) älteren SSL Protokolle als auch Cipher Suites nutzbar sind? Je nachdem kannst du das mit [System.Net.ServicePointManager]::SecurityProtocol innerhalb des PowerShell Skripts steuern.


Auf dem E-Mail Server selbst habe ich nichts konfiguriert. Ich nutze z.B. auch Veeam Backup Server etc. dort funktioniert alles einwandfrei, nur das Script macht mir Probleme


Ich bin mir gerade auch nicht sicher, ob du bei Port 25/SMTP überhaupt explizit UseTls angegeben werden muss...
Wenn ich die Parameter nicht hinzufüge bekomme ich auf dem SMTP Server in den Logs die Meldung, dass TLS aktiviert sein muss
Member: Doskias
Doskias Jan 11, 2021 at 14:51:22 (UTC)
Goto Top
Versuch es doch einfach mal mit dem "richtigen" Port:

Send-Mailmessage -smtpServer $smtpServer  -UseSSL -Port 465  -from $from -to $emailaddress -subject $subject -body $body -bodyasHTML -priority High -Encoding $textEncoding
Member: mbehrens
mbehrens Jan 11, 2021 at 15:48:55 (UTC)
Goto Top
Zitat von @sniggls:

Zitat von @Dani:

Moin,
welches Produkt setzt ihr als E-Mailserver (Exchange Server, Postfix, etc...)? Je nach dem wird für SSL/TLS ein dedizierte Port 465/587 genutzt und muss auch angegeben werden.


Wir nutzen Exchange 365, die SMTP Benachrichtung ist ausschließlich von internen Maschinen die ich zugelassen habe für anonymes versenden.

Das liest sich aufgrund der IP Adressen des Logfileauszuges nicht so. Welches System wird also vom PowerShell Script angesprochen?
Member: mbehrens
mbehrens Jan 11, 2021 at 15:50:09 (UTC)
Goto Top
Zitat von @Doskias:

Ok, dann eine andere Frage direkt auf den Port bezogen: Wieso nimmst du Port 25. 25 ist (standardmäßig) für SMTP Nachrichten. SMTP mit TLS (auch TSMTP genannt) ist normalerweise Port 465.

Was ist schon normal face-wink Meine SMTP Server sprechen hervorragend verschlüsseltes SMTP über Port 25.
Member: Doskias
Doskias Jan 11, 2021 at 15:54:16 (UTC)
Goto Top
Zitat von @mbehrens:
Was ist schon normal face-wink Meine SMTP Server sprechen hervorragend verschlüsseltes SMTP über Port 25.

Deswegen hab ich ja nachgefragt. Er schreibt dann ja irgendwo, dass Exchange 365 genutzt wird und nichts konfiguriert wurde. Klar kannst du SMTP auch auf Port 25 legen. Theoretisch kannst du auch Port 80 und 443 tauschen, aber wenn man das macht, dann gibt es Gründe dafür. Wenn nichts konfiguriert wurde, dann passt Port 25 bei TLS nicht.
Member: mbehrens
mbehrens Jan 11, 2021 at 17:34:31 (UTC)
Goto Top
Zitat von @Doskias:

Zitat von @mbehrens:
Was ist schon normal face-wink Meine SMTP Server sprechen hervorragend verschlüsseltes SMTP über Port 25.

Wenn nichts konfiguriert wurde, dann passt Port 25 bei TLS nicht.

Dem muss ich Wiedersprechen. Natürlich passt das sehr gut zusammen und ist gängige Praxis beim Betrieb von Mailservern. In der Regel benutzen diese untereinander nur Port 25 und verschlüsseln den Datenverkehr zunehmend auch via TLS.
Member: sniggls
sniggls Jan 11, 2021 at 17:57:30 (UTC)
Goto Top
Zitat von @Doskias:

Zitat von @mbehrens:
Was ist schon normal face-wink Meine SMTP Server sprechen hervorragend verschlüsseltes SMTP über Port 25.

Deswegen hab ich ja nachgefragt. Er schreibt dann ja irgendwo, dass Exchange 365 genutzt wird und nichts konfiguriert wurde. Klar kannst du SMTP auch auf Port 25 legen. Theoretisch kannst du auch Port 80 und 443 tauschen, aber wenn man das macht, dann gibt es Gründe dafür. Wenn nichts konfiguriert wurde, dann passt Port 25 bei TLS nicht.


ich habe einen internen smtp-relay-server, den verwende ich für interne Maschinen (Storage, Backup) und in dem Fall auch für mein Powershell Script, welches ich auf meinem Domaincontroller ausführen lasse. Der SMTP Relay Server benötigt keine Authentifizierung, ich mach das über die IP Freigabe in der Konfig des SMTP Servers. Einen Exchangeserver selbst habe ich nicht, sondern O365.
Member: sniggls
sniggls Jan 11, 2021 at 17:58:43 (UTC)
Goto Top
Das liest sich aufgrund der IP Adressen des Logfileauszuges nicht so. Welches System wird also vom PowerShell Script angesprochen?

Das Script führe ich auf unserem Domänen Controller aus und es spricht die Domäne an, welches PW abläuft, kontaktiert unseren internen smtp relay Server.
Member: Doskias
Doskias Jan 11, 2021 at 18:13:45 (UTC)
Goto Top
DIe Verbindung zweieer Mailserver ist aber was anderes als die Verbindung eines CLients (in dem Fall das PS-Skript) zum eigenen Mailserver.
Member: Doskias
Doskias Jan 11, 2021 at 18:14:36 (UTC)
Goto Top
Hast du es denn jetzt einfach mal mit dem TSMTP Port 465 versucht?
Member: mbehrens
mbehrens Jan 11, 2021 at 18:30:30 (UTC)
Goto Top
Zitat von @Doskias:

DIe Verbindung zweieer Mailserver ist aber was anderes als die Verbindung eines CLients (in dem Fall das PS-Skript) zum eigenen Mailserver.

Nein, dies macht aus Sicht des SMTP Protokolles keinen Unterschied.
Member: mbehrens
mbehrens Jan 11, 2021 at 18:31:58 (UTC)
Goto Top
Zitat von @sniggls:

ich habe einen internen smtp-relay-server, den verwende ich für interne Maschinen (Storage, Backup) und in dem Fall auch für mein Powershell Script, welches ich auf meinem Domaincontroller ausführen lasse. Der SMTP Relay Server benötigt keine Authentifizierung, ich mach das über die IP Freigabe in der Konfig des SMTP Servers. Einen Exchangeserver selbst habe ich nicht, sondern O365.

Dann erhöhe bitte den Loglevel des Relay Servers. Das gezeigte Protokoll ist nicht aussagefähig genug.
Member: sniggls
sniggls Jan 12, 2021 at 08:17:57 (UTC)
Goto Top
Zitat von @Doskias:

Hast du es denn jetzt einfach mal mit dem TSMTP Port 465 versucht?

Das habe ich gemacht, leider passiert dann gar nichts.
Member: Dani
Dani Jan 12, 2021 at 11:49:11 (UTC)
Goto Top
Moin,
ich habe einen internen smtp-relay-server,
warum hast du das oben in deiner Antwort auf meine Fragen nicht erwähnt?!
Wenn ich mir den Ausschnitt des Logfile aus deiner Frage anschaue, vermute ich einmal dass es sich um IIS mit SMTP handelt. Korrekt?


Gruß,
Dani
Member: sniggls
sniggls Jan 12, 2021 at 13:08:01 (UTC)
Goto Top
Zitat von @Dani:

Moin,
ich habe einen internen smtp-relay-server,
warum hast du das oben in deiner Antwort auf meine Fragen nicht erwähnt?!
Wenn ich mir den Ausschnitt des Logfile aus deiner Frage anschaue, vermute ich einmal dass es sich um IIS mit SMTP handelt. Korrekt?

Sorry, ich habe das nicht verrissen. Deine Frage zu IIS und SMTP bzw. Schlussfolgerung ist korrekt. Windows Server mit SMTP Relay aka IIS (6.0)

Gruß
Member: Dani
Dani Jan 12, 2021 at 13:22:38 (UTC)
Goto Top
Moin,
Deine Frage zu IIS und SMTP bzw. Schlussfolgerung ist korrekt.
damit ist klar, warum Ports wie 465 oder 587 nicht funktionieren.
Beschreibe doch einmal, wie du SSL/TLS auf Port 25 im IIS konfiguiert hast?!

Windows Server mit SMTP Relay aka IIS (6.0)
Windows Server 2003? Wenn dem so ist, werden SSL Protokolle TLS 1.1/TLS1.2 meines Wissens nach nicht unterstützt. Damit dürfte auch eine Kommunikation mit Exchange Online nicht mehr möglich sein. Denn dort wurden schwache und alte SSL Protokoll SSLv2, SSLv3, TLS 1.0 und TLS 1.1 deaktiviert.


Gruß,
Dani
Member: sniggls
sniggls Jan 12, 2021 at 17:13:00 (UTC)
Goto Top
Zitat von @Dani:

Moin,
Deine Frage zu IIS und SMTP bzw. Schlussfolgerung ist korrekt.
damit ist klar, warum Ports wie 465 oder 587 nicht funktionieren.
Beschreibe doch einmal, wie du SSL/TLS auf Port 25 im IIS konfiguiert hast?!

in den Einstellungen des SMTP Server habe ich TLS aktiviert und den Port 25 drin.


Windows Server mit SMTP Relay aka IIS (6.0)
Windows Server 2003? Wenn dem so ist, werden SSL Protokolle TLS 1.1/TLS1.2 meines Wissens nach nicht unterstützt. Damit dürfte auch eine Kommunikation mit Exchange Online nicht mehr möglich sein. Denn dort wurden schwache und alte SSL Protokoll SSLv2, SSLv3, TLS 1.0 und TLS 1.1 deaktiviert.

Ne Server 2012, ich kann mit allen Servern die ich intern betreibe als auch apps wie veeam über den smtp relay tls mails versenden....ich schaffe es nur nicht mit dem powershell script
Mitglied: 147069
147069 Jan 12, 2021 updated at 17:53:01 (UTC)
Goto Top
Habe ich gerade mal auf einem Server 2012R2 gestestet, funktioniert hier einwandfrei, korrekte Relay-Einstellungen und korrektes Zertifikat das auf den Common-Name des SMTPServers ausgestellt ist für den SMTP-Server vorausgesetzt, klappt SSL auch auf Port 25 mit dem SMTP-Server des IIS. Fehler liegt also an deiner Config.
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType])
Send-MailMessage -From 'user@domain.tld' -to 'user2@domain.tld' -SmtpServer serverX.domain.tld -Port 25 -UseSSL  
Mail kommt erfolgreich an!
Würde aber für die Zukunft auf Mailkit migrieren, die SMTP-Client Klasse wird von MS nicht mehr weiterentwickelt wird und moderne Ciphers und Auth Verfahren nicht mehr unterstützt.

Was du leider komplett verschweigst ist die Fehlermeldung der Powershell ...

Gruß bw.
Member: sniggls
sniggls Jan 12, 2021 at 17:53:06 (UTC)
Goto Top

Was du leider komplett verschweigst ist die Fehlermeldung der Powershell ...


In Powershell gibt es keine Fehlermeldung, das Script läuft fehlerfrei durch
Mitglied: 147069
147069 Jan 12, 2021 updated at 18:06:49 (UTC)
Goto Top
Zitat von @sniggls:
In Powershell gibt es keine Fehlermeldung, das Script läuft fehlerfrei durch
Dann ist deine SMTP-Server Config für das Weiterleiten fehlerhaft und nicht die Powershell, denn wenn die nichts meldet wurde die Mail erfolgreich beim SMTP-Server des IIS abgeliefert! Checke die verfügbaren TLS Protokolle deines Smarthosts/Relayhosts an die der SMTP-Server weiterleitet, beide müssen sich auf eine TLS-Version einigen können die beide unterstützen. Ein Wireshark-Trace sollte dir das ebenfalls zeigen.

Mehr Details dazu hier
https://www.emailarchitect.net/eatls/kb/iis_smtp_opportunistic_tls.aspx

Ich habe das hier mit GMAIL als Smarthost erfolgreich getestet.
Checke auch die Mail-Queue (Default C:\inetpub\mailroot\....) wo die abgelieferten Mails landen.