Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:mail_c7:dovecot_4 [09.06.2015 16:26. ] – [SSL-Konfiguration] djangocentos:mail_c7:dovecot_4 [22.07.2019 14:48. ] (aktuell) – [Links] django
Zeile 141: Zeile 141:
 </code> </code>
  
-==== 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 1383: Zeile 1383:
    # vim /etc/dovecot/conf.d/10-ssl.conf    # vim /etc/dovecot/conf.d/10-ssl.conf
  
-<file bash /etc/dovecot/conf.d/10-ssl.conf>## +<file bash /etc/dovecot/conf.d/10-ssl.conf>##                                                                         
-## SSL settings +## SSL settings                                                            
-##+##                                                                        
  
 # SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt> # SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
 # 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're opened before # PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
-# 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/mkcert.sh can be used to easily generate self-signed +# root. Included doc/mkcert.sh can be used to easily generate self-signed      
-# certificate, just make sure to update the domains in dovecot-openssl.cnf +# certificate, just make sure to update the domains in dovecot-openssl.cnf     
-# Django : 2014-04-09 +# Django : 2015-06-09                                                          
-# old    : ssl_cert = </etc/pki/dovecot/certs/dovecot.pem +# old    : ssl_cert = </etc/pki/dovecot/certs/dovecot.pem                      
-#          ssl_key = </etc/pki/dovecot/private/dovecot.pem +#          ssl_key = </etc/pki/dovecot/private/dovecot.pem                     
-ssl_cert = </etc/pki/dovecot/certs/servercert_2014-04-09.pem +ssl_cert = </etc/pki/dovecot/certs/imap.nausch.org.cert_bundle.2015-06-09.pem 
-ssl_key = </etc/pki/dovecot/private/serverkey_2014-04-09.pem+ssl_key = </etc/pki/dovecot/private/serverkey_2015-06-09.pem                 
  
 # 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, you may want to place this setting instead to a different # world-readable, you may want to place this setting instead to a different
-# root owned 0600 file by using ssl_key_password = <path. +# root owned 0600 file by using ssl_key_password = <path.                   
-#ssl_key_password =+#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 = </etc/pki/dovecot/certs/ca.pem) # followed by the matching CRL(s). (e.g. ssl_ca = </etc/pki/dovecot/certs/ca.pem)
-#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.
-#ssl_dh_parameters_length = 1024+Django : 2015-05-21 
 +# default: ssl_dh_parameters_length = 1024 
 +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://dokuwiki.nausch.org/doku.php/centos:mail_c7:dovecot_4?&#diffie-hellman-verfahren_und_perfect_forward_secrecy
  
 # SSL protocols to use # SSL protocols to use
-#ssl_protocols = !SSLv2+# Django : 2014-10-16 
 +# default: #ssl_protocols = !SSLv2 
 +ssl_protocols = !SSLv2 !SSLv3
  
 # SSL ciphers to use # SSL ciphers to use
-#ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL+# Django : 2014-10-16 
 +# default: #ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL 
 +ssl_cipher_list = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4
  
 # Prefer the server's order of ciphers over client's. # Prefer the server's order of ciphers over client's.
-#ssl_prefer_server_ciphers = no+# Django : 2015-05-20 
 +# default: #ssl_prefer_server_ciphers = no 
 +ssl_prefer_server_ciphers = yes
  
 # SSL crypto device to use, for valid values run "openssl engine" # SSL crypto device to use, for valid values run "openssl engine"
Zeile 1450: Zeile 1466:
 Ü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 //**required**// stehen, was bedeutet, dass den Clients **SSL/TLS** als **zwingend vorgeschrieben** ist. Ein //**yes**// setzt die Transportverschlüsselung als **optional** und ein //**no**//  **deaktiviert** die Transportverschlüsselung gar ganz, aber wer will das seinen Endkunden in Zeiten vob **NSA**, **BND** und **Tempora** noch guten Gewissens verkaufen?  Ü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 //**required**// stehen, was bedeutet, dass den Clients **SSL/TLS** als **zwingend vorgeschrieben** ist. Ein //**yes**// setzt die Transportverschlüsselung als **optional** und ein //**no**//  **deaktiviert** die Transportverschlüsselung gar ganz, aber wer will das seinen Endkunden in Zeiten vob **NSA**, **BND** und **Tempora** noch guten Gewissens verkaufen? 
  
-=== Diffie-Hellmann-Verfahren und Perfect Forwrd Secrecy  === +=== Diffie-Hellman-Verfahren und Perfect Forward Secrecy  === 
-FIXME+Wie am Anfang des Artikels bereits angeschnitten, basiert Perfect Forward Secrecy (**PFS**) auf der Idee, dass Client und Server ihre Kommunikation über einen zusätzlichen temporären Schlüssel absichern, der wechselt.  
 + 
 +Dovecot stellt das normale **[[http://de.wikipedia.org/wiki/Elliptic_Curve_Diffie-Hellman|DHE]]**-Verfahren bereits ab Version 2.1.x und das wesentlich bessere und performantere **[[http://de.wikipedia.org/wiki/Elliptic_Curve_Cryptography|ECDHE]]**-Verfahren ab 2.2.x zur Verfügung. 
 + 
 +<WRAP center round important 85%> 
 +**Wichtig**:\\ \\ 
 +Die **Diffie-Hellman-Parameter** werden beim ersten Start des Dovecot-Daemon erzeugt und in der Datei **// /var/lib/dovecot/ssl-parameters.dat//** abgelegt. 
 + 
 +Entgegen den Angaben im Abschnitt **SSL security settings** im [[http://wiki2.dovecot.org/SSL/DovecotConfiguration|Dovecot WIKI]] wird die Parameterdatei __nicht__ wöchentlich erneuert! Diese Funktion wurde ab Dovecot-Version **2.2.7** nicht mehr bereitgestellt. 
 + 
 +Die Hintergründe und die Lösung zu diesem Problem, basieren auf den Hinweisen von **//[[https://andreasschulze.de/dovecot/ssl-params|Andreas Schulze]]//**, dem hier ein ausdrücklicher Dank gebührt! 
 +</WRAP> 
 + 
 +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 //**/usr/libexec/dovecot/**//. Diesem Binary müssen wir angeben, welche Parameter-Länge **ssl_dh_parameters_length** verwendet werden und wo die Parameter-Datei **state_dir** gespeichert werden soll. Hierzu legen wir uns eine Konfigurationsdatei an. 
 +   # vim /etc/dovecot/ssl-params.conf 
 + 
 +<file bash /etc/dovecot/ssl-params.conf># Django : 2015-06-09 
 +#          Länge der Diffie-Hellman-Parameter, diese muss der Länge des privaten RSA-Schlüssels entsprechen 
 +ssl_dh_parameters_length = 4096 
 +
 +#          Speicherort der Diffie-Hellman-Parameter-Datei ssl-parameters.dat 
 +state_dir = /var/lib/dovecot/tmp 
 +</file> 
 + 
 +Als nächstes erzeugen wir noch das temporäre Verzeichnis, in dem die Parameterdatei erzeugt werden kann.   
 +   # mkdir /var/lib/dovecot/tmp/ 
 + 
 +Das Erzeugen erfolgt nun mit Hilfe des folgenden Aufrufs. 
 +   # /usr/libexec/dovecot/ssl-params -c /etc/dovecot/ssl-params.conf 
 + 
 +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, wo Dovecot diese erwartet.  
 +   # /usr/bin/mv /var/lib/dovecot/tmp/ssl-parameters.dat /var/lib/dovecot/ssl-parameters.dat 
 + 
 +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 /etc/cron.weekly/dh-params 
 + 
 +<file bash /etc/cron.weekly/dh-params>#!/bin/sh 
 +# Diffie-Hellman Parameter Datei erzeugen 
 +/usr/libexec/dovecot/ssl-params -c /etc/dovecot/ssl-params.conf 
 + 
 +# Hostname und Datum holen 
 +NAME=`hostname -s` 
 +DATUM=`date +'%b %e %H:%M:%S'
 + 
 +# Parameterdatei für Dovecot bereitstellen 
 +/usr/bin/mv /var/lib/dovecot/tmp/ssl-parameters.dat /var/lib/dovecot/ssl-parameters.dat 
 + 
 +# Informationen zur neuen Parameterdatei im Maillog vermerken 
 +echo "$DATUM" "$NAME" "dovecot: ssl-params: renewed diffie-hellman parameters 4096bit" >> /var/log/maillog 
 + 
 +# Dovecot die neuen DH-Parameter bekannt geben 
 +/usr/bin/systemctl reload dovecot 
 + 
 +# Temporäres Verzeichnis leeren 
 +/usr/bin/rm /var/lib/dovecot/tmp/ssl-parameters.dat -f 
 +</file> 
 + 
 +Damit das Script nun auch ausgeführt werden kann, versehen wir es noch  mit den **x**-Ausführungsrechten. 
 +   # chmod +x /etc/cron.weekly/dh-params 
 + 
 +Das regelmäßige Erneuern der DH-Parameter erfolgt nun regelmäßig und wir im Maillog entsprechend dokumentiert. 
 + 
 +   # less /var/log/maillog 
 + 
 +  Jun  9 20:08:31 vml000077 dovecot: ssl-params(4526): renewed diffie-hellman parameters 4096bit 
 +  Jun  9 20:08:31 vml000077 dovecot: master: Warning: SIGHUP received - reloading configuration 
 + 
 ==== Logging ==== ==== Logging ====
 Ob nun **PFS**((**P**erfect **F**orward **S**ecrecy)) verwendet wird oder nicht, wollen wir natürlich in unserer Mailservere-Logdatei //**/var/log/maillog**// sehen. Denn tauchen im Dovecot Log Hinweise auf **TLS-Sessions** und die Chiffren **DHE-RSA-AES128-SHA** oder **DHE-RSA-AES256-SHA** auf, werden die entsprechenden Verbindungen mit **PFS** abgesichert. Da wir Dovecot in der Version 2.2.13 im Betrieb haben, stehen uns noch die Chiffren mit **ECDHE** zur Verfügung. Ob nun **PFS**((**P**erfect **F**orward **S**ecrecy)) verwendet wird oder nicht, wollen wir natürlich in unserer Mailservere-Logdatei //**/var/log/maillog**// sehen. Denn tauchen im Dovecot Log Hinweise auf **TLS-Sessions** und die Chiffren **DHE-RSA-AES128-SHA** oder **DHE-RSA-AES256-SHA** auf, werden die entsprechenden Verbindungen mit **PFS** abgesichert. Da wir Dovecot in der Version 2.2.13 im Betrieb haben, stehen uns noch die Chiffren mit **ECDHE** zur Verfügung.
Zeile 1636: 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 1780: Zeile 1871:
 **Wichtig:** \\ Nicht der Server definiert letztendlich, welcher **Cipher** bei der Absicherung der Übertragung verwendet wird, sondern der Mailclient! Und hier kann man durchaus sehr interessante Aha-Erlebnisse haben, wenn man mit den einschlägigen teuren Clientlösungen Verbindungen testet. m( **Wichtig:** \\ Nicht der Server definiert letztendlich, welcher **Cipher** bei der Absicherung der Übertragung verwendet wird, sondern der Mailclient! Und hier kann man durchaus sehr interessante Aha-Erlebnisse haben, wenn man mit den einschlägigen teuren Clientlösungen Verbindungen testet. m(
 </WRAP> </WRAP>
 +
 +==== cipherscan ====
 +Zum Überprüfen welche Chiffren vom Server angeboten und unterstützt werden, greifen wir auf das Tool **[[https://github.com/jvehent/cipherscan|cipherscan]]** von [[julien@linuxwall.info|Julien Vehent]] und [[hkario@redhat.com|Hubert Kario]] zurück. Das Projekt basiert auf den openssl-Bibliotheken und wird auf [[https://github.com|GitHub]] zur Verfügung gestellt.
 +
 +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:143
 +
 +<code>.....................................
 +Target: imap.nausch.org:143
 +
 +prio  ciphersuite                  protocols              pfs                 curves
 +1     ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +2     ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +3     ECDHE-RSA-AES256-SHA384      TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +4     ECDHE-RSA-AES128-SHA256      TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +5     ECDHE-RSA-AES256-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +6     ECDHE-RSA-AES128-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +7     DHE-RSA-AES256-GCM-SHA384    TLSv1.2                DH,4096bits         None
 +8     DHE-RSA-AES256-SHA256        TLSv1.2                DH,4096bits         None
 +9     DHE-RSA-AES256-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +10    DHE-RSA-CAMELLIA256-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +11    DHE-RSA-AES128-GCM-SHA256    TLSv1.2                DH,4096bits         None
 +12    DHE-RSA-AES128-SHA256        TLSv1.2                DH,4096bits         None
 +13    DHE-RSA-AES128-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +14    DHE-RSA-SEED-SHA             TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +15    DHE-RSA-CAMELLIA128-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +
 +Certificate: trusted, 4096 bit, sha512WithRSAEncryption signature
 +TLS ticket lifetime hint: 300
 +OCSP stapling: not supported
 +Cipher ordering: server
 +Curves ordering: server
 +Curves fallback: False
 +</code>
 +
 +Die Bewertung der einzelnen Chiffren müssen wir hier immer noch selbst vornehmen; hilfreiche Informationen hierzu findet man z.B. im Buch **//[[https://www.feistyduck.com/books/bulletproof-ssl-and-tls/|BULLETPROOF SSL AND TLS]]//** von **[[http://blog.ivanristic.com/|Ivan Ristić]]**.
 +
 +
  
 ====== Links ====== ====== Links ======
Zeile 1785: Zeile 1914:
   * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**   * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
   * **[[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/dovecot_4.1433867192.txt.gz
  • Zuletzt geändert: 09.06.2015 16:26.
  • (Externe Bearbeitung)