Ich gehe davon aus, dass Postfix schon installiert ist. Die Server von GMail setzen für eine erfolgreiche Verbindung TLS-Verschlüsselung voraus. Das ist schon in Debians Postfix reinkompiliert, also müssen wir uns nur darum kümmern, gültige Zertifikate zu haben, damit die Verbindung zu Stande kommen kann (und natürlich braucht man einen gültigen GMail-Account, aber das ist wohl selbstredend
1. Installieren der notwendigen Software
sudo aptitude install postfix libsasl2 sasl2-bin libsasl2-modules procmail
Wir müssen einige temporäre Dateien anlegen, deshalb sollte man am besten im home-Verzeichnis arbeiten (oder auch unter /tmp).
Die CA erstellen wir mit folgendem Befehl:
/usr/lib/ssl/misc/CA.pl -newca
Sie werden im Folgenden nach einigen Informationen gefragt, z.B. der Passphrase. Dies ist ein Passwort, das Sie später brauchen, wenn Sie Zertifikate mit der CA signieren wollen. In den anderen Werte können Sie eintragen, was Sie wollen (und was stimmig ist), aber auch diese Werte werden in einem späteren Schritt nochmals gebraucht. Also beides gut merken und alle Felder sinnvoll ausfüllen!
3. Erstellen eines Server-Zertifikats
Die Werte in diesem Schritt müssen exakt mit Ihren Angaben aus Punkt 2 übereinstimmen. Erstellen Sie das Zertifikat folgendermaßen:
openssl req -new -nodes -subj '/CN=bheil.net/O=Schlumpfhausener Feuerwehr/C=DE/ST=Germany/L=Schlumpfhausen/emailAddress=kontakt@bheil.net' -keyout FOO-key.pem -out FOO-req.pem -days 3650
4. Signieren des Zertifikats
Nun muss das Server-Zertifikat aus Punkt 3 noch mit der CA aus Punkt 2 signiert werden:
openssl ca -out FOO-cert.pem -infiles FOO-req.pem
5. Kopieren des Zertifikats in den Postfix-Ordner
Da die Konfiguration von Postfix unter /etc/postfix liegt, sollten auch die Dateien des Zertifikats dort sein. Ebenso müssen die Rechte angepasst werden, damit z.B. der Key nur vor Postfix lesbar ist.
Kopieren Sie also die Dateien und passen Sie die Rechte an:
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
GMail verwendet das Thawte Premium Server CA. Dieses CA muss ans Ende der Datei /etc/postfix/cacert.pem angehängt werden. Dazu kann man unter www.thawte.com/roots die CAs von Thawte herunterladen. Wir brauchen die Datei ThawtePremiumServerCA_b64.txt. Den Inhalt dieser Datei kann an die Datei cacert.pem folgendermaßen angehängt werden:
cat ThawtePremiumServerCA_b64.txt >>/etc/postfix/cacert.pem
Postfix muss auch noch so konfiguriert werden, dass automatisch beim Versenden der SMTP-Server von GMail verwendet wird und zu diesem sofort eine verschlüsselte Verbindung geöffnet wird.
Dies ist eine Beispielkonfiguration, die nicht vollständig sein muss (aber für mich funktioniert):
transport_maps = hash:/etc/postfix/transport
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
smtpd_sasl_auth_enable = no
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_tls_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
## Gmail Relay
relayhost = [smtp.gmail.com]:587
gmail.com smtp:[smtp.gmail.com]:587
dann noch eine zweite Datei /etc/postfix/sasl_passwd erstellen mit folgendem Inhalt:
[smtp.gmail.com]:587 username@gmail.com:__password__
Hierbei muss username@gmail.com sowie __password__ durch die eigenen Anmeldedaten ersetzt werden. Man sollte evtl. noch für die richtige Berechtigung bei dieser Datei sorgen - sie sollte nicht unbedingt systemweit lesbar sein, da sonst für jeden Nutzer die eigenen Login-Daten ersichtlich sind.
Die letzten beiden Dateien müssen noch gehasht werden, damit sie in den Format vorliegen, in dem Postfix diese Dateien erwartet:
postmap sasl_passwd && postmap transport
Nach einem Neustart von Postfix durch
sudo /etc/init.d/postfix restart
mail -s "TEST" username@gmail.com
In der Logdatei /var/log/mail.log sollte etwas ähnliches wie das hier stehen, wenn die Mail korrekt versandt wurde:
Aug 8 10:10:14 bheil postfix/smtp[16543]: 50CC06872B: to=<kontakt@bheil.net>, relay=smtp.gmail.com[209.85.135.111]:587, delay=5.9, delays=0.11/0.04/1/4.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1218197399 t10sm1790990muh.17)
Wichtig ist das status=sent; steht etwas wie status=bounced, dürfte es Probleme mit TLS, also der Verschlüsselung, geben! Zur Fehlersuche kann man in Postfix die Zeile smtp_tls_loglevel = 1 an die main.cf anfügen. Dann steht mehr über den Verbindungsaufbau zum SMTP-Server in der Logdatei und man kann TLS-Fehler analysieren.
9. Abschluss
Eingentlich war's das schon, aber man sollte nicht vergessen, die temporären Dateien wieder zu löschen, die im home-Verzeichnis angelegt wurden:
rm FOO-req.pem FOO-cert.pem FOO-key.pem && rm -r demoCA/
Kommentar schreiben