{"id":2073,"date":"2018-07-27T07:30:30","date_gmt":"2018-07-27T05:30:30","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=2073"},"modified":"2023-01-08T16:58:47","modified_gmt":"2023-01-08T15:58:47","slug":"postfix-smtp-authentifizierung-fuer-mailserver-relayhosts-ueber-starttls-konfigurieren","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/postfix-smtp-authentifizierung-fuer-mailserver-relayhosts-ueber-starttls-konfigurieren\/","title":{"rendered":"Postfix: SMTP-Authentifizierung f\u00fcr Mailserver (relayhosts) \u00fcber STARTTLS konfigurieren"},"content":{"rendered":"\n<p>In diesem Artikel halte ich fest, wie ich Postfix unter RHEL 7 f\u00fcr SMTP-Authentifizierung an einem <em>relayhost<\/em> \u00fcber STARTTLS mit den Authentifizierungsmethoden PLAIN und LOGIN konfiguriert habe. Da ich kein Postfix-Experte bin, mag dies weder der einzige noch der beste Weg sein, doch habe ich das Ziel erreicht. Verbesserungsvorschl\u00e4ge nehme ich gerne in den Kommentaren entgegen.<\/p>\n\n\n\n<p>Ihr findet hier vor allem keine Schritt-f\u00fcr-Schritt-Anleitung und kein ausf\u00fchrliches Tutorial. Seid also nicht entt\u00e4uscht, wenn ihr auch die am Ende des Artikels verlinkten Quellen zu Rate ziehen m\u00fcsst.<\/p>\n\n\n\n<p>Der Artikel gliedert sich in die folgenden Abschnitte:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"#check-user-credentials\">Test der Benutzerzugangsdaten \u00fcber STARTTLS<\/a><\/li>\n\n\n\n<li><a href=\"#config-postfix\">Installation fehlender Pakete und Konfiguration von Postfix<\/a><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"check-user-credentials\">Test der Benutzerzugangsdaten \u00fcber STARTTLS<\/h2>\n\n\n\n<p>F\u00fcr die SMTP-Authentifizierung am <em>relayhost<\/em> werden Benutzername und Passwort ben\u00f6tigt. Bevor ich Postfix (ver)konfiguriere, \u00fcberpr\u00fcfe ich, ob der SMTP-Server diese Zugangsdaten akzeptiert. Da die Zugangsdaten \u00fcber STARTTLS \u00fcbertragen werden, pr\u00fcfe ich, ob der SMTP-Server dies \u00fcberhaupt unterst\u00fctzt. Im folgenden Listing wird der TCP-Port 25 verwendet. In Abh\u00e4ngigkeit zur konkreten Umgebung kann auch ein anderer Port wie z.B. 587 in Frage kommen.<br><code><br> # telnet relayhost.example.com 25<br> Trying 192.168.0.1...<br> Connected to relayhost.example.com.<br> Escape character is '^]'.<br> 220 ESMTP Messaging Multiplexor bla bla<br> EHLO localhost<br> 250-relayhost.example.com<br> [...]<br> 250-AUTH PLAIN LOGIN<br> 250-AUTH=LOGIN PLAIN<br> 250 STARTTLS<br> <\/code><br>Mit der Zeile &#8222;250 STARTTLS&#8220; ist die Voraussetzungen erf\u00fcllt, dass wir Klartext-Benutzernamen und -Passwort durch STARTTLS gesch\u00fctzt an den Server \u00fcbermitteln k\u00f6nnen. Welche Authentifizierungsverfahren innerhalb von STARTTLS unterst\u00fctzt werden, kann mit folgenden Kommandos \u00fcberpr\u00fcft werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># openssl s_client -connect relayhost.example.com:25 -starttls smtp &#91;-crlf]\nCONNECTED(00000003)\n&#91;...]\n250 CHUNKING\nEHLO Max\n250-relayhost.example.com Hello &#91;IP-Adresse]\n&#91;...]\n250-AUTH NTLM LOGIN\n&#91;...]<\/code><\/pre>\n\n\n\n<p>Die Option <code>-crlf<\/code> ist nur anzugeben, wenn es sich bei dem Zielsystem um Microsoft Exchange handelt. An der Ausgabe ist  zu erkennen, dass dieser relayhost die Authentifizierungsverfahren NTLM und LOGIN unterst\u00fctzt.<\/p>\n\n\n\n<p>Benutzername und Kennwort m\u00fcssen dabei Base64-kodiert an den SMTP-Server \u00fcbertragen werden. Der Base64-kodierte String kann mit folgendem Befehl erstellt werden. Dabei ist im folgenden Beispiel &#8222;Max&#8220; der Benutzername und &#8222;pusemuckel&#8220; das Passwort.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kodierung f\u00fcr AUTH PLAIN<\/h3>\n\n\n\n<p>Hierbei werden Benutzername und Passwort in einem String kodiert.<br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ echo -ne '\\x00Max\\x00pusemuckel' | base64\nAE1heABwdXNlbXVja2Vs<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Kodierung f\u00fcr AUTH LOGIN<\/h3>\n\n\n\n<p>F\u00fcr AUTH LOGIN m\u00fcssen Benutzername und Passwort jeweils einzeln kodiert werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ echo -ne 'Max' | base64\nTWF4\n$ echo -ne 'pusemuckel' | base64\ncHVzZW11Y2tlbA==<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Test beider Verfahren \u00fcber STARTTLS<\/h3>\n\n\n\n<p>Eine STARTTLS-Verbindung zum <em>relayhost<\/em> wird mit folgendem Befehl hergestellt (Ausgabe gek\u00fcrzt):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># openssl s_client -connect relayhost.example.com:25 -starttls smtp\nCONNECTED(00000003)\n&#91;...]\n250 STARTTLS\nAUTH PLAIN AE1heABwdXNlbXVja2Vs\n235 2.7.0 PLAIN authentication successful.<\/code><\/pre>\n\n\n\n<p>Die letzte Zeile ist die Best\u00e4tigung, dass eine Authentifizierung mit dem bekannten Benutzernamen und dem dazugeh\u00f6rigen Passwort \u00fcber STARTTLS und AUTH PLAIN m\u00f6glich ist.<\/p>\n\n\n\n<p>F\u00fcr AUTH LOGIN sieht der Test wie folgt aus. Die zus\u00e4tzliche Option <code>-crlf<\/code> ist dann zu verwenden, wenn es sich bei dem Zielsystem z.B. um ein Microsoft System handelt, da diese traditioniell andere Zeilenumbr\u00fcche verwenden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># openssl s_client -connect relayhost.example.com:25 -starttls smtp\nCONNECTED(00000003)\n&#91;...]\n250 CHUNKING\nEHLO Max\n250-relayhost.example.com Hello &#91;IP-Adresse]\nAUTH LOGIN\n334 VXNlcm5hbWU6\nTWF4\n334 UGFzc3dvcmQ6\ncHVzZW11Y2tlbA==\n235 2.7.0 Authentication successful<\/code><\/pre>\n\n\n\n<p>Auch hier best\u00e4tigt die letzte Zeile die G\u00fcltigkeit unserer Benutzeranmeldeinformationen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"config-postfix\">Installation fehlender Pakete und Konfiguration von Postfix<\/h2>\n\n\n\n<p>Da die Installation meines Hosts auf einer RHEL-Minimalinstallation basiert, werden zuerst zwei ben\u00f6tigte Pakete nachinstalliert:<br><code># yum install cyrus-sasl cyrus-sasl-plain<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Datei mit Anmeldeinformationen erstellen<\/h3>\n\n\n\n<p>Es ist die Datei <em>\/etc\/postfix\/sasl_passwd<\/em> mit folgendem Inhalt zu erstellen:<br><code><br>\n# cat \/etc\/postfix\/sasl_passwd<br>\nsmtp.example.com\t\tMax:pusemuckel<br>\n<\/code><br>Zu Beginn der Zeile wird der FQDN des SMTP-Servers eingetragen, gefolgt von Benutzername:Passwort im Klartext. Damit nun nicht jeder diese Datei lesen kann, wird der Zugriff mit den folgenden Kommandos auf den Benutzer &#8218;root&#8216; eingeschr\u00e4nkt und anschlie\u00dfend eine Postfix-DB-Datei erstellt:<br><code><br>\n# chown root:root \/etc\/postfix\/sasl_passwd &amp;&amp; chmod 600 \/etc\/postfix\/sasl_passwd<br>\n# postmap hash:\/etc\/postfix\/sasl_passwd<br>\n# ls -l \/etc\/postfix\/sasl_passwd*<br>\n-rw-------. 1 root root    52 26. Jul 08:57 \/etc\/postfix\/sasl_passwd<br>\n-rw-------. 1 root root 12288 26. Jul 08:59 \/etc\/postfix\/sasl_passwd.db<br>\n<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Konfiguration der \/etc\/postfix\/main.cf<\/h3>\n\n\n\n<p>F\u00fcr die Konfiguration habe ich mich an <a href=\"#two\">[2]<\/a> orientiert. Um STARTTLS und die SMTP-Authentifizierung zu aktivieren, habe ich folgende Zeilen an meine <em>\/etc\/postfix\/main.cf<\/em> angef\u00fcgt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># tail -n 10 \/etc\/postfix\/main.cf\n# SASL SUPPORT FOR SERVERS\n#\n# The following options set parameters needed by Postfix to enable\n# Cyrus-SASL support for authentication of mail servers.\n#\nsmtp_use_tls = yes # Aktiviert TLS f\u00fcr Postfix\nsmtp_sasl_auth_enable = yes # Aktiviert SMTP AUTH f\u00fcr Postfix\nsmtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd # Gibt an wo Postfix die Zugangsdaten findet\nsmtp_sasl_security_options = # Durch setzen der leeren Option wird die PLAIN- und anonyme Authentifizierung aktiviert<\/code><\/pre>\n\n\n\n<p>F\u00fcr AUTH LOGIN ist zus\u00e4tzlich noch die folgende Zeile einzuf\u00fcgen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>smtp_sasl_mechanism_filter = login<\/code><\/pre>\n\n\n\n<p>Abschlie\u00dfend ist die Postfix-Konfiguration neu zu laden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># systemctl reload postfix.service<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Test des Mailversands<\/h3>\n\n\n\n<p>Um den Mailversand zu testen, habe ich vom lokalen System aus eine kurze E-Mail versendet:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># mailx -s \"Testmail mit SMTP-AUTH und STARTTLS\" foo@example.com &lt;&lt; EOT &gt; EOT\nNull message body; hope that's ok<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Quellen und weiterf\u00fchrende Links<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.saotn.org\/test-smtp-authentication-starttls\/\">How to test SMTP Authentication and StartTLS<\/a> {en}<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li>16. SMTP Authentication for Mail servers {en}<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel halte ich fest, wie ich Postfix unter RHEL 7 f\u00fcr SMTP-Authentifizierung an einem relayhost \u00fcber STARTTLS mit den Authentifizierungsmethoden PLAIN und LOGIN konfiguriert habe. Da ich kein Postfix-Experte bin, mag dies weder der einzige noch der beste Weg sein, doch habe ich das Ziel erreicht. Verbesserungsvorschl\u00e4ge nehme ich gerne in den Kommentaren<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/postfix-smtp-authentifizierung-fuer-mailserver-relayhosts-ueber-starttls-konfigurieren\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51],"tags":[500,504,430,503,305,230,231,499],"class_list":["post-2073","post","type-post","status-publish","format-standard","hentry","category-linux","tag-auth","tag-login","tag-osbn","tag-plain","tag-planet","tag-postfix","tag-smtp","tag-starttls"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2073"}],"version-history":[{"count":12,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2073\/revisions"}],"predecessor-version":[{"id":3401,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2073\/revisions\/3401"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}