Ubuntu das Mailen beibringen


Hallo,

dieser Artikel beschäftigt sich mit der Frage, wie man einem Ubuntu Server (oder PC) das Mailen beibringen kann. Prinzipiell muss man dazu einen MTA (Mail Transfer Agent) installieren. Die Einrichtung für gewöhnliche SMTP-Server ist nicht kompliziert und gut dokumentiert.

Dem Server (oder PC) das Mailen beizubringen kann dann von Nutzen sein, wenn irgendwelche Programme einfach in der Lage sein sollen automatisiert Mails zu versenden. Etwa wie mein im früheren Artikel „Linux: Backup mit Bordmitteln“ beschriebenes Backup-Script.

Dieser Artikel geht daher in Anlehnung an dieses englische Original darauf ein, wie man innerhalb von nur 11 Schritten seinen GMAIL-Account zum Versand der Mails über eine verschlüsselte Verbindung benutzen kann.

Schritt 1: Maschine auf den neuesten Stand bringen

$ sudo su
# apt-get update
# apt-get install upgrade

Schritt 2: Benötigte Pakete installieren

# apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules libdb3-util procmail

Dieser Befehl installiert uns Postfix als MTA und die benötigten Bibliotheken, damit Postfix mit GMail TSL-Verschlüsselt kommunizieren kann.

Schritt 3: Konfiguration von Postfix

Bei der Installation von Postfix werden wir nun nach ein paar Informationen gefragt. Folgende Angaben sind durchzuführen:

  • General type of configuration? Internet Site
  • Where should mail for root go? NONE
  • Mail name? (Inhalt von /etc/hostname)
  • Other destinations to accept mail for? (blank for none)
  • Force synchronous updates on mail queue? No
  • Local networks? 127.0.0.0/8
  • Use procmail for local delivery? Yes
  • Mailbox size limit? 0
  • Local address extension character? +
  • Internet protocols to use? all

Schritt 4: Grundsätzliche Postfix-Konfigurationsdateien erstellen/modifizieren

# postconf -e ’smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination‘
# postconf -e ‚inet_interfaces = all‘
# postconf -e ‚broken_sasl_auth_clients = yes‘
# echo ‚pwcheck_method: saslauthd‘ >> /etc/postfix/sasl/smtpd.conf
# echo ‚mech_list: plain login‘ >> /etc/postfix/sasl/smtpd.conf

Schritt 5: Erstellung eines Sicherheits-Zertifikats

Ein neues CA-Zertifikat (CA = Certified Authority) erstellt man mit folgendem Befehl:

# /usr/lib/ssl/misc/CA.pl -newca

Man sollte nun folgende Zeilen zu Gesicht bekommen:
CA certificate filename (or enter to create)

Making CA certificate … Generating a 1024 bit RSA private key …….++++++ ……………….++++++ writing new private key to ‚./demoCA/private/cakey.pem‘ Enter PEM pass phrase:

An dieser Stelle muss man ein Passwort vergeben. Dieses Passwort sollte man sich unbedingt merken, da man es später benötigt. Nun wird man noch um ein paar Informationen zum Zertifikat geben (die man sich ebenfalls in der exakten Schreibweise merken muss), von denen man die folgenden ausfüllen muss (alle restlichen kann man irgendwie ausfüllen, oder mittels Eingabe eines „.“ leer lassen)

  • Country Code (2 letter code): AT oder DE (oder was auch immer
  • State or Province Name: (Na ratet mal…)
  • Locality Name (eg, city): (Na ratet mal…)
  • Organization name: (frei wählbarer Name, statt Leerzeichen Unterstriche!!!)
  • Common Name: (Inhalt von /etc/hostname)
  • Email Address: (Deine Mail-Adresse)

Solltest du dich bei einer Eingabe irren, kannst du das Zertifikat einfach neu erstellen, allerdings musst das Verzeichnis „demoCA“ löschen!

# rm -R demoCA/
# /usr/lib/ssl/misc/CA.pl -newca

Sofern wir nun ein ordentliches Zertifikat erstellt haben müssen wir es noch importieren, damit es beim Authentifizierungsprozess benutzt werden kann: (Die Werte in fett müssen durch die bei der Zertifikatserstellung angegebenen Werte ersetzt werden)

# openssl req -new -nodes -subj ‚/CN=common name/O=Organization Name/C=Country/ST=State or Province Name/L=Locality Name/emailAddress=Email Address‚ -keyout FOO-key.pem -out FOO-req.pem -days 3650

Der letzte Parameter (-days 3650) bestimmt wie lange das Zertifikat gültig ist. Also in diesem Fall ca. 10 Jahre. (Das reicht meistens ;-)) Bitte beachte, dass du die exakte Schreibweise wie bei der Zertifikatserstellung einhalten mußt.

Folgender Befehl

# openssl ca -out FOO-cert.pem -infiles FOO-req.pem

erstellt ein signiertes Zertifikat, dass zur Verifizierung der Identität als original Server benötigt wird. Zuletzt muss das Zertifikat noch nach /etc/postfix kopiert werden und mit entsprechenden Dateirechten ausgestattet werden:

# cp demoCA/cacert.pem FOO-key.pem FOO-cert.pem /etc/postfix
# chmod 644 /etc/postfix/FOO-cert.pem /etc/postfix/cacert.pem
# chmod 400 /etc/postfix/FOO-key.pem

Schritt 6:

Nun müssen wir die Konfiguration von Postfix überarbeiten.

# cd /etc/postfix
# mv /etc/postfix/main.cf /etc/postfix/main.cf.old (Sicherung der aktuellen Konfiguration)
# nano /etc/postfix/main.cf

Folgende Zeilen müssen in diese Datei kopiert werden:

## Add these lines to the bottom on main.cf
##
##
## TLS Settings
#
# For no logs set = 0
smtp_tls_loglevel = 1
#
# smtp_enforce_tls = yes
# Above is commented because doing it site by site below
smtp_tls_per_site = hash:/etc/postfix/tls_per_site
#
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_tls_cert_file = /etc/postfix/FOO-cert.pem
smtp_tls_key_file = /etc/postfix/FOO-key.pem
smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtp_use_tls = yes
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/FOO-cert.pem
smtpd_tls_key_file = /etc/postfix/FOO-key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
## SASL Settings
# This is going in to THIS server
smtpd_sasl_auth_enable = no
# We need this
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtpd_sasl_local_domain = $myhostname
smtp_sasl_security_options = noanonymous
#smtp_sasl_security_options =
smtp_sasl_tls_security_options = noanonymous
smtpd_sasl_application_name = smtpd
## Gmail Relay
relayhost = [smtp.gmail.com]:587
## Good for Testing
# sender_bcc_maps = hash:/etc/postfix/bcc_table
# Disable DNS Lookups
disable_dns_lookups = yes
#
# Great New feature Address Mapping
# for example may mchirico@localhost to mchirico@gmail.com
smtp_generic_maps = hash:/etc/postfix/generic
#
#
transport_maps = hash:/etc/postfix/transport

Einer der wichtigsten Einträge ist der „relayhost“ in der „GMAIL RELAY“ Sektion. Dieser Eintrag teilt Postfix mit, dass es den angegebenen Server zum Versand der Mails nutzen soll. Zu beachten ist der Port (587), der nicht der SMTP-Standardport ist.

Schritt 7: Erstellung der sasl_passwd-Datei

Diese Datei wird benötigt, damit Postfix bei GMail einloggen kann. Editiere daher die Datei mit nano

# nano /etc/postfix/sasl_passwd

und trag folgendes in die erste Zeile ein:
[smtp.gmail.com]:587 DEINE_MAILADRESSE@gmail.com:DEIN_PASSWORT

Ja, hier muss man das Passwort im Plaintext eingeben! Aber keine Sorge, man erstellt in Folge einen Hashcode von dieser Datei und kann diese Datei nachher löschen. Die Hash-Datei (sasl_passwd.db) erstellt man mit dem Befehl postmap, also:

# postmap sasl_passwd
# unlink sasl_passwd

Schritt 8: Unix-User to Gmail-User Mapping

Wir müssen nun noch Postfix mitteilen, welche Mail-Adresse die jeweiligen Unix-User haben. Wir benötigen zuerst den Inhalt von /etc/hostname (das ist unser Computername) und die Erkenntnis, dass jeder Unix-User ja automatisch eine Mailadresse nach dem Schema username@hostname hat.

Heißt also zB mein Benutzername munin und mein Hostname hugin, dann wäre die Mail-Adresse munin@hugin. Nicht mehr und nicht weniger. Wir öffnen also mit nano die Datei „generic“

# nano generic

und tragen folgendes ein:

username@hostname deine_mail@gmail.com

und erzeuge wieder das Hashfile mit „postmap“

# postmap generic

Schritt 9: Erzeugung der transport-Datei

Diese Datei teilt Postfix mit, wohin die Mails geroutet werden sollen.

# nano transport

und Inhalt:

gmail.com smtp:[smtp.gmail.com]:587

Anschließend noch das hash-File erstellen:

# postmap transport

Schritt 10: Erzeugung der tls_per_site-Datei

Diese Datei ist neben der main.cf die wichtigste Konfigurationsdatei, da sie uns vor einem „man-in-the-middle-Angriff“ schützt.

Diese Datei stellt sicher, dass eine gesicherte Verbindung besteht, BEVOR Login-Daten übertragen werden.
Öffne die Datei tls_per_site

# nano tls_per_site

und trage folgendes ein:

# smtp.gmail.com MUST

Anschließend wie immer das hash-File erstellen:

# postmap tls_per_site

Schritt 11: Kleine Modifikation an der master.cf

Zuletzt ist noch eine kleine Änderung an der master.cf vonnötigen. Öffne die master.cf

# nano /etc/postfix/master.cf

Gehe zur Zeile „relay unix – – n – – smtp“. Unter dieser Zeile sind mehrere Zeilen, die mit „-o“ beginnen. Füge hier folgende Zeile hinzu:

-o smtp_generic_maps=

Dieser Eintrag sagt Postfix, dass die Mails mit deiner GMAIL-Adresse anstatt der Original-Adresse (zB munin@hugin) geschickt werden soll.

Nachdem wir die master.cf editiert haben, müssen wir Postfix neu starten:

# postfix reload

Um sicherzugehen, dass postfix wirklich läuft, können wir noch folgenden Befehl ausführen:

# postfix start

Damit wäre Postfix fertig konfiguriert. Die nächste Seite zeigt noch kurz eine Möglichkeit die Funktion zu testen.

Funktionstest

Öffne zwei Terminalfenster. Im ersten Fenster gib folgenden Befehl ein:

$ watch -n 3 „tail /var/log/mail.log“

Dieser Befehl sorgt dafür, dass wir die letzten Zeilen des mail.log sehen und alle drei Sekunden automatisch ein Update erfolgt. Wir können also Änderungen an dieser Datei „zusehen“ (watch).

Jetzt verschicken wir aus unserem zweiten Terminal ein Mail:

mail -s „Testmail“ „empfänger@domain.com“ < /etc/hostname

Dieser Befehl schickt den Inhalt der Datei /etc/hostname und dem Betreff „Testmail“ an die in der Mitte angegebene Mail-Adresse.

Bei mir ist ein Fehler beim TLS-Handshake aufgetreten. Dieses Problem konnte ich mit folgenden Kommandos lösen und danach ging der Mailversand einwandfrei:

$ sudo su
# apt-get install ca-certificates
# chmod 777 /etc/postfix/cacert.pem
# cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem >> /etc/postfix/cacert.pem
# chmod 644 /etc/postfix/cacert.pem
Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s