Mailversand mit Postfix

Update: Ein jüngeres Tutorial samt postfix und dovecat befindet sich hier: Mailserver mit Ubuntu…

Situation

Im lokalen Netzwerk läuft ein Rechner mit Ubuntu 12.04 LTS, der über einen DSL-Router ans Internet angeschlossen ist. Bei 1&1 ist eine Domäne registriert.

In den Beispielen verwende ich als Domain „example.com“. Wer die Schritte nachvollziehen möchte, baue dort bitte seine eigene Domain ein.

(Update: Bei Strato funktioniert es identisch, einfach smtp.strato.de und natürlich ein bei Strato registrierte Domain verwenden. Update: Ganz so einfach ist nicht mehr, eine ausführlichere Ergänzung findet man am Ende des Beitrags.)

 

Aufgabe

Benutzer der Ubuntu-Kiste sollen per „mailx“ E-Mails in die weite Welt versenden können.

 

Benötigte Pakete

  • postfix
  • mailutils

 

Umsetzung

  • Zum Testen lege ich erst einmal zwei E-Mail-Adressen über das Web-Interface von 1und1 an: michael.mustermann@example.com und michaela.musterfrau@example.com
  • Als Ubuntu-Benutzer werden „mann“ und „frau“ angelegt.
  • Bei der Installation von Postfix auswählen: „Internet mit Smarthost“
  • sudo vi /etc/postfix/main.cf
  • Den relayhost auf smtp.1und1.de konfigurieren:
    relayhost = smtp.1und1.de
  • Die folgenden drei Zeilen in die main.cf einfügen bzw. entsprechend vorhandene Zeilen anpassen:
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps =  hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous
  • sudo vi /etc/postfix/sasl_passwd
  • In diese Datei kommen die geheimen Zugangsdaten für den Mailversand. Wenn ein E-Mailkonto „chefvonsganze@example.com“ mit dem E-Mail-Passwort „ganzgeheim“ vorhanden ist, lautet diese Zeile folgendermaßen:
    smtp.1und1.de chefvonsganze@example.com:ganzgeheim
  • Da die Datei das Mail-Passwort im Klartext enthält, sollte man sie mit einem mit „sudo chmod 600 /etc/postfix/sasl_passwd“ nur für root lesbar machen.
  • sudo vi /etc/mailname
  • Hier steht der Name der Domain drin, der beim Mailversand an den Benutzernamen angehängt wird. Es sollte sich um eine gültige (dns-registrierte) Domain handeln, ansonsten wird der SMTP-Server die E-Mail ablehnen. Wenn der Rechner „ubuntu“ heißt und man als Domain „example.com“ verwendet, dann aber hier warum auch immer „ubuntu.example.com“ drinsteht (bei mir war das so), dann auf „example.com“ korrigieren.
  • Nun noch Abschlussarbeiten, Konfiguration wandeln und Postfix neu starten:
    sudo postmap /etc/postfix/sasl_passwd
    sudo /etc/init.d/postfix restart
  • Der E-Mailversand sollte nun funktionieren. Zum Testen mache man am besten zwei Shells auf, verfolgt mittels „tail -f /var/log/mail.log“ die Ausgaben von Postfix, und in der anderen Shell verschickt man Testmails:
    echo "Dies ist eine Testmail" | mailx -s "Test" michaela.musterfrau@example.com
  • Bisher haben wir noch keine Aliase konfiguriert. Das heißt wenn der Ubuntu-Benutzer „mann“ nun mittels mailx eine E-Mail abfeuert, dann kommt sie bei michaela.musterfrau@example.com mit der Absender-Adresse „mann@example.com“ an. Das ist natürlich nicht so toll, denn die E-Mail-Adresse existiert gar nicht, und hinter dem Ubuntu-Benutzer „mann“ verbirgt sich ja „michael.mustermann@example.com“.
  • sudo vi /etc/postfix/main.cf
  • Den Dateinamen festlegen, in der die Absender-Adressen hinterlegt sind:
    sender_canonical_maps = hash:/etc/postfix/sender_canonical
  • sudo vi /etc/postfix/sender_canonical
  • Hier stehen nun zeilenweise Benutzername und E-Mail-Adresse drin:
    mann michael.mustermann@example.com
    frau michaela.musterfrau@example.com
  • Erneut noch die Abschlussarbeiten, Konfiguration wandeln und Postfix neu starten:
    sudo postmap /etc/postfix/sender_canonical
    sudo /etc/init.d/postfix restart

 Übrigens

  • Mit dieser Konfiguration werden dann alle E-Mails über den SMTP-Host geroutet, also z.B. auch die Mails, die sonst an root gesendet werden (Ausgaben von Cronjobs etc.). Das möchte man vielleicht nicht unbedingt…

Links

 

Disclaimer

Bei mir läuft’s. Bei wem es nicht läuft oder wer sich etwas zerschießt: selber schuld. 😉

Update (Strato):

Strato erlaubt neuerdings bei neuen E-Mail-Konten nur noch den Zugriff über SSL/TSL. Wer Postfix dann nicht passend konfiguriert, erhält in der /var/log/mail.log folgende Fehlermeldung: „Authentifizierung nicht moeglich, bitte benutzen Sie eine Verbindung mit SSL/TLS Verschluesselung (siehe auch http://strato-faq.de/artikel.html?id=171„)

Folgendes ist zu tun:

  • Der Port des Relay-Hosts ist in der /etc/postfix/main.cf auf 587 zu setzen:

    relayhost = smtp.strato.de:587
  • Postfix mitteilen, dass TLS verwendet werden soll, ebenfalls in die /etc/postfix/main.cf kopieren:
    smtp_use_tls = yes
    smtp_enforce_tls = yes
    
  • Postfix etwas die Strenge beim Verweigern von SSL-Zertifikaten nehmen:

    smtp_tls_security_level = may
    

    Ohne diese Zeile hat mein Postfix (mittlerweile unter Ubuntu 14.04.1) das Strato-Zertifikat abgelehnt und E-Mails nicht an den SMTP-Server ausgeliefert. Sicherlich gibt es einen anderen Weg, das Strato-Zertifikat zu importieren und zu beglaubigen, ich weiß nur noch nicht wie.

Wer zudem weiterhin Probleme mit der IPv6-Connectivity hat, erzwinge den Zugriff über IPv4 mit folgender Zeile in der /etc/postfix/main.cf:

inet_protocols = ipv4

Nach den Änderungen Postfix neu starten, eine E-Mail verschicken und die Ausgaben im Logfile beobachten:

sudo service postfix restart
echo "Testmail" | mailx -s "Testmail" erika.mustermann@example.com
sudo tail -f /var/log/mail.log

20 Gedanken zu „Mailversand mit Postfix“

  1. Hallo Dirk,

    vielen Dank für diese fantastische Anleitung. Damit habe ich es zum laufen bekommen! Wo soll ich die Kiste Bier hinschicken?

    Ein herzliches Dankeschön!
    Matthias Huthmacher

  2. Auch ich danke dir Dirk für die Anleitung. Es läuft seit Jahren ohne Probleme und ich habe den Vorteil keinen Mailserver direkt neben den Webserver am laufen zu haben. Günstig ist auch es noch 😉

  3. Hall zusammen,

    kann bitte einer von euch mir weiterhelfen?

    ich bekomme keine mails abgeschickt.

    (host smtp.1.exchange.1and1.eu[217.160.154.168] said: 451 5.7.3 STARTTLS is required to send mail (in reply to MAIL FROM command))

    wie kriege ich dieses problem gefixt.

    danke im voraus

  4. Vielen Dank für die Hinweise.

    nach apt-get install libsasl2 libsasl2-modules sasl2-bin

    jetzt bekomme ich die email immer noch nicht.

    unter

    /var/log/mail.log

    Delivery temporarily suspended: Server certificate not trusted

  5. @mcheat Ist jetzt ein wenig „Stochern im Nebel“, meinst Du nicht, so ohne Angabe von Postfix-Version und der Angabe, was Du genau wie konfiguriert hast. Das wird auch hier in den Kommentaren nicht sinnvoll sein. P.S.: Habe Dir eine E-Mail mit meiner aktuellen main.cf geschickt.

  6. Moin Florian,
    kann ich nicht sagen. Bei mir läuft es problemlos mit 1und1 (relayhost = smtp.1und1.de:587), ohne dass ich speziell etwas bezüglich Zertifikaten konfigurieren musste. Siehe auch oben die Kommentare vom 8. September.
    Gruß, Dirk

  7. Guten Abend,

    ich habe kein ganz komisches Problem, ich habe mehrere Benutzer mit jeweils t-online Adressen. Eingerichtet mit der sender_relay und smtp_auth.
    Wenn ich Eine Mail mit Benutzer Anton.intern Securesmtp@t-online Anton@t-onlen.de:Passwort wersende klappt das wunerbar. Genause habe ich das für Benutzer B eingerichtet.
    Nur wenn ich unter dem Benutzer B versende erscheint als Absenderadresse auch Anton@t-online.de.
    Kennt das jemand?

    1. T-Online? Als ich das zuletzt benutzt habe (vor 2000), war das noch ein Einwahlsystem mit Hauptbenutzerkennung und anderem komischen Gedöns. Darf denn der andere T-Online-Benutzer über die Einwahl des anderen Benutzers die E-Mails am Mailserver einkippen? Wenn nicht, wäre das eine Erklärung, dass hier der Name ausgetauscht wird. Ist aber alles vielleicht kompletter Unfug, weil ich wie gesagt T-Online noch zur Modem-Einwahl-Ära verwendet habe.

  8. @Stefan
    Ich habe mit t-online genau das selbe Problem
    Ich komme einfeach nicht weiter.

    Wenn man in die smtp_auth statt securesmtp.t-online.de die Te-online andresse verwendet klappts auch nicht.
    Also Anstatt
    securesmtprelay.t-online.de TestA1@t-online.de:Passwort
    securesmtprelay.t-online.de TestB1@t-online.de:Passwort

    so
    TestA1@t-online.de TestA1@t-online.de:Passwort
    TestB1@t-online.de TestB1@t-online.de:Passwort

    Was kann denn da der Fehler sein

  9. Stichwort „Was kann der Fehler sein“: Da sollten vielleicht die Log-Ausgabe von Postfix erste Hinweise geben können. Da würde ich nun als erstes schauen. Siehe /var/log/mail.* oder /var/log/syslog

  10. Hallo, danke für ihr HowTo! Ich versuche seit Tagen Postfix zu konfigurieren allerdings klappt es nicht. als relay nutze ich Strato. im log steht „mail delivered“ wenn ich unter /etc/aliases
    mailuser: root eintrage, wenn ich dann eine sende kriege ich als antwort „Sie haben neue Post in /var/mail/root.“. Ich glaube er verschickt die mail nur intern. in meiner inbox kommt nichts an.
    nehme ich ihn den eintrag in /aliases gibts den fehler unknown user. können sie mir eventuell helfen? lg.

  11. @Justin
    Das ist ohne Kenntnis des genutzten System (ich nehme an, es ist nicht wie hier Ubuntu 12) und der Konfiguration kaum möglich, aus der Ferne zu beantworten. Bitte das jüngere Tutorial (Link siehe oben) anschauen oder mir per E-Mail Details schicken (siehe Impressum).

  12. Ganz lieben Dank !

    Seit gestern abend hat Strato nicht-TLS abgeschaltet, die erwähnte Fehlermeldung kam. Ich war seit Jahren davon ausgegangen, dass die Emails verschlüsselt verschickt werden. Ein tcpdump -> wireshark belehrte mich eines Besseren :-O.

    Die Portnummer wird von Strato aktuell mit 465 angegeben (https://www.strato.de/faq/mail/wie-kann-ich-meine-e-mails-ueber-eine-gesicherte-verbindung-ssl-oder-tls-versenden-und-empfangen/).

    Ansonsten waren die Extra-Einträge für die main.cf notwendig (auf einem uralten Debian Lenny).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.