Mail_crypt with per-user keys / mail_crypt avec les clés par utilisateur

Hello everyone ! / Bonjour à tous !

English (translated from french with help of LibreTranslate)

My YunoHost server

Hardware: Old laptop at home
YunoHost version: 11.2.27
I acces my server : Through SSH | By webadmin | Keyboard / Screen
Particular context : no

First of all a bit of context: I’ve been doing self-hosting for a few years on a Raspberry Pi 4 with the default OS Raspberry Pi OS but I’m planning to migrate to Yunohost to be able to install and manage my services more simply, and especially to have an email server ready!

Before making the big jump I installed YunoHost on an old laptop for testing.

I would like to guarantee the privacy of my users and for this it is essential for me to encrypt the mail storage. I have seen this topic: https://forum.yunohost.org/t/encrypt-e-mail-server-side/26674 but it has not really received a reply.

I have considered three options:

  • mail_crypt: This is the plugin already integrated with dovecot which is quite practical, but I’m a little worried because the doc seems to discourage the per-user keys mode (and the global key mode does not interest me, the main threat model is me)
  • trees: fits well with my goal but is it still maintained? When I look at source code all files are 6 or 7 years old.
  • The server used by protonmail but I didn’t find it at all

So for now I consider using mail_crypt (but I can change my mind according to your good advice).

I have therefore, on my YunoHost test instance tried to configure mail_crypt by following doc (which I find not very clear, in particular because it focuses on global keys).

So I made the following changes:

/etc/dovecot.conf

mail_attribute_dict = file:%h/Maildir/dovecot-attributes
mail_plugins = $mail_plugins quota notify push_notification mail_crypt

#
# Rest of the conf
#

plugin {
  mail_crypt_curve = secp521r1
  mail_crypt_save_version = 2
  mail_crypt_require_encrypted_user_key = yes
  mail_crypt_acl_require_secure_key_sharing = yes
}

/etc/dovecot-sql.conf.ext

password_query = SELECT email as user, password, '%w' AS userdb_mail_crypt_private_password FROM virtual_users WHERE email='%u';

Then I restarted dovecot and sent myself an email to see if it would be encrypted:

SnappyMail (I installed it on YunoHost) refuses to send the email, I have this error:

Impossible d'envoyer le message
Failed to add recipient 'my address' 553 5.7.1 <my address>: Sender address rejected: not logged in

I am well connected and can read emails
By trying from Evolution the mail is well sent (and I can read it in SnappyMail but it still sends me this error :

L’erreur signalée était « L’ajout à Sent a échoué : Erreur lors de l’ajout du message: generate_keypair(Sent) failed: mail_crypt_require_encrypted_user_key set, cannot generate user keypair without password or key (0.003 + 0.000 + 0.002 secs). ```

And I can verify in /var/mail/[user]/cur that mail is stored in cleartext

Thanks for your help !

Français

Mon serveur YunoHost

Matériel: Vieil ordinateur portable à la maison
Version de YunoHost: 11.2.27
J’ai accès à mon serveur : En SSH | Par la webadmin | En direct avec un clavier/écran
Êtes-vous dans un contexte particulier ou avez-vous effectué des modifications particulières sur votre instance ? : non

D’abord un peu de contexte: je fais déjà de l’autohébergement depuis quelques années sur un Raspberry Pi 4 avec l’OS par défaut Raspberry Pi OS mais j’envisage de migrer vers Yunohost pour pouvoir installer et gérer mes services plus simplement, et notamment pour avoir un serveur email tout prêt !

Avant de faire le grand saut j’ai installé YunoHost sur un vieux PC portable pour le tester.

Je voudrais garantir la vie privée de mes utilisateurs et pour ça il est pour moi essentiel que le stockage des emails soit chiffré. J’ai vu ce sujet : https://forum.yunohost.org/t/encrypt-e-mail-server-side/26674 mais il n’a pas vraiment reçu de réponse.

J’ai envisagé trois possibilités:

  • mail_crypt : C’est le plugin déjà intégré à dovecot ce qui est assez pratique, mais je suis un peu inquiet car la doc semble décourager le mode clé par utilisateur (et le mode clé globale ne m’intéresse pas, le principal modèle de menace c’est moi)
  • trees : correspond bien à mon but mais est-il toujours maintenu ? Quand je jette un œil au code source tous les fichiers ont 6 ou 7 ans.
  • Le serveur utilisé par protonmail mais je ne l’ai pas du tout trouvé

Je me suis donc pour le moment tourné vers mail_crypt (mais je peux changer d’avis selon vos bons conseils).

J’ai donc, sur mon instance YunoHost de test essayé de configurer mail_crypt en suivant la doc (que je trouve pas très claire, notamment car elle met plus l’accent sur les clés globales).

J’ai donc fait les changements suivants:

/etc/dovecot.conf

mail_attribute_dict = file:%h/Maildir/dovecot-attributes
mail_plugins = $mail_plugins quota notify push_notification mail_crypt

#
# Reste de la conf
#

plugin {
  mail_crypt_curve = secp521r1
  mail_crypt_save_version = 2
  mail_crypt_require_encrypted_user_key = yes
  mail_crypt_acl_require_secure_key_sharing = yes
}

/etc/dovecot-sql.conf.ext

password_query = SELECT email as user, password, '%w' AS userdb_mail_crypt_private_password FROM virtual_users WHERE email='%u';

J’ai alors redémarré dovecot et me suis envoyé un mail pour voir s’il serait chiffré:

SnappyMail que j’ai installé sur YunoHost refuse d’envoyer le mail, je reçois cette erreur:

Impossible d'envoyer le message
Failed to add recipient 'mon adresse' 553 5.7.1 <mon adresse>: Sender address rejected: not logged in

Je suis pourtant bien connecté et je peux lire les emails
En essayant depuis Evolution le mail est bien envoyé (et je peux le lire dans SnappyMail mais il m’envoie tout de même cette erreur :

L’erreur signalée était « L’ajout à Sent a échoué : Erreur lors de l’ajout du message: generate_keypair(Sent) failed: mail_crypt_require_encrypted_user_key set, cannot generate user keypair without password or key (0.003 + 0.000 + 0.002 secs). ```

Et je peux aussi vérifier dans /var/mail/[user]/cur que le mail n’est pas chiffré

Merci de votre aide

:fr: Up ! J’ai ajouté une traduction en anglais de ma demande
:us:/:uk: Up ! I added an english translation of my post

Suite à une discussion sur IRC avec un développeur de dovecot j’ai abandonné l’idée.

Following a discussion on IRC with a dovecot dev, I gave up

I had the same problem in my little server with only a few users and I solved using a separate encrypted partition in system disk for the email.

Thanks but my initial goal was to prevent me from reading users emails. I’ll setup mail_crypt with global keys and encourage them to use PGP

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.