Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

centos:mail_c7:mta_5 [05.12.2015 21:02. ] – [Schlüssel für das Serverzertifikat erzeugen] djangocentos:mail_c7:mta_5 [22.07.2019 15:08. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== TLS-Verbindungen, verschlüsselte Kommunikation für Postfix 2.11 unter CentOS 7 ====== ====== TLS-Verbindungen, verschlüsselte Kommunikation für Postfix 2.11 unter CentOS 7 ======
 {{:centos:world.png?nolink&80 |Bild: Weltkugel }} \\ {{:centos:world.png?nolink&80 |Bild: Weltkugel }} \\
-Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen.  Daten durchlaufen von der Quelle bis zum Ziel zahlreiche Server und Systeme, an denen die Daten, abgegriffen und/oder manipuliert werden können. Persönliche und vertrauliche Daten können so einfach Dritten in die Hände fallen, die mit großer krimineller Energie versuchen an diese Daten zu kommen. +Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen.  Daten durchlaufen von der Quelle bis zum Ziel zahlreiche Server und Systeme, an denen die Daten, abgegriffen und/oder manipuliert werden können. Persönliche und vertrauliche Daten können so einfach Dritten in die Hände fallen, die mit grosser krimineller Energie versuchen an diese Daten zu kommen. 
  
 Inwieweit staatliche Stellen den Datenverkehr abhören, protokollieren und abgreifen und zu manipulieren bzw. zensieren versuchen, weiss  Inwieweit staatliche Stellen den Datenverkehr abhören, protokollieren und abgreifen und zu manipulieren bzw. zensieren versuchen, weiss 
Zeile 15: Zeile 15:
 Nicht nur auf [[centos:openpgp_beim_mua|Seiten der Endkunden]], die mit Hilfe von [[http://www.openpgp.org/|OpenPGP]] oder [[http://www.smime.org/|S/MIME]] vertraulich kommunizieren, sondern auch serverseitig kann der Übertragungsweg mit einfachen Mitteln entsprechend verschlüsselt werden. {{:centos:mailserver:lan_security.png?96 |SSL/TLS Logo}} Für die vertrauliche Kommunikation zwischen unseren Usern und unserm [[centos:mailserver:start|Postfix-Mailserver]], wie auch zwischen fremden Postfix bietet sich eine verschlüsselte Kommunikation mit Hilfe von **SSL/TLS** an. Nicht nur auf [[centos:openpgp_beim_mua|Seiten der Endkunden]], die mit Hilfe von [[http://www.openpgp.org/|OpenPGP]] oder [[http://www.smime.org/|S/MIME]] vertraulich kommunizieren, sondern auch serverseitig kann der Übertragungsweg mit einfachen Mitteln entsprechend verschlüsselt werden. {{:centos:mailserver:lan_security.png?96 |SSL/TLS Logo}} Für die vertrauliche Kommunikation zwischen unseren Usern und unserm [[centos:mailserver:start|Postfix-Mailserver]], wie auch zwischen fremden Postfix bietet sich eine verschlüsselte Kommunikation mit Hilfe von **SSL/TLS** an.
  
-Mit Hilfe von **[[centos:mail_c7:mta_5?&#perfect_forward_secrecy|PFS]]**((**P**erfect **F**orward **S**ecrecy)) können wir leicht und einfach sicherstellen, dass aufgezeichnete Datenströme im nachhinein nicht entschlüsselt werden können. Dies wird erreicht, da die beiden Kommunikationspartner, einen separaten und individuellen temporären Schlüssel zur Datensicherung verweden. Dieser Schlüssel ist dabei nicht fix, sondern wird bei jeder Verbindung neu ausgehandelt. Da aber der Schlüssel an sich nicht ausgetauscht werden muss, ist es auch nicht möglich, den eventuell aufgezeichneten Datenstrom zu entschlüsseln, da der dazu benötigte Schlüssel nicht im Datenstrom enthalten war. +Mit Hilfe von **[[centos:mail_c7:mta_5?&#perfect_forward_secrecy|PFS]]**((**P**erfect **F**orward **S**ecrecy)) können wir leicht und einfach sicherstellen, dass aufgezeichnete Datenströme im nachhinein nicht entschlüsselt werden können. Dies wird erreicht, da die beiden Kommunikationspartner, einen separaten und individuellen temporären Schlüssel zur Datensicherung verwenden. Dieser Schlüssel ist dabei nicht fix, sondern wird bei jeder Verbindung neu ausgehandelt. Da aber der Schlüssel an sich nicht ausgetauscht werden muss, ist es auch nicht möglich, den eventuell aufgezeichneten Datenstrom zu entschlüsseln, da der dazu benötigte Schlüssel nicht im Datenstrom enthalten war. 
  
-Perfect Forward Secrecy (PFS) basiert auf der Idee, dass Client und Server ihre Kommunikation über einen zusätzlichen temporären Schlüssel absichern, der wechselt. Da der Verbindungsaufbau so gestrickt ist, daß der Schlüssel selbst gar nicht ausgetauscht werden muß, kann der jeweils benutzte Sitzungsschlüssel selbst auch nicht aufgezeichnet werden. Eine nachträgliche Entschlüsselung einer früher aufgezeichneten Session ist damit nicht mehr möglich. +Perfect Forward Secrecy (PFS) basiert auf der Idee, dass Client und Server ihre Kommunikation über einen zusätzlichen temporären Schlüssel absichern, der wechselt. Da der Verbindungsaufbau so gestrickt ist, dass der Schlüssel selbst gar nicht ausgetauscht werden muss, kann der jeweils benutzte Sitzungsschlüssel selbst auch nicht aufgezeichnet werden. Eine nachträgliche Entschlüsselung einer früher aufgezeichneten Session ist damit nicht mehr möglich. 
  
 Die für die Verschlüsselung notwendigen //Schlüssel// und //Zertifikate// erstellen wir mittels [[http://www.openssl.org|OpenSSL]], einer freien Implementierung von **SSL**((**S**ecure **S**ockets **L**ayer)). **SSL** oder **TLS**((**T**ransport **L**ayer **S**ecurity)) ist ein hybrides Verschlüsselungsprotokoll zur Datenübertragung im Internet. Unter TLS 1.0, 1.1 und 1.2 versteht man die standardisierten Weiterentwicklungen von SSL 3.0 (TLS 1.0 steht neu für SSL 3.1). Dies bedeutet also, SSL wird nun unter dem Namen TLS weiterentwickelt. Die für die Verschlüsselung notwendigen //Schlüssel// und //Zertifikate// erstellen wir mittels [[http://www.openssl.org|OpenSSL]], einer freien Implementierung von **SSL**((**S**ecure **S**ockets **L**ayer)). **SSL** oder **TLS**((**T**ransport **L**ayer **S**ecurity)) ist ein hybrides Verschlüsselungsprotokoll zur Datenübertragung im Internet. Unter TLS 1.0, 1.1 und 1.2 versteht man die standardisierten Weiterentwicklungen von SSL 3.0 (TLS 1.0 steht neu für SSL 3.1). Dies bedeutet also, SSL wird nun unter dem Namen TLS weiterentwickelt.
Zeile 270: Zeile 270:
 openssl dhparam -out dh_1024.pem 1024 openssl dhparam -out dh_1024.pem 1024
 openssl dhparam -out dh_2048.pem 2048 openssl dhparam -out dh_2048.pem 2048
-chmod 640 dh_512.pem dh_1024.pem dh_2048.pem+openssl dhparam -out dh_4096.pem 4096 
 +chmod 640 dh_512.pem dh_1024.pem dh_2048.pem dh_4096.pem
 /usr/bin/rsync /etc/pki/tls/tmp/*.pem /etc/pki/tls/private/ /usr/bin/rsync /etc/pki/tls/tmp/*.pem /etc/pki/tls/private/
 rm *.pem -f rm *.pem -f
-</file>+systemctl condrestart postfix</file>
  
-Damit das Script auch ausgeführt werdden kann, versehen wir es noch mit den benötigten Rechten.+Damit das Script auch ausgeführt werden kann, versehen wir es noch mit den benötigten Rechten.
    # chmod +x edh_keygen    # chmod +x edh_keygen
  
 <WRAP center round tip> <WRAP center round tip>
-Warum das ganze in ein Shellsript packen, wird nun sich der ein oder andere gefragt haben. Ganz einfach: Wenn wir das Script nun nach **///etc/cron.hourly//** verschieben, können wir einfach stündlich neu generierte Schlüssel generieren und auch verwenden!+Warum das ganze in ein Shellsript packen, wird nun sich der ein oder andere gefragt haben. Ganz einfach: Wenn wir das Script nun nach **///etc/cron.daily//** verschieben, können wir einfach einmal am Tag neu generierte Schlüssel generieren und auch verwenden!
 </WRAP> </WRAP>
-   # mv edh_keygen /etc/cron.hourly/+   # mv edh_keygen /etc/cron.daily/ 
 + 
 +Zum Testen welche Schlüssel vom Server verwendet werden, können wir folgenden Befehl verwenden: 
 +   $ echo | openssl s_client -starttls smtp -connect smtp.nausch.org:25 -cipher "EDH" 2>/dev/null | grep -ie "Server .* key" 
 + 
 +Als Antwort erhalten wie zwei Zeilen mit Angabe zu den Schlüssellängen. Die erste Zeile beschreibt den temporären Diffie Hellman, die zweite Zeile den RSA-Schlüssel des TLS-Zertifikats. 
 +  Server Temp Key: DH, 4096 bits 
 +  Server public key is 4096 bit
  
  
Zeile 564: Zeile 572:
    -rw-r--r-- 1 root root 3394 Jul 23 14:07 cakey.pem    -rw-r--r-- 1 root root 3394 Jul 23 14:07 cakey.pem
  
-Sichtshalber ändern wir die Rechte so, dass die Schlüsseldateien nur für root lesbar sind: +Sicherheitshalber ändern wir die Rechte so, dass die Schlüsseldateien nur für root lesbar sind: 
    # chmod 400 *.pem    # chmod 400 *.pem
 Bei Bedarf kann man mit **openssl rsa -in <keyfile> -noout -text** die Schlüsseldatei öffnen und ausgeben lassen. Bei Bedarf kann man mit **openssl rsa -in <keyfile> -noout -text** die Schlüsseldatei öffnen und ausgeben lassen.
Zeile 1305: Zeile 1313:
  
 Anschließend legen wir dort die drei benötigten Dateien ab: Anschließend legen wir dort die drei benötigten Dateien ab:
-  - unseren //Serverzertifikat// : **servercert.pem** <code> # mv /etc/pki/CA/servercert.pem /etc/pki/postfix/certs/servercert_2014-10-19.pem</code> + 
-  - unseren //Serverschlüssel// : **serverkey.pem** <code> # mv /etc/pki/CA/serverkey.pem /etc/pki/postfix/private/serverkey_2014-10-19.pem</code> +<WRAP center round tip 60%> 
-  - das //CA-Zertifikat// : **cacert.pem** <code> # cp /etc/pki/CA/cacert.pem /etc/pki/dovecot/certs/</code> +Die Dateinamen passen wir natürlich den lokalen Gegebenheiten nach an! 
-  - und schützen diese Dateien mit den Dateirechten **400**: <code> # chmod 400 /etc/pki/dovecot/private/*.pem +</WRAP> 
- # chmod 400 /etc/pki/dovecot/certs/*.pem</code>+ 
 + 
 +  - unseren //Serverzertifikat// : **servercert.pem** <code> # mv /etc/pki/CA/servercert.pem /etc/pki/postfix/certs/servercert.pem</code> 
 +  - unseren //Serverschlüssel// : **serverkey.pem** <code> # mv /etc/pki/CA/serverkey.pem /etc/pki/postfix/private/serverkey.pem</code> 
 +  - das //CA-Zertifikat// : **cacert.pem** <code> # cp /etc/pki/CA/cacert.pem /etc/pki/postfix/certs/</code> 
 +  - und schützen diese Dateien mit den Dateirechten **400**: <code> # chmod 400 /etc/pki/postfix/private/*.pem 
 + # chmod 400 /etc/pki/postfix/certs/*.pem</code> 
  
  
Zeile 2293: Zeile 2308:
 Den erhaltenen Fingerprint //**C3:17:BB:DC:7F:E3:51:F6:3E:48:E7:4F:5A:48:48:6C:94:24:63:0E**// lassen wir uns nun vom Postmaster des Zielmailservers bestätigen. Hierzu wählen wir ein anderes Übertragungsmedium wie z.B. Telefon oder Faksimile.  Den erhaltenen Fingerprint //**C3:17:BB:DC:7F:E3:51:F6:3E:48:E7:4F:5A:48:48:6C:94:24:63:0E**// lassen wir uns nun vom Postmaster des Zielmailservers bestätigen. Hierzu wählen wir ein anderes Übertragungsmedium wie z.B. Telefon oder Faksimile. 
  
-Keinenfalls vermerken wir  **__ohne__** weitere Prüfung den Fingerprints in einer lokalen Konfigurationsdatei!+Keinesfalls vermerken wir  **__ohne__** weitere Prüfung den Fingerprints in einer lokalen Konfigurationsdatei!
 </WRAP> </WRAP>
  
-Den **__verifizierten Fingerprint__** hinterlegen wir nun in einer eigenen Konfigurationsdatei //**smtp_tls_policy_maps**// die wir anschließend unserem Postfix-Mailserver bekannt geben.  +Den **__verifizierten Fingerprint__** hinterlegen wir nun in einer eigenen Konfigurationsdatei //**smtp_tls_policy_maps**// die wir anschliessend unserem Postfix-Mailserver bekannt geben.  
  
 Zunächst legen wir uns die benötigte Konfigurationsdatei an. Zunächst legen wir uns die benötigte Konfigurationsdatei an.
Zeile 2318: Zeile 2333:
    # postmap /etc/postfix/smtp_tls_policy_maps    # postmap /etc/postfix/smtp_tls_policy_maps
  
-Damit nun der SMTP-Client weiß wie er den richtigen Fingerprint (MD5 oder SHA1) des empfangenen Server-Zertifikates ermitteln soll, müssen wir den verwendeten **[[https://de.wikipedia.org/wiki/Hashfunktion|Hash-Algorithmus]]** unserem Server noch vorgeben. Dies tragen wir in der Sektion **TLS/SSL-VERSCHLÜSSELUNG** unserer Postfixinstallation ein.+Damit nun der SMTP-Client weiss wie er den richtigen Fingerprint (MD5 oder SHA1) des empfangenen Server-Zertifikates ermitteln soll, müssen wir den verwendeten **[[https://de.wikipedia.org/wiki/Hashfunktion|Hash-Algorithmus]]** unserem Server noch vorgeben. Dies tragen wir in der Sektion **TLS/SSL-VERSCHLÜSSELUNG** unserer Postfixinstallation ein.
    # vim  /etc/postfix/main.cf      # vim  /etc/postfix/main.cf  
  
Zeile 2374: Zeile 2389:
 Wir sehen in dem Beispiel die Einlieferung einer Nachricht via **submission Port 587**, gefolgt vom Verbindungsaufbau des **SMTP-Clients** in Richtung **mx1.tachtler.net[88.217.171.167]:25**.  Wir sehen in dem Beispiel die Einlieferung einer Nachricht via **submission Port 587**, gefolgt vom Verbindungsaufbau des **SMTP-Clients** in Richtung **mx1.tachtler.net[88.217.171.167]:25**. 
  
-Da wir aber den Fingerprint in unserer Konfigurationsdatei absichtlich falsch gesetzt habenkann die Überprüfung des Fingerprints kein positives Ergebnis bringen: +Wurde das Zertifikat ausgetauscht ohne dem versendenden Kommunikationspartner zu informierenscheitert die  verschlüsselte und verifizierte Verbindung, da die Überprüfung des Fingerprints kein positives Ergebnis mehr bringen kann
-   Oct 12 14:59:45 vml000087 postfix/smtp[20834]: CC17DC00092: to=<klaus@tachtler.net>, relay=mx1.tachtler.net[88.217.171.167]:25, delay=0.77, delays=0.06/0.01/0.7/0, dsn=4.7.5, status=deferred (Server certificate not verified) +   Oct  1 19:02:56 vml000087 postfix/smtp[2818]: Trusted TLS connection established to mx1.tachtler.net[88.217.171.167]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits) 
-Die Nachricht wird also nicht versandt, sondern in die **//deffered//-Queue** gestellt!+   Oct  1 19:02:56 vml000087 postfix/smtp[2818]: DEA87C0008A: to=<klaus@tachtler.net>, relay=mx1.tachtler.net[88.217.171.167]:25, delay=88445, delays=88437/0.04/8.5/0, dsn=4.7.5, status=deferred (Server certificate not verified) 
 + 
 +Die Nachricht wird also nicht versandt, da nicht sichergestellt werden kann, dass wir auch wirklich mit dem richtigen Empfangssystem reden. Statt dessen wir die Nachricht in die **//deffered//-Queue** eingestelltAm besten überwacht man daher das **maillog** mit Hilfe einer gängigen Monitoring-Lösung wie **[[centos:web_c7:graylog2|graylog]]** oder **[[centos:web_c7:icinga:start|icinga 2]]**.
  
 <WRAP center round tip> <WRAP center round tip>
Zeile 2382: Zeile 2399:
  
 <WRAP center round important > <WRAP center round important >
-Hat man viele dieser Ziele, kann das mauelle Pflegen von Fingerprints zum zeitaufwändigen Unterfangen werden. Wesentlich einfacher ist hier die Nutzung einer verpflichtenden Verschlüsselung unter Zuhilfenahme der Option **dane-only**.+Hat man viele dieser Ziele, kann das manuelle Pflegen von Fingerprints zum zeitaufwändigen Unterfangen werden. Zumal bei anstehenden Zertifikatsänderungen rechtzeitig dafür gesorgt werden muss, dass das sendende System die neuen Fingerprints auch kennt. Beispiele aus der Praxis zeigen leider, dass viele professionelle Dienstleister und auch entsprechend versierte und geschulte Postmaster hier __grosse Schwierigkeiten__ beim Ablauf und rechtzeitigen Erneuerung der Fingerprints haben. \\ 
 +Wesentlich einfacher ist hier die Nutzung einer verpflichtenden Verschlüsselung unter Zuhilfenahme der Option **dane-only**.
 </WRAP> </WRAP>
  
Zeile 2492: Zeile 2510:
 # default: smtpd_tls_dh512_param_file = # default: smtpd_tls_dh512_param_file =
 #          smtpd_tls_dh1024_param_file = #          smtpd_tls_dh1024_param_file =
-smtpd_tls_dh1024_param_file = /etc/pki/postfix/private/dh_2048.pem+smtpd_tls_dh1024_param_file = /etc/pki/postfix/private/dh_4096.pem
 smtpd_tls_dh512_param_file = /etc/pki/postfix/private/dh_512.pem</code> smtpd_tls_dh512_param_file = /etc/pki/postfix/private/dh_512.pem</code>
   - **"Ephemeral Elliptic Curve Diffie-Hellman" Schlüsselaustausch**: Definition des Grads der Sicherheit beim EECDH Schlüsselaustausch \\ \\ <code bash># Django : 2014-10-19 - Grad der Sicherheit beim EECDH Schlüsselaustausch   - **"Ephemeral Elliptic Curve Diffie-Hellman" Schlüsselaustausch**: Definition des Grads der Sicherheit beim EECDH Schlüsselaustausch \\ \\ <code bash># Django : 2014-10-19 - Grad der Sicherheit beim EECDH Schlüsselaustausch
Zeile 2696: Zeile 2714:
  
 Mit nachfolgendem Aufruf kann überprüft werden, welche Ciphers angeboten werden. Mit nachfolgendem Aufruf kann überprüft werden, welche Ciphers angeboten werden.
-   # /usr/local/src/cipherscan-master/cipherscan -o /usr/local/src/cipherscan-master/openssl --curves -starttls imap imap.nausch.org:587+   # /usr/local/src/cipherscan-master/cipherscan -o /usr/local/src/cipherscan-master/openssl --curves -starttls smtp mx1.nausch.org:587
  
 <code>..................................... <code>.....................................
Zeile 2864: Zeile 2882:
 </pre></html> </pre></html>
  
 +==== ssl-tools.net ====
  
 +Für eine sichere Verschlüsselung beim eMailtransport muss der Mailserver STARTTLS unterstützen. Ein vertrauenswürdiges SSL-Zertifikat sollte ebenso wie DANE zum Einsatz kommen. Selbstredend darf der Server nicht für Heartbleed anfällig sein und Perfect Forward Secrecy unterstützen.
 +
 +All diese Dinge lassen sich über die Testseite https://de.ssl-tools.net/mailservers/ überprüfen. Über den Link Mailzustellung testen kann man auch noch die Mailzustellung testen. Als Ergebnis erhält man eine aussagekräftige Aufstellung der Ergebnisse, so z.B. für den Mailserver von nausch.org: https://de.ssl-tools.net/mailservers/nausch.org
 +
 +{{ :centos:mail_c7:sssl-tools-ergebnis.png?800 |Bild: Ergebnis des scans bei https://de.ssl-tools.net/mailservers/}}
 +
 +
 + 
  
 ==== eMail-Verkehr ==== ==== eMail-Verkehr ====
Zeile 2902: Zeile 2929:
   * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**   * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
  
-~~DISCUSSION~~ 
-~~AUTOTWEET:~~ 
  
  • centos/mail_c7/mta_5.1449349340.txt.gz
  • Zuletzt geändert: 05.12.2015 21:02.
  • (Externe Bearbeitung)