Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c7:dovecot_4 [25.07.2014 20:44. ] – [Dovecot Verbindungstest] django | centos:mail_c7:dovecot_4 [22.07.2019 14:48. ] (aktuell) – [Links] django | ||
---|---|---|---|
Zeile 141: | Zeile 141: | ||
</ | </ | ||
- | ==== Cipher-Suites und Diffie-Hellmann | + | ==== Cipher-Suites und Diffie-Hellman |
Möchte man in Erfahrung bringen, welche Cipher-Suites((Sammlung von standardisierten kryptographischer Algorithmen)) unser installiertes OpenSSL-Paket mitbringt, können wir wie folgt abfragen((Ausgabe in formatierter Tabelle)). | Möchte man in Erfahrung bringen, welche Cipher-Suites((Sammlung von standardisierten kryptographischer Algorithmen)) unser installiertes OpenSSL-Paket mitbringt, können wir wie folgt abfragen((Ausgabe in formatierter Tabelle)). | ||
# openssl ciphers -v | # openssl ciphers -v | ||
Zeile 682: | Zeile 682: | ||
< | < | ||
- | <font style=" | + | <font style=" |
</ | </ | ||
< | < | ||
Zeile 1072: | Zeile 1072: | ||
Wie schon erwähnt, entfernen wir die Passphrase nun wieder, in dem wir bei der Frage **Enter pass phrase:** einfach die Taste **[ENTER]** drücken. | Wie schon erwähnt, entfernen wir die Passphrase nun wieder, in dem wir bei der Frage **Enter pass phrase:** einfach die Taste **[ENTER]** drücken. | ||
< | < | ||
- | <font style=" | + | <font style=" |
</ | </ | ||
< | < | ||
Zeile 1383: | Zeile 1383: | ||
# vim / | # vim / | ||
- | <file bash / | + | <file bash / |
- | ## SSL settings | + | ## SSL settings |
- | ## | + | ## |
# SSL/TLS support: yes, no, required. < | # SSL/TLS support: yes, no, required. < | ||
# disable plain pop3 and imap, allowed are only pop3+TLS, pop3s, imap+TLS and imaps | # disable plain pop3 and imap, allowed are only pop3+TLS, pop3s, imap+TLS and imaps | ||
- | # plain imap and pop3 are still allowed for local connections | + | # plain imap and pop3 are still allowed for local connections |
- | ssl = required | + | ssl = required |
# PEM encoded X.509 SSL/TLS certificate and private key. They' | # PEM encoded X.509 SSL/TLS certificate and private key. They' | ||
- | # dropping root privileges, so keep the key file unreadable by anyone but | + | # dropping root privileges, so keep the key file unreadable by anyone but |
- | # root. Included doc/ | + | # root. Included doc/ |
- | # certificate, | + | # certificate, |
- | # Django : 2014-04-09 | + | # Django : 2015-06-09 |
- | # old : ssl_cert = </ | + | # old : ssl_cert = </ |
- | # ssl_key = </ | + | # ssl_key = </ |
- | ssl_cert = </ | + | ssl_cert = </ |
- | ssl_key = </ | + | ssl_key = </ |
# If key file is password protected, give the password here. Alternatively | # If key file is password protected, give the password here. Alternatively | ||
# give it when starting dovecot with -p parameter. Since this file is often | # give it when starting dovecot with -p parameter. Since this file is often | ||
# world-readable, | # world-readable, | ||
- | # root owned 0600 file by using ssl_key_password = <path. | + | # root owned 0600 file by using ssl_key_password = < |
- | # | + | # |
# PEM encoded trusted certificate authority. Set this only if you intend to use | # PEM encoded trusted certificate authority. Set this only if you intend to use | ||
# ssl_verify_client_cert=yes. The file should contain the CA certificate(s) | # ssl_verify_client_cert=yes. The file should contain the CA certificate(s) | ||
# followed by the matching CRL(s). (e.g. ssl_ca = </ | # followed by the matching CRL(s). (e.g. ssl_ca = </ | ||
- | #ssl_ca = | + | #ssl_ca = |
# Require that CRL check succeeds for client certificates. | # Require that CRL check succeeds for client certificates. | ||
Zeile 1433: | Zeile 1433: | ||
# DH parameters length to use. | # DH parameters length to use. | ||
- | # | + | # Django : 2015-05-21 |
+ | # default: | ||
+ | ssl_dh_parameters_length=4096 | ||
+ | |||
+ | # Weekly regeneration of the ssl-parameters | ||
+ | # Django : 2015-06-10 | ||
+ | # default: ssl_parameters_regenerate = 0 | ||
+ | # ssl_parameters_regenerate = 2 hours | ||
+ | # Won't work since dovecot 2.2! | ||
+ | # Update ssl_dh_parameters_length with script dh-params | ||
+ | # https:// | ||
# SSL protocols to use | # SSL protocols to use | ||
- | # | + | # Django : 2014-10-16 |
+ | # default: | ||
+ | ssl_protocols = !SSLv2 !SSLv3 | ||
# SSL ciphers to use | # SSL ciphers to use | ||
- | # | + | # Django : 2014-10-16 |
+ | # default: | ||
+ | ssl_cipher_list = EECDH+ECDSA+AESGCM: | ||
# Prefer the server' | # Prefer the server' | ||
- | # | + | # Django : 2015-05-20 |
+ | # default: | ||
+ | ssl_prefer_server_ciphers = yes | ||
# SSL crypto device to use, for valid values run " | # SSL crypto device to use, for valid values run " | ||
Zeile 1448: | Zeile 1464: | ||
</ | </ | ||
+ | Über den Paramter **ssl** kann man steuern, ob **SSL/TLS** nun verwendet werden kann, oder ob es verwendet werden muss, oder eben nicht. Wir lassen den Default-Wert // | ||
+ | |||
+ | === Diffie-Hellman-Verfahren und Perfect Forward Secrecy | ||
+ | Wie am Anfang des Artikels bereits angeschnitten, | ||
+ | |||
+ | Dovecot stellt das normale **[[http:// | ||
+ | |||
+ | <WRAP center round important 85%> | ||
+ | **Wichtig**: | ||
+ | Die **Diffie-Hellman-Parameter** werden beim ersten Start des Dovecot-Daemon erzeugt und in der Datei **// / | ||
+ | |||
+ | Entgegen den Angaben im Abschnitt **SSL security settings** im [[http:// | ||
+ | |||
+ | Die Hintergründe und die Lösung zu diesem Problem, basieren auf den Hinweisen von **// | ||
+ | </ | ||
+ | |||
+ | Wir werden also das Wechseln der **Diffie-Hellman-Parameter** werden wir also selbst in die Hand nehmen. Dies erfolgt in zwei Schritten. | ||
+ | - **Parameterdatei erstellen** und | ||
+ | - **Dovecot die neuen Parameter bekanntgeben** | ||
+ | |||
+ | Die Erzeugung der **DH-Parameter-Datei** erfolgt mit Hilfe des Programms **ssl-params** aus dem Verzeichnis // | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # Länge der Diffie-Hellman-Parameter, | ||
+ | ssl_dh_parameters_length = 4096 | ||
+ | # | ||
+ | # Speicherort der Diffie-Hellman-Parameter-Datei ssl-parameters.dat | ||
+ | state_dir = / | ||
+ | </ | ||
+ | |||
+ | Als nächstes erzeugen wir noch das temporäre Verzeichnis, | ||
+ | # mkdir / | ||
+ | |||
+ | Das Erzeugen erfolgt nun mit Hilfe des folgenden Aufrufs. | ||
+ | # / | ||
+ | |||
+ | Dovecot können wir nun leider nicht anweisen, direkt diese Parameterdatei zu laden. Wir werden daher unsere neu generierte Datei an Ort und Stelle verschieben, | ||
+ | # /usr/bin/mv / | ||
+ | |||
+ | Anschließend führen wir einen Reload des Dovecot-Daemon durch, damit dieser diese DH-Parameter neu einliest. | ||
+ | # systemctl reload dovecot | ||
+ | |||
+ | Da wir in regelmäßigen Abständen die Diffie-Hellman Parameter neu generieren wollen, verpacken wir die gerade gezeigten Schritte in ein Script verlagern. | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # Diffie-Hellman Parameter Datei erzeugen | ||
+ | / | ||
+ | |||
+ | # Hostname und Datum holen | ||
+ | NAME=`hostname -s` | ||
+ | DATUM=`date +'%b %e %H: | ||
+ | |||
+ | # Parameterdatei für Dovecot bereitstellen | ||
+ | /usr/bin/mv / | ||
+ | |||
+ | # Informationen zur neuen Parameterdatei im Maillog vermerken | ||
+ | echo " | ||
+ | |||
+ | # Dovecot die neuen DH-Parameter bekannt geben | ||
+ | / | ||
+ | |||
+ | # Temporäres Verzeichnis leeren | ||
+ | /usr/bin/rm / | ||
+ | </ | ||
+ | |||
+ | Damit das Script nun auch ausgeführt werden kann, versehen wir es noch mit den **x**-Ausführungsrechten. | ||
+ | # chmod +x / | ||
+ | |||
+ | Das regelmäßige Erneuern der DH-Parameter erfolgt nun regelmäßig und wir im Maillog entsprechend dokumentiert. | ||
+ | |||
+ | # less / | ||
+ | |||
+ | Jun 9 20:08:31 vml000077 dovecot: ssl-params(4526): | ||
+ | Jun 9 20:08:31 vml000077 dovecot: master: Warning: SIGHUP received - reloading configuration | ||
Zeile 1634: | Zeile 1726: | ||
===== Dovecot Verbindungstest ===== | ===== Dovecot Verbindungstest ===== | ||
+ | ==== openssl ==== | ||
Zum Testen der kompletten Konfigurationsänderungen greifen wir auf die Bibliothek **openssl** zurück. Im nachfolgendem Beispiel bauen wir eine Verbindung von einem entferneten Linux-Host im eigenen Netz auf. Somit haben wir auch gleich noch den Test, ob es ggf. nicht eine Firewall gibt, die unseren Verbindungsaufbauwunsch unter Umständen blockiert. | Zum Testen der kompletten Konfigurationsänderungen greifen wir auf die Bibliothek **openssl** zurück. Im nachfolgendem Beispiel bauen wir eine Verbindung von einem entferneten Linux-Host im eigenen Netz auf. Somit haben wir auch gleich noch den Test, ob es ggf. nicht eine Firewall gibt, die unseren Verbindungsaufbauwunsch unter Umständen blockiert. | ||
Zeile 1772: | Zeile 1865: | ||
Finden wir in der Ausgabe eine der nachfolgenden Angaben, ist alles bestens, der IMAP-Server unterstützt **//Perfect Forward Secrecy//** | Finden wir in der Ausgabe eine der nachfolgenden Angaben, ist alles bestens, der IMAP-Server unterstützt **//Perfect Forward Secrecy//** | ||
- | * **Protocol** : \\ TLSv1.2 \\ TLSv1/SSLv3 | + | * **Protocol** : \\ TLSv1.2 \\ < |
* **Cipher** : \\ ECDHE-RSA-AES256-GCM-SHA384 \\ DHE-RSA-AES256-GCM-SHA384 | * **Cipher** : \\ ECDHE-RSA-AES256-GCM-SHA384 \\ DHE-RSA-AES256-GCM-SHA384 | ||
Zeile 1778: | Zeile 1871: | ||
**Wichtig: | **Wichtig: | ||
</ | </ | ||
+ | |||
+ | ==== cipherscan ==== | ||
+ | Zum Überprüfen welche Chiffren vom Server angeboten und unterstützt werden, greifen wir auf das Tool **[[https:// | ||
+ | |||
+ | Mit nachfolgendem Aufruf kann überprüft werden, welche Ciphers angeboten werden. | ||
+ | # / | ||
+ | |||
+ | < | ||
+ | Target: imap.nausch.org: | ||
+ | |||
+ | prio ciphersuite | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 | ||
+ | 4 | ||
+ | 5 | ||
+ | 6 | ||
+ | 7 | ||
+ | 8 | ||
+ | 9 | ||
+ | 10 DHE-RSA-CAMELLIA256-SHA | ||
+ | 11 DHE-RSA-AES128-GCM-SHA256 | ||
+ | 12 DHE-RSA-AES128-SHA256 | ||
+ | 13 DHE-RSA-AES128-SHA | ||
+ | 14 DHE-RSA-SEED-SHA | ||
+ | 15 DHE-RSA-CAMELLIA128-SHA | ||
+ | |||
+ | Certificate: | ||
+ | TLS ticket lifetime hint: 300 | ||
+ | OCSP stapling: not supported | ||
+ | Cipher ordering: server | ||
+ | Curves ordering: server | ||
+ | Curves fallback: False | ||
+ | </ | ||
+ | |||
+ | Die Bewertung der einzelnen Chiffren müssen wir hier immer noch selbst vornehmen; hilfreiche Informationen hierzu findet man z.B. im Buch **// | ||
+ | |||
+ | |||
====== Links ====== | ====== Links ====== | ||
Zeile 1783: | Zeile 1914: | ||
* **[[wiki: | * **[[wiki: | ||
* **[[http:// | * **[[http:// | ||
- | |||
- | ~~DISCUSSION~~ | ||
- | |||