TLS-Unterstützung

Wie bereits erwähnt, sollten Sie die im Klartext übertragenen Benutzernamen und -passwörter mit TLS gegen Abhören absichern. Postfix bietet dafür sowohl auf Client- (»smtp« ) als auch Serverseite (»smtpd« ) TLS-Support an. Im Anwendungsbeispiel soll sich die Absicherung zunächst auf den SMTPD beschränken. Folgende Schritte sind erforderlich: Zertifikate erstellen und signieren, , TLS-Server aktivieren, TLS-Server testen, Plaintext-Mechanismen durch TLS schützen

Abbildung 4: TLS-Verschlüsselung (Transport Layer Security) schützt den Austausch der Benutzerdaten bei der SMTP-Authentifizierung gegen Abhören.

Als erstes müssen Sie sich ein X.509-Server-Zertifikat generieren und von einer CA (Certification Authority) signieren lassen (zum Beispiel[9]) – oder Sie benutzen ein selbstsigniertes Zertifikat. Wenn Sie das Zertifikat ausschließlich in privatem Rahmen einsetzen werden, müssen Sie eventuell gar keine kommerzielle CA bemühen. Sie können sich mit OpenSSL eine eigene CA errichten und mit dieser Ihre privat genutzten Zertifikate selber signieren. Ihre selbst-signierten Zertifikate werden allerdings im öffentlichen Mailverkehr keiner Verifikation standhalten, außer Sie bringen die Postmaster der anderen Server dazu, das Stammzertifikat Ihrer privaten CA zu importieren.

Zuallererst müssen Sie einen Certificate Signing Request (CSR) generieren. Die dabei erstellte Datei übergeben Sie an die CA, die daraus dann durch ihre Signatur ein vollwertiges, öffentliches Zertifikat erstellt. Einen CSR können Sie mit OpenSSL schnell erzeugen. Bevor Sie jedoch loslegen, sollten Sie ein paar Daten zur Hand haben, die OpenSSL abfragt: Country, State or province, City or other municipal area, Organization, Organization unit, Common name, Email address. Mit »CA.pl« aus dem OpenSSL Paket generieren Sie sich eine eigene CA (Listing 6).

Listing 6

Certification Authority

# ./CA.pl -newca
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:
*** Diese Passphrase müssen Sie sich gut merken, Sie müssen sie
jedesmal eingeben, wenn Sie als CA ein Zertifikat signieren wollen!
Verifying - Enter PEM pass phrase:
-----
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]:EX
State or Province Name (full name) [Some-State]:Examplia
Locality Name (eg, city) []:Exampleton
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc.
Organizational Unit Name (eg, section) []:Certification Authority
Common Name (eg, YOUR name) []:mail.example.com
Email Address []:postmaster@example.com

Nachdem Sie das Skript ausgeführt haben, finden Sie ein neues Verzeichnis samt Unterverzeichnissen und neuen Dateien in »misc/demoCA« vor (Listing 7).

Listing 7

Dateistruktur der CA

# tree demoCA/
demoCA/
|-- cacert.pem
|-- certs
|-- crl
|-- index.txt
|-- newcerts
|-- private
| -- cakey.pem
-- serial

Die Datei »cakey.pem« ist der private Schlüssel Ihrer CA. Stellen Sie sicher, dass nur der User, der die CA bedient, sie lesen und schreiben kann. Das in Listing 8 zu sehende Kommando, ausgeführt in »/usr/local/ssl/misc« , erstellt den Certificate Request.

Listing 8

Certificate Request

# openssl req -new -nodes -keyout postfix_private_key.pem \
  -out postfix_private_key.pem -days 365
Generating a 1024 bit RSA private key
......................++++++
..........++++++
writing new private key to 'postfix_private_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]:EX
State or Province Name (full name) [Some-State]:Examplia
Locality Name (eg, city) []:Exampleton
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc.
Organizational Unit Name (eg, section) []:MX Services
Common Name (eg, YOUR name) []:mail.example.com
Email Address []:postmaster@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Als letzten Schritt müssen Sie jetzt noch den Certificate Signing Request als CA in ein Serverzertifikat umwandeln. Dazu signieren Sie als CA die Datei »postfix_private_key.pem« und erzeugen im selben Arbeitsschritt »postfix_public_cert.pem« (Listing 9). Alternativ übermitteln Sie den CSR an Ihre kommerzielle CA, die ihn dann signiert.

Listing 9

Serverzertifikat

# openssl ca -policy policy_anything -out postfix_public_cert.pem -infiles postfix_private_key.pem
Using configuration from /usr/local/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
...
Certificate is to be certified until Nov 8 21:25:13 2004 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Jetzt sollten Sie eine neue Datei »postfix_public_cert.pem« in »/usr/local/ssl/misc« vorfinden. Diese enthält das Zertifikat, das Postfix später an die Clients senden wird. Dieses Zertifikat signiert es mit dem privaten Schlüssel »postfix_private_key.pem« . Der Client liest daraufhin das CA-Zertifikat ein und die vergleicht Prüfsumme von »postfix_public_cert.pem« mit dem CA-Zertifikat. Ist die Überprüfung erfolgreich, gilt die Identität des Servers als bestätigt.

Bei Debian-basierten Distributionen wandern die CA-Zertifikate in ein nach der CA benanntes Unterverzeichnis von »/usr/share/ca-certificates« Danach rufen Sie einmal »dpkg-reconfigure ca-certificates« auf und vertrauen der neu hinzugefügten CA.

TLS Server aktivieren

Danach müssen Sie Postfix nur noch instruieren, die Datei »/etc/ssl/certs/ca-certificates.crt« zu verwenden:

smtp_tls_CAfile = /etc/ssl/certs/ca-↩
certificates.crt
smtpd_tls_CAfile = /etc/ssl/certs/ca-↩
certificates.crt

Das Skript »update-ca-certificates« erzeugt die Datei »/etc/ssl/certs/ca-certificates.crt« aus allen vertrauenswürdigen CA-Zertifikaten, Den privaten Schlüssel und das signierte Server-Zertifikat legen Sie dann in »/etc/ssl/private/meinserver.key« beziehungsweise »/etc/ssl/certs/meinserver.pem« ab (Listing 10).

Listing 10

Zertifikate in der Postfix-Config

smtpd_tls_key_file = /etc/ssl/private/meinserver.key
smtpd_tls_cert_file = /etc/ssl/certs/meinserver.pem
smtpd_use_tls = yes
smtpd_tls_loglevel = 2
tls_random_source = dev:/dev/urandom

Diese drei Optionen aktivieren TLS für den »smtpd« , setzen einen vernünftigen Loglevel und spezifizieren eine nicht-blockierende Quelle für die Entropie, die der Zufallszahlengenerator benötigt. Mit dem folgenden Kommando testen Sie, ob Postfix die Zertifikate richtig eingebunden hat und ob die Zertifikate verifiziert werden können:

openssl s_client -starttls smtp -CApath ↩
/etc/postfix/certs/ -connect localhost:25

Mit den bisherigen Einstellungen erlaubt Postfix noch die Anmeldung über unverschlüsselte Verbindungen. Die folgenden Optionen in »main.cf« verhindern sie das: Postfix bietet SMTP-Auth mit Plaintext-Mechanismen nur dann an, wenn eine mit TLS verschlüsselte Verbindung besteht:

smtpd_sasl_security_options = noanonymous, ↩
noplaintext
smtpd_sasl_tls_security_options = noanonymous

Nun kann sich kein Benutzer mehr über SMTP-Auth anmelden, wenn die Verbindung nicht verschlüsselt ist.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2021