Dovecot mit MySQL-SSL

  • Servus.


    Ich versuche gerade Dovecot zum Laufen zu bekommen.

    Die Datenbank mit den Benutzern liegt hierbei auf einem anderen Server im Internet, weshalb ich gerne eine verschlüsselte Verbindung zu diesem aufbauen möchte.

    Leider finde ich jedoch keinerlei Informationen, wie man bei der SQL Config von Dovecot die entsprechenden Zertifikate hinterlegen kann.


    Ich finde in der Default-Config lediglich wild eingeworfene Parameter ohne Zusammenhang:

    Code
    #   But also adds some new settings:
    #     client_flags        - See MySQL manual
    #     ssl_ca, ssl_ca_path - Set either one or both to enable SSL
    #     ssl_cert, ssl_key   - For sending client-side certificates to server
    #     ssl_cipher          - Set minimum allowed cipher security (default: HIGH)
    #     option_file         - Read options from the given file instead of
    #                           the default my.cnf location
    #     option_group        - Read options from the given group (default: client)


    Hat jemand von euch bereits Erfahrung damit gesammelt?


    Folgende Fehlermeldung erhalte ich aktuell sobald ein Benutzer versucht sich anzumelden:

    Code
    Mar 30 19:31:27 mx01 dovecot: auth-worker(28600): Error: mysql(db01.example.com): Connect failed to database (vmail): SSL connection error: Failed to set ciphers to use - waiting for 1 seconds before retry
    Mar 30 19:31:27 mx01 dovecot: auth-worker(28600): Error: mysql(db01): Connect failed to database (vmail): SSL connection error: Failed to set ciphers to use - waiting for 1 seconds before retry
    Mar 30 19:31:28 mx01 dovecot: auth-worker(28600): Error: mysql(db01): Connect failed to database (vmail): Access denied for user 'vmail'@'...' (using password: YES) - waiting for 5 seconds before retry
    Mar 30 19:31:28 mx01 dovecot: auth-worker(28600): Error: mysql(db01): Connect failed to database (vmail): Access denied for user 'vmail'@'...' (using password: YES) - waiting for 5 seconds before retry
    Mar 30 19:31:33 mx01 dovecot: auth-worker(28600): Error: mysql(db01): Connect failed to database (vmail): Access denied for user 'vmail'@'...' (using password: YES) - waiting for 25 seconds before retry


    Danke,

    Alex

  • Moin, vielleicht nicht direkt die Antwort, aber vielleicht hilfts: meine beiden Server kommunizieren auch rege miteinander: alles durch ein VPN.

    Das Schöne daran ist: ich muss mich da nicht noch um ssl für jeden Dienst kümmern und man sieht nach außen nicht gleich, was da mit wem kommuniziert.


    So läuft da bei mir u.a. Dovecot-Synchronisation udn auch mysql-sync drüber.

  • bei Latenzen zickt Dovecot ohnehin, hab ich gemerkt, darum den openvpn n bisschen optimiert, Ich hab nu keine riesige Last drauf, es läuft soweit rund. Sonst wäre noch ne Idee, den mysql als master-slave laufen zu lassen und dovecot an den lokalen slave dran zu hängen...

  • bei Latenzen zickt Dovecot ohnehin, hab ich gemerkt, darum den openvpn n bisschen optimiert, Ich hab nu keine riesige Last drauf, es läuft soweit rund. Sonst wäre noch ne Idee, den mysql als master-slave laufen zu lassen und dovecot an den lokalen slave dran zu hängen...

    Hab ich auch schon dran gedacht, würde aber den Vorteil der NVMe's zerstören.

    Rein theoretisch muss es ja funktionieren, zumal in der Default-Config von entsprechenden Parametern die Rede ist.


    lg.

  • Moin


    Die Lösung hast Du doch schon gepostet. Du musst die Parameter an die conntect= Zeile anhängen.

    Ich hab das noch nicht gemacht weil, ... s.u.


    Ich exponiere grundsätzlich nur Dienste im Internet, die ich auch nach außen anbieten will. DB gehören bei mir nicht dazu.

    Wenn ich Remote Zugriff auf eine Datenbank brauche, mache ich das per SSH-Tunnel (temporär) oder per VPN (dafür verwende ich Tinc).


    Wenn Latenz bei Dir ein Problem ist (try it with SSH-Tunnel), dann solltest Du über eine DB-Replikation nachdenken (über VPN).

    In deinem Fall aber vermutlich Master-Master und nicht Master Slave (hängt aber von deiner Konfiguration ab).

  • An sich würde ich die Dienste auch nur nach außen tragen, wenn sie das müssen. Da ich jedoch am Datenbankserver alle Zugriffe gesperrt habe und diese nur von bestimmten IPs durchlasse, die wirklich durchmüssen, sehe ich das als weniger problematisch an. Ist ja nur eine Übergangslösung bis ich irgendwie ein VLAN organisiert bekomme. :)


    Ich hab im H'tzner Forum die Lösung gefunden.



    Jetzt stehe ich vor einem ähnlichen Problem mit Postfix..

    Das Leben wird wohl nicht einfacher mit Verschlüsselung :P

  • wenns nur um die Useranmeldungen und Kontenprüfungen geht: lass das doch den dovecot machen :)

    Dann bleiben nur ggf diverse tables, die ja auch aufm mysql liegen könnten... wenn die nicht groß sind oder sich nicht ständig ändern, würd ich die in files packen.

  • Hallo A:H,


    Der Einsatz bzw. die Konfiguration der Verschlüsselung ist in der Tat bei den verschiedenen Anwendungen eine Qual, zumal sich die Einstellungen regelmäßig voneinander unterscheiden. Der "einfachste" Weg führt IMHO wie oben erwähnt (SSH-Tunnel) über spezialisierte Werkzeuge, so dass den Anwendungen selbst nicht bewusst ist, dass die Verbindung verschlüsselt wird; ich selbst verwende hierfür https://www.stunnel.org/ zwischen allen verteilten/verknüpften Applikationen.

    (Wichtiger Nebeneffekt: Die Nutzerbasis ist hier insgesamt deutlich größer als diejenige, welche applikationseigene Verschlüsselungsansätze verwendet... sehr hilfreich bei Nachfragen!)

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing

  • Ich habs nun auch bei Postfix geschafft. Schuld war der standardmäßig aktivierte Chroot für die einzelnen Dienste (zu sehen in der master.cf).

    Hab nun erstmal brachial alle chroots deaktiviert und werd mir das morgen näher ansehen.


    lg. & danke trotzdem für eure Hilfe

  • Bei mir gehts demnächst in die andere Richtung. Alle relevanten Dienste werden eingesperrt. Es sind aktuell nur noch Postfix und php übrig. Das mach ich über Ostern.

    Intern wird soweit wie möglich dennoch über Sockets kommuniziert, machbar dank mount --bind :)