Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
centos:mail_c7:mta_5 [22.10.2015 10:29. ] – [SMTP-Daemon (Empfang von eMails)] django | centos:mail_c7:mta_5 [18.11.2024 19:12. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== TLS-Verbindungen, |
- | + | ||
- | <WRAP center round todo 60%> | + | |
- | \\ **Artikel befindet sich gerade in der Überarbeitung!** | + | |
- | </ | + | |
- | + | ||
{{: | {{: | ||
- | Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen. | + | Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen. |
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 21: | Zeile 15: | ||
Nicht nur auf [[centos: | Nicht nur auf [[centos: | ||
- | Mit Hilfe von **[[centos: | + | Mit Hilfe von **[[centos: |
- | 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 | + | 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 |
Die für die Verschlüsselung notwendigen // | Die für die Verschlüsselung notwendigen // | ||
Zeile 270: | Zeile 264: | ||
<file bash edh_keygen># | <file bash edh_keygen># | ||
# Script zum Erstellen der Diffie Hellman Schlüssel | # Script zum Erstellen der Diffie Hellman Schlüssel | ||
- | # Django <django@mailserver.guru> (c) 2015 | + | # Django <django@nausch.org> (c) 2015 |
cd / | cd / | ||
umask 022 | umask 022 | ||
Zeile 276: | 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 | ||
/ | / | ||
rm *.pem -f | rm *.pem -f | ||
- | </ | + | systemctl condrestart postfix</ |
- | Damit das Script auch ausgeführt | + | Damit das Script auch ausgeführt |
# 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 **/// | + | Warum das ganze in ein Shellsript packen, wird nun sich der ein oder andere gefragt haben. Ganz einfach: Wenn wir das Script nun nach **/// |
</ | </ | ||
- | # 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: | ||
+ | |||
+ | 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 570: | Zeile 572: | ||
| | ||
- | Sichtshalber | + | Sicherheitshalber |
# chmod 400 *.pem | # chmod 400 *.pem | ||
Bei Bedarf kann man mit **openssl rsa -in < | Bei Bedarf kann man mit **openssl rsa -in < | ||
Zeile 1124: | Zeile 1126: | ||
< | < | ||
- | <font style=" | + | <font style=" |
</ | </ | ||
< | < | ||
Zeile 1311: | 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 // | + | <WRAP center round tip 60%> |
- | - das // | + | Die Dateinamen passen wir natürlich den lokalen Gegebenheiten nach an! |
- | - und schützen diese Dateien mit den Dateirechten **400**: < | + | </ |
- | # chmod 400 /etc/pki/dovecot/ | + | |
+ | |||
+ | | ||
+ | - unseren // | ||
+ | - das // | ||
+ | - und schützen diese Dateien mit den Dateirechten **400**: < | ||
+ | # chmod 400 /etc/pki/postfix/ | ||
Zeile 1690: | Zeile 1699: | ||
* Variante **a**: Hier weisen wir dem Postfix-Parameter **smtpd_tls_cert_file** der Datei zu, in dem sich " | * Variante **a**: Hier weisen wir dem Postfix-Parameter **smtpd_tls_cert_file** der Datei zu, in dem sich " | ||
# (Postfixbuch: | # (Postfixbuch: | ||
- | # Pfade für die Key- und Zertifikatsdateien | + | # Pfade für die Key- und Zertifikatsdateien |
# Konfigurationsbeispiel " | # Konfigurationsbeispiel " | ||
# Root-Zertifikate der CA in getrennten Dateien vorliegen. | # Root-Zertifikate der CA in getrennten Dateien vorliegen. | ||
Zeile 1703: | Zeile 1712: | ||
* Variante **b**: Hier weisen wir dem Postfix-Parameter **smtpd_tls_cert_file** diejenige Datei zu, in der, angefangen vom Serverzertifikat bis hin zum selbstsignierten Root-Zertifikat der CA, __alle__ benötigten Zertifikate vorfinden. Den Parameter **smtpd_tls_CAfile ** lassen wir erst einmal unbesetzt! < | * Variante **b**: Hier weisen wir dem Postfix-Parameter **smtpd_tls_cert_file** diejenige Datei zu, in der, angefangen vom Serverzertifikat bis hin zum selbstsignierten Root-Zertifikat der CA, __alle__ benötigten Zertifikate vorfinden. Den Parameter **smtpd_tls_CAfile ** lassen wir erst einmal unbesetzt! < | ||
# (Postfixbuch: | # (Postfixbuch: | ||
- | # Pfade für die Key- und Zertifikatsdateien | + | # Pfade für die Key- und Zertifikatsdateien |
- | # Konfigurationsbeispiel "a" bei dem das Serverzertifikat und die beiden | + | # Konfigurationsbeispiel "b" bei dem das Serverzertifikat und die beiden |
# Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
# default: smtpd_tls_key_file = $smtpd_tls_cert_file | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
Zeile 1715: | Zeile 1724: | ||
Haben die Konfiguration werden Informationen zur TLS-Verschlüsselung im Mailheader der angenommenen Nachrichten eingefügt, vorausgesetzt wir haben den Parameter **[[centos: | Haben die Konfiguration werden Informationen zur TLS-Verschlüsselung im Mailheader der angenommenen Nachrichten eingefügt, vorausgesetzt wir haben den Parameter **[[centos: | ||
- | < | + | <html>< |
- | (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) | + | |
- | (No client certificate requested) | + | <font style=" |
- | by mx01.nausch.org (Postfix) with ESMTPS id 3F887C00088 | + | |
- | for < | + | |
- | Der Zusatz | + | Der Zusatz |
< | < | ||
Zeile 1729: | Zeile 1738: | ||
</ | </ | ||
- | FIXME do geds weida ... FIXME | + | Haben wir diese Funktion gesetzt, werden wir nun Informationen zum **CN** des Zertifikats und eine Bewertung des Vertrauensstatuses zu dem Zertifikat vorfinden, wie nachfolgender Ausschnitt aufzeigt. |
+ | |||
+ | < | ||
+ | (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) | ||
+ | (<font style=" | ||
+ | by mx01.nausch.org (Postfix) with ESMTPS id 57BD3C00088 | ||
+ | | ||
+ | |||
+ | Im Mailheader sehen wir nun, dass sich der Client mit einem Zertifikat von < | ||
+ | <code bash># Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Daemon | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtpd_tls_key_file = / | ||
+ | smtpd_tls_cert_file = / | ||
+ | smtpd_tls_CAfile = / | ||
+ | </ | ||
+ | |||
+ | Nimmt unser Mailserver nun Nachrichten über einen TLS-verschlüsselten Transportweg entgegen, frägt er den Klient nach seinem Clientzertifikat und Überprüft an Hand der Zertifikatskette, | ||
+ | |||
+ | < | ||
+ | (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) | ||
+ | (<font style=" | ||
+ | by mx01.nausch.org (Postfix) with ESMTPS id A490AC00088 | ||
+ | for < | ||
+ | |||
+ | Nachdem nun sowohl das Zertifikat und auch die Validierung des selbigen O.K. bzw. " | ||
+ | |||
+ | === SMTP-Client (Versand von eMails) === | ||
+ | Versendet unser Postfix MTA eine Nachricht an einen entfernten Mailserver, wird dieser nach dem **STARTTLS** sein Serverzertifikat präsentieren. Mit publickey des empfangenen Serverzertifikats kann unser Client die Parameter, die nur zur Verschlüsselung der nachfolgenden Nachricht(en) ausgehandelt werden, verschlüsseln. Wir benötigen also auf unserem Mailserver erst einmal kein eigenes Client-Zertifikat mit dem zugehörigen privaten Schlüssel. | ||
+ | |||
+ | Haben wir eine **[[centos: | ||
+ | |||
+ | < | ||
+ | (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) | ||
+ | <font style=" | ||
+ | by mx1.piratenpartei-bayern.de (Postfix) with ESMTPS</ | ||
+ | |||
+ | Der Zusatz < | ||
+ | |||
+ | Wir werden also unserem SMTP-Client ein passendes Serverzertifikat benennen. Im einfachsten Fall verwenden wir das gleiche Zertifikat, welches auch schon unsere SMTP-Daemon verwendet. | ||
+ | |||
+ | < | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Client | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtp_tls_key_file | ||
+ | smtp_tls_cert_file | ||
+ | smtp_tls_CAfile | ||
+ | </ | ||
+ | |||
+ | Soll der Client über ein eigenes Zertifikat verfügen, müssen wir natürlich statt der Variablen, die Pfadangaben zum Zertifikat und Schlüssel angeben. | ||
+ | Ist dieses erfolgt, wird der Empfänger in den Mailhaedern sehen können, dass sich unser Client mit seinem Certifikat < | ||
+ | |||
+ | < | ||
+ | (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) | ||
+ | (<font style=" | ||
+ | by mx1.piratenpartei-bayern.de (Postfix) with ESMTPS | ||
+ | for < | ||
+ | |||
+ | Da wir unserem SMTP-Client noch keine Root-CA-Zertifikate an die Hand gegeben haben, kann dieser auch nicht prüfen, ob dem Serverzertifikat, | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | Wir vervollständigen nun unsere postfix-Konfiguration und geben beim Parameter **smtp_tls_CAfile** an, dass er die gleiche Datei verwenden soll, die auch schon der Daemon verwendet. | ||
+ | |||
+ | < | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Client | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtp_tls_key_file | ||
+ | smtp_tls_cert_file | ||
+ | smtp_tls_CAfile | ||
+ | </ | ||
+ | |||
+ | Baut nun unser SMTP-Client eine Verbindung zu einem Zielserver auf und stuft die Verbindung an Hand des Zertifikates als vertrauenswürdig ein, wird im Maillog unseres Servers dies mit einem < | ||
+ | |||
+ | < | ||
==== Ciphers - Chiffren zur Ver- und Entschlüsselung | ==== Ciphers - Chiffren zur Ver- und Entschlüsselung | ||
=== opportunistische Verschlüsselung === | === opportunistische Verschlüsselung === | ||
Zeile 1742: | Zeile 1842: | ||
Da die Verschlüsselung optional ist, ist eine Änderung der Option nicht notwendig, es sei denn die Änderung ist notwendig und daher gut überlegt sowie unumgänglich! | Da die Verschlüsselung optional ist, ist eine Änderung der Option nicht notwendig, es sei denn die Änderung ist notwendig und daher gut überlegt sowie unumgänglich! | ||
</ | </ | ||
+ | |||
+ | Der Parameter **smtpd_tls_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Daemon (ankommende Verbindungen) bei der opportunistischen TLS-Verschlüsselung verwenden soll. | ||
<code bash># Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | <code bash># Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | ||
- | # des Postfix SMTP-Daemon | + | # des Postfix SMTP-Daemon |
# http:// | # http:// | ||
# default: smtpd_tls_ciphers = export | # default: smtpd_tls_ciphers = export | ||
</ | </ | ||
- | Der Parameter **smtp_tls_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Client bei der opportunistischen TLS-Verschlüsselung verwenden soll. | + | Der Parameter **smtp_tls_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Client |
<code bash># Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | <code bash># Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | ||
- | # des Postfix SMTP-Client | + | # des Postfix SMTP-Client |
# http:// | # http:// | ||
# default: smtp_tls_ciphers = export | # default: smtp_tls_ciphers = export | ||
Zeile 1763: | Zeile 1865: | ||
# http:// | # http:// | ||
# default: smtpd_tls_exclude_ciphers = | # default: smtpd_tls_exclude_ciphers = | ||
+ | smtpd_tls_exclude_ciphers = | ||
+ | aNULL | ||
+ | eNULL | ||
+ | | ||
+ | DES | ||
+ | 3DES | ||
+ | RC4 | ||
+ | MD5 | ||
+ | PSK | ||
+ | aECDH | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
</ | </ | ||
Zeile 1771: | Zeile 1887: | ||
# http:// | # http:// | ||
# default: smtp_tls_exclude_ciphers = | # default: smtp_tls_exclude_ciphers = | ||
+ | smtp_tls_exclude_ciphers = | ||
+ | aNULL | ||
+ | eNULL | ||
+ | | ||
+ | DES | ||
+ | 3DES | ||
+ | RC4 | ||
+ | MD5 | ||
+ | PSK | ||
+ | aECDH | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
</ | </ | ||
Zeile 1776: | Zeile 1916: | ||
Der Parameter **smtpd_tls_mandatory_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Daemon bei der verpflichtenden TLS-Verschlüsselung verwenden soll. | Der Parameter **smtpd_tls_mandatory_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Daemon bei der verpflichtenden TLS-Verschlüsselung verwenden soll. | ||
- | <code bash># Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende | + | <code bash># Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende |
- | # | + | # des Postfix SMTP-Daemon |
# http:// | # http:// | ||
# default: smtpd_tls_mandatory_ciphers = medium | # default: smtpd_tls_mandatory_ciphers = medium | ||
Zeile 1784: | Zeile 1924: | ||
Der Parameter **smtp_tls_mandatory_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Client bei der verpflichtenden TLS-Verschlüsselung verwenden soll. | Der Parameter **smtp_tls_mandatory_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Client bei der verpflichtenden TLS-Verschlüsselung verwenden soll. | ||
- | <code bash># Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende | + | <code bash># Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende |
- | # | + | # des Postfix SMTP-Clients |
# http:// | # http:// | ||
# default: smtp_tls_mandatory_ciphers = medium | # default: smtp_tls_mandatory_ciphers = medium | ||
Zeile 1830: | Zeile 1970: | ||
| | ||
| | ||
- | | + | CBC3-SHA |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
==== Protokolle | ==== Protokolle | ||
+ | === opportunistische Verschlüsselung === | ||
Mit dem Parameter **smtpd_tls_protocols** kann definiert werden, welche TLS Protokolle bei der opportunistischen Verschlüsselung des ankommenden SMTP-Verkehrs beim Postfix SMTP Daemon ein- oder ausgeschlossen werden sollen. | Mit dem Parameter **smtpd_tls_protocols** kann definiert werden, welche TLS Protokolle bei der opportunistischen Verschlüsselung des ankommenden SMTP-Verkehrs beim Postfix SMTP Daemon ein- oder ausgeschlossen werden sollen. | ||
<code bash># Django : 2014-10-19 - Positiv-/ | <code bash># Django : 2014-10-19 - Positiv-/ | ||
Zeile 1854: | Zeile 2007: | ||
lmtp_tls_protocols = $smtp_tls_protocols</ | lmtp_tls_protocols = $smtp_tls_protocols</ | ||
+ | === verpflichtende Verschlüsselung === | ||
Mit dem Parameter **smtpd_tls_mandatory_protocols** wird definiert, welche TLS Protokolle bei der verpflichtenden Verschlüsselung des ankommenden SMTP-Verkehrs beim Postfix SMTP Daemon ein- oder ausgeschlossen werden sollen. | Mit dem Parameter **smtpd_tls_mandatory_protocols** wird definiert, welche TLS Protokolle bei der verpflichtenden Verschlüsselung des ankommenden SMTP-Verkehrs beim Postfix SMTP Daemon ein- oder ausgeschlossen werden sollen. | ||
Zeile 2154: | Zeile 2308: | ||
Den erhaltenen Fingerprint // | Den erhaltenen Fingerprint // | ||
- | Keinenfalls | + | Keinesfalls |
</ | </ | ||
- | Den **__verifizierten Fingerprint__** hinterlegen wir nun in einer eigenen Konfigurationsdatei // | + | Den **__verifizierten Fingerprint__** hinterlegen wir nun in einer eigenen Konfigurationsdatei // |
Zunächst legen wir uns die benötigte Konfigurationsdatei an. | Zunächst legen wir uns die benötigte Konfigurationsdatei an. | ||
Zeile 2179: | Zeile 2333: | ||
# postmap / | # postmap / | ||
- | Damit nun der SMTP-Client | + | Damit nun der SMTP-Client |
# vim / | # vim / | ||
Zeile 2235: | 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]: | 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]: | ||
- | Da wir aber den Fingerprint in unserer Konfigurationsdatei absichtlich falsch gesetzt haben, kann die Überprüfung des Fingerprints kein positives Ergebnis bringen: | + | Wurde das Zertifikat ausgetauscht ohne dem versendenden Kommunikationspartner zu informieren, scheitert die verschlüsselte und verifizierte Verbindung, da die Überprüfung des Fingerprints kein positives Ergebnis |
- | | + | |
- | Die Nachricht wird also nicht versandt, | + | |
+ | |||
+ | Die Nachricht wird also nicht versandt, | ||
<WRAP center round tip> | <WRAP center round tip> | ||
Zeile 2243: | Zeile 2399: | ||
<WRAP center round important > | <WRAP center round important > | ||
- | Hat man viele dieser Ziele, kann das mauelle | + | Hat man viele dieser Ziele, kann das manuelle |
+ | Wesentlich einfacher ist hier die Nutzung einer verpflichtenden Verschlüsselung unter Zuhilfenahme der Option **dane-only**. | ||
</ | </ | ||
Zeile 2330: | Zeile 2487: | ||
# systemctl restart postfix.service | # systemctl restart postfix.service | ||
+ | Wir nun eine Nachricht an den Zielserver gesendet, für die wir einen **smtp_tls_security_level = // | ||
+ | < | ||
+ | Oct 13 09:53:36 vml000087 postfix/ | ||
+ | Oct 13 09:53:37 vml000087 postfix/ | ||
+ | Oct 13 09:53:37 vml000087 postfix/ | ||
+ | </ | ||
- | + | Unterscheiden sich aber beide Fingerprints wird die Kommunikation mit dem Zielsystem abgebrochen und die Nachricht in die **deffered**-Queue gestellt und ggf. später wieder versucht die eMail zuzustellen. | |
- | FIXME | + | |
- | + | ||
- | Beispiel zu einem Konfigfehler: | + | |
- | < | + | |
- | Oct 13 10:13:59 vml000087 postfix/ | + | |
- | Oct 13 10:13:59 vml000087 postfix/ | + | |
- | + | ||
- | FIXME | + | |
- | Negatives Überprüfungsergebnis des TLSA-Records (in diesem Fall war es der absichtlich zu Testzwecken gefälschte TLSA-Fingerprint des SMTP-Serverzeretifikates). | + | |
< | < | ||
Zeile 2348: | Zeile 2501: | ||
- | |||
- | |||
- | FIXME | ||
- | |||
- | < | ||
- | Oct 13 09:53:36 vml000087 postfix/ | ||
- | Oct 13 09:53:37 vml000087 postfix/ | ||
- | Oct 13 09:53:37 vml000087 postfix/ | ||
- | </ | ||
- | |||
- | FIXME | ||
==== Perfect Forward Secrecy ==== | ==== Perfect Forward Secrecy ==== | ||
Zur Aktivierung von **[[http:// | Zur Aktivierung von **[[http:// | ||
Zeile 2368: | 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 = / | + | smtpd_tls_dh1024_param_file = / |
smtpd_tls_dh512_param_file = / | smtpd_tls_dh512_param_file = / | ||
- **" | - **" | ||
Zeile 2433: | Zeile 2575: | ||
smtp_tls_loglevel = 1</ | smtp_tls_loglevel = 1</ | ||
- | ==== main.cf ==== | ||
- | Somit ergibt sich (vorerst) folgende neue Abschnitt **TLS/ | ||
- | |||
- | <code bash>################################################################################ | ||
- | ## TLS/ | ||
- | # | ||
- | # Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen | ||
- | # (Postfixbuch: | ||
- | # Pfade für die Key- und Zertifikatsdateien | ||
- | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
- | # smtpd_tls_cert_file = | ||
- | # smtpd_tls_CAfile = | ||
- | # smtp_tls_CAfile = | ||
- | smtpd_tls_key_file = / | ||
- | smtpd_tls_cert_file = / | ||
- | smtpd_tls_CAfile = / | ||
- | |||
- | smtp_tls_CAfile = / | ||
- | |||
- | |||
- | # Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | ||
- | # des Postfix SMTP-Daemon | ||
- | # http:// | ||
- | # default: smtpd_tls_ciphers = export | ||
- | |||
- | # Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | ||
- | # des Postfix SMTP-Client | ||
- | # http:// | ||
- | # default: smtp_tls_ciphers = export | ||
- | |||
- | # Django : 2014-10-25 - Liste der Chiffren oder Chiffre-Typen, | ||
- | # Sicherheitsstufen des Postfix SMTP-Daemon ausgeschlossen werden sollen. | ||
- | # http:// | ||
- | # default: smtpd_tls_exclude_ciphers = | ||
- | |||
- | # Django : 2014-10-25 - Liste der Chiffren oder Chiffre-Typen des Postfix SMTP-Client | ||
- | # bei allen TLS Sicherheitsstufen ausgeschlossen werden sollen. | ||
- | # http:// | ||
- | # default: smtp_tls_exclude_ciphers = | ||
- | |||
- | # Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende Ver- | ||
- | # schlüsselung des Postfix SMTP-Daemon | ||
- | # http:// | ||
- | # default: smtpd_tls_mandatory_ciphers = medium | ||
- | smtpd_tls_mandatory_ciphers = high | ||
- | |||
- | # Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende Ver- | ||
- | # schlüsselung des Postfix SMTP-Clients. | ||
- | # http:// | ||
- | # default: smtp_tls_mandatory_ciphers = medium | ||
- | smtp_tls_mandatory_ciphers = high | ||
- | |||
- | # Django : 2014-10-19 - Ausschlussliste der verpflichtenden TLS Verschlüsselung | ||
- | # des postfix SMTP-Daemons. | ||
- | # http:// | ||
- | # default: smtpd_tls_mandatory_exclude_ciphers = | ||
- | smtpd_tls_mandatory_exclude_ciphers = | ||
- | aNULL | ||
- | MD5 | ||
- | RC4 | ||
- | |||
- | # Django : 2014-10-19 - Ausschlussliste der verpflichtenden TLS Verschlüsselung | ||
- | # des postfix SMTP-Clients. | ||
- | # http:// | ||
- | # default: smtp_tls_mandatory_exclude_ciphers = | ||
- | smtp_tls_mandatory_exclude_ciphers = | ||
- | aNULL | ||
- | MD5 | ||
- | RC4 | ||
- | |||
- | # Django : 2014-10-19 - Positiv-/ | ||
- | # Postfix SMTP-Server bei der opportunischtischen Verschlüsselung | ||
- | # berücksichtigen soll. | ||
- | # http:// | ||
- | # default: smtpd_tls_protocols = | ||
- | smtpd_tls_protocols = | ||
- | | ||
- | | ||
- | |||
- | # Django : 2014-10-19 - Positiv-/ | ||
- | # Postfix SMTP-/ | ||
- | # berücksichtigen soll. | ||
- | # http:// | ||
- | # default: smtp_tls_protocols = !SSLv2 | ||
- | # lmtp_tls_protocols = !SSLv2 | ||
- | smtp_tls_protocols = | ||
- | | ||
- | | ||
- | lmtp_tls_protocols = $smtp_tls_protocols | ||
- | |||
- | # Django : 2014-10-19 - Positiv-/ | ||
- | # Postfix SMTP-Server bei der verpflichtenden Verschlüsselung | ||
- | # berücksichtigen soll. | ||
- | # http:// | ||
- | # default: smtpd_tls_mandatory_protocols = !SSLv2 | ||
- | smtpd_tls_mandatory_protocols = | ||
- | | ||
- | | ||
- | |||
- | # Django : 2014-10-19 - Positiv-/ | ||
- | # Postfix SMTP-/ | ||
- | # berücksichtigen soll. | ||
- | # http:// | ||
- | # default: smtp_tls_mandatory_protocols = !SSLv2 | ||
- | smtp_tls_mandatory_protocols = | ||
- | | ||
- | | ||
- | lmtp_tls_mandatory_protocols = $smtp_tls_mandatory_protocols | ||
- | |||
- | # Django : 2014-10-19 - Opportunistische TLS-Verschlüsselung für den | ||
- | # SMTP-Daemon für den ankommenden Verkehr aktiviert; d.h. STARTTLS | ||
- | # wird dem Remote-SMTP-Client angeboten aber nicht zwingend | ||
- | # vorgeschrieben. | ||
- | # http:// | ||
- | # default: smtpd_tls_security_level = | ||
- | smtpd_tls_security_level = may | ||
- | |||
- | # Django : 2014-10-19 - Opportunistische TLS-Verschlüsselung für den | ||
- | # SMTP-Client für den ausgehenden Verkehr aktiviert; | ||
- | # Opportunistische TLS-Verschlüsselung wird verwendet, sofern der | ||
- | # Zielserver eine TLS-Verschlüsselung anbietet. Unterstützt der | ||
- | # Zielserver keine TLS-Verschlüsselung wird unverschlüsselt über- | ||
- | # tragen! | ||
- | # http:// | ||
- | # default: smtp_tls_security_level = | ||
- | smtp_tls_security_level = may | ||
- | |||
- | # Django : 2014-10-19 - EDH Server support | ||
- | # http:// | ||
- | # Definition des 512 bit Schlüssels (export ciphers) für die obsoleten | ||
- | # „Export“-Ciphers und des 2048-bit (non export ciphers) Schlüssels | ||
- | # für all die anderen EDH Cipher Suits. | ||
- | # default: smtpd_tls_dh512_param_file = | ||
- | # smtpd_tls_dh1024_param_file = | ||
- | smtpd_tls_dh1024_param_file = / | ||
- | smtpd_tls_dh512_param_file = / | ||
- | |||
- | # Django : 2014-10-19 - Grad der Sicherheit beim EECDH Schlüsselaustausch | ||
- | # Ephemeral Elliptic-Curve Diffie-Hellman (EECDH) | ||
- | # http:// | ||
- | # default: smtpd_tls_eecdh_grade = strong | ||
- | smtpd_tls_eecdh_grade = ultra | ||
- | |||
- | # Django : 2014-10-19 - Default Cipher Liste des Servers verwenden, statt der | ||
- | # vom Client genannten Wunsch-Ciphers | ||
- | # http:// | ||
- | # default: tls_preempt_cipherlist = no | ||
- | tls_preempt_cipherlist = yes | ||
- | |||
- | # Django : 2014-10-19 - Headerzeile in der eMail einfügen mit Informationen | ||
- | # zur verwendeten Verschlüsselung | ||
- | # http:// | ||
- | # default: smtpd_tls_received_header = no | ||
- | smtpd_tls_received_header = yes | ||
- | |||
- | # Django : 2014-10-19 - Logging der TLS-Infomationen zu den Verbindungen im | ||
- | # Maillog des SMTP-Daemons für den ankommenden SMTP-Verkehr. | ||
- | # http:// | ||
- | # default: smtpd_tls_loglevel = 0 | ||
- | smtpd_tls_loglevel = 1 | ||
- | |||
- | # Django : 2014-10-19 - Logging der TLS-Infomationen zu den Verbindungen im | ||
- | # Maillog des SMTP-Clients für den ausgehenden SMTP-Verkehr. | ||
- | # http:// | ||
- | # default: smtp_tls_loglevel = 0 | ||
- | smtp_tls_loglevel = 1 | ||
- | </ | ||
===== Konfiguration aktivieren ===== | ===== Konfiguration aktivieren ===== | ||
Zeile 2739: | Zeile 2714: | ||
Mit nachfolgendem Aufruf kann überprüft werden, welche Ciphers angeboten werden. | Mit nachfolgendem Aufruf kann überprüft werden, welche Ciphers angeboten werden. | ||
- | # / | + | # / |
< | < | ||
Zeile 2907: | Zeile 2882: | ||
</ | </ | ||
+ | ==== 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:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
==== eMail-Verkehr ==== | ==== eMail-Verkehr ==== | ||
Zeile 2945: | Zeile 2929: | ||
* **[[http:// | * **[[http:// | ||
- | ~~DISCUSSION~~ | ||