Postfix- TLS und PFS

Folgt man den Medien so könnte man den Eindruck gewinnen, dass das illegale Abhören der digitalen und analogen Kommunikation erst seit kurzem stattfindet. Tatsache ist jedoch, dass die Ursprünge ein ganz klein wenig weiter bis kurz vor die Geburt von Edward Snowden im Jahr 1983 in die Vergangenheit reichen- so ca. bis zum Zweiten Weltkrieg als ein Staatenverbund UKUSA gegründet hat, aus dem das Echelon- Netzwerk entstanden ist. Mindestens eine Station dieses globalen Abhörnetzwerkes stand/ steht übrigens mitten in Deutschland, in Bad Aibling. Diese wurde offiziell 2004 abgebaut. Aber es gibt ja auch noch den Dagger Complex bei Darmstadt und Einrichtungen in Wiesbaden, Stuttgart und...

Es handelt sich also schlicht und ergreifend um ein Problem, das, den Medien sein dank, nun endlich in das Bewusstsein der Menschen gerückt wird. Um es den Geheimdiensten nicht allzu leicht zu machen an die Informationen zu kommen gibt es simple Methoden. Nach der Konfiguration eines Postfix- Systems gemäß der folgenden Anleitung werden ein- und auch ausgehende Mails verschlüsselt. Dies bedingt natürlich, dass die Gegenstellen Mailsysteme ebenfalls entsprechend konfiguriert sind. Bieten diese keine Verschlüsselung an, so erfolgt die Übertragung nach wie vor unverschlüsselt.

CSR erzeugen

Schritt eins ist die Erzeugung eines sogenannten Certificate Signing Requests, der die Grundlage für die Ausstellung eines Serverzertifikates ist. In diesem Schritt wird auch gleich der private Schlüssel erzeugt.  
# openssl req -nodes -new -newkey rsa:2048 -out mail.bayreuth.tk.csr.pem -keyout mail.bayreuth.tk.key.pem
     
Generating a 2048 bit RSA private key
........................................+++
..............................................................+++
writing new private key to 'mail.bayreuth.tk.key.pem'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank For some fields there will be a default value,
If you enter '.', the field will be left blank -----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Bavaria
Locality Name (eg, city) []:Bayreuth
Organization Name (eg, company) [Internet Widgits Pty Ltd]:bayreuth.tk
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:mail.bayreuth.tk
Email Address []:postmaster@bayreuth.tk
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  Hierbei wurden folgende beiden Dateien erzeugt:
mail.bayreuth.tk.key.pem
mail.bayreuth.tk.csr.pem Die Namen, sowie die eingetragenen Werte müssen selbstverständlich an die eigenen Gegebenheiten angepasst werden.

Signieren des CSR

mail.bayreuth.tk.csr.pem, bzw. der Inhalt der Datei, muss nun zum Signieren an eine zertifizierte Signierungsstelle zur Validierung eingeschickt werden. In diesem Beispiel ist das StartSSL, wo ein für ein Jahr gültiges, kostenloses Zertifikat angeboten wird. Dieses Zertifikat erfüllt keine hohen Sicherheitsanforderungen, reicht für dieses Beispiel jedoch vollkommen aus.

Was dabei erzeugt wird ist das Serverzertifikat (mail.bayreuth.tk.cert.pem).
Von dieser Signierungsstelle holt man sich gleich auch noch das passende CA- Zertifikat- bei StartSSL ist es hier www.startssl.com/certs/sub.class1.server.ca.pem zu finden.

Ablage der Schlüsseldateien

Im nächsten Schritt legt man unterhalb von /etc/postfix ein neues Verzeichnis namens certs an, das die Zertifikate enthält.
 
# mkdir /etc/postfix/certs
 
In dieses Verzeichnis kopiert man nun alle Zertifikatsdateien:
 
# cp privkey.pem /etc/postfix/certs/mail.bayreuth.tk.key.pem
   
# cp mail.bayreuth.tk.cert.pem /etc/postfix/certs/mail.bayreuth.tk.cert.pem
   
# cp sub.class1.server.ca.pem /etc/postfix/certs/startcom-ca.pem

PFS- Perfect Forward Secracy

Nun werden die für die Einrichtung von Perfect Forward Secrecy (PFS) benötigten Diffie-Hellmann-Schlüssel erzeugt:

 
# openssl gendh -out /etc/postfix/certs/dh_512.pem -2 512
   
# openssl gendh -out /etc/postfix/certs/dh_1024.pem -2 1024

TLS für Postfix SMTP

Um TLS auch für den ausgehenden Mailverkehr verwenden zu können ist noch ein Zwischenschritt notwendig- das Zusammenfügen des Serverzertifikates und des CA-Certs zu einem Client- Zertifikat:
 
# cd /etc/postfix/certs
   
# cat mail.bayreuth.tk.cert.pem startcom-ca.pem > mail.bayreuth.tk.client.pem

Konfiguration des Postfix- Systems

Als nächstes erfolgt die Anpassung der Postfix- Konfiguration, die sich unter /etc/postfix findet:
 
# cd /etc/postfix
# vi main.cf
...
# tls smtp
smtp_tls_CAfile = /etc/postfix/certs/startcom-ca.pem
smtp_tls_cert_file = /etc/postfix/certs/mail.bayreuth.tk.client.pem
smtp_tls_key_file = /etc/postfix/certs/mail.bayreuth.tk.key.pem
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_tls_security_level = may
smtp_tls_loglevel = 1
# tls smtpd
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_CAfile = /etc/postfix/certs/startcom-ca.pem
smtpd_tls_cert_file = /etc/postfix/certs/mail.bayreuth.tk.cert.pem
smtpd_tls_key_file = /etc/postfix/certs/mail.bayreuth.tk.key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_use_tls = yes
# pfs
smtpd_tls_dh1024_param_file = /etc/postfix/dh_2048.pem
smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem
smtpd_tls_eecdh_grade = strong
tls_preempt_cipherlist = yes
...
 
Nach einem Reload der Postfix Konfiguration mittels "postfix reload" sollten im Maillog Zeilen verzeichnet werden, die die Zeichenfolge TLS enthalten. Taucht hier auch noch DHE oder ECDHE auf, so kann man sicher sein, dass die Perfect Forward Secrecy Verwendung findet.