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
  1. Matthias Huthmacher
    23. April 2017, 00:44 | #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

    • dh
      23. April 2017, 11:05 | #2

      Danke Matthias für die freundliche Rückmeldung!

  2. Denis
    6. August 2017, 13:20 | #3

    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. Stefan
    8. August 2017, 14:07 | #4

    Hallo, top Anleitung, vielen Dank dafür!

  4. mcheat
    8. September 2017, 14:14 | #5

    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

  5. dh
  6. mcheat
    9. September 2017, 17:02 | #8

    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

  7. dh
    9. September 2017, 17:18 | #9

    @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.

  1. 19. März 2015, 12:37 | #1