speedtech-website/content/it/blogspot/encrypt-compress-mailserver.md
2024-10-04 11:58:15 +02:00

3.6 KiB

+++ images = ['images/blog/encrypt-compress-emails-on-server.jpg'] tagsspot = ['Security','Server','Privacy', 'Dovecot'] categoriesspot= ['Solutions'] date = '2022-07-08' lastmod = '2022-07-08' title = 'Cifrare e comprimere le email lato server' slug = 'cifrare-comprimere-email-server' +++

Per migliorare la sicurezza e la privacy degli utenti e risparmiare spazio su disco, il mail server Dovecot permette di cifrare e comprimere i files che contengono la posta elettronica.

La compressione avviene tramite il plugin zlib mentre la cifratura tramite il plugin mail_crypt.

mail_plugins = $mail_plugins zlib mail_crypt

I due plugin possono essere poi configurati con diversi opzioni

plugin {
  mail_crypt_global_private_key = </etc/dovecot/crypt/master.key
  mail_crypt_global_public_key = </etc/dovecot/crypt/master.pub
  mail_crypt_curve = prime256v1
  mail_crypt_save_version = 2
  zlib_save_level = 6
  zlib_save = lz4
}

Per la cifratura è inoltre necessario generare la coppia di chiavi : privata (master.key) per cifrare e pubblica (master.pub) per decifrare.

In questo modo nel caso vi fosse un'intrusione sul server ed i files delle email venissero trafugati, sarebbero illeggibili senza la chiave privata di decodifica.

Dal momento in cui la codifica e la compressione vengono attivate, tutti i nuovi messaggi verranno automaticamente cifrati e compressi in modo completamente trasparente per l'utente finale.

Per cifrare e comprimere la posta preesistente è sufficiente spostare i messaggi da una cartella all'altra tramite un client IMAP. In alternativa, con il seguente script bash è possibile avviare la cifratura di tutti i files di posta nella directory di esempio /var/vmail/domain/user/Maildir (la compressione non è possibile).

find /var/vmail/domain/user/Maildir -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do
if [[ $(head -c7 "$file") != "CRYPTED" ]]; then
echo $file
doveadm fs put crypt private_key_path=/etc/dovecot/crypt/master.key:public_key_path=/etc/dovecot/crypt/master.pub:posix:prefix=/ \
  "$file" "$file"
  chmod 600 "$file"
  chown vmail:vmail "$file"
fi
done

Nel caso invece fosse necessario accedere ad uno o più files di email in chiaro, si possono utilizzare i seguenti scripts :

Per decifrare solamente (nel caso in cui i files non siano stati compressi)

find /var/vmail/domain/user/Maildir -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do
if [[ $(head -c7 "$file") == "CRYPTED" ]]; then
  echo $file
  doveadm fs get crypt private_key_path=/etc/dovecot/crypt/master.key:public_key_path=/etc/dovecot/crypt/master.pub:posix:prefix=/ \
  "$file" > "/tmp/$(basename "$file")"
  if [[ -s "/tmp/$(basename "$file")" ]]; then
    chmod 600 "/tmp/$(basename "$file")"
    chown vmail:vmail "/tmp/$(basename "$file")"
    mv "/tmp/$(basename "$file")" "$file"
  else
    rm "/tmp/$(basename "$file")"
  fi
fi
done

Per decifrare e decomprimere :

find /var/vmail/domain/user/Maildir -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do
if [[ $(head -c7 "$file") == "CRYPTED" ]]; then
  echo $file
  doveadm fs get compress lz4:0:crypt:private_key_path=/etc/dovecot/crypt/master.key:public_key_path=/etc/dovecot/crypt/master.pub:posix:prefix=/ \
  "$file" > "/tmp/$(basename "$file")"
  if [[ -s "/tmp/$(basename "$file")" ]]; then
    chmod 600 "/tmp/$(basename "$file")"
    chown vmail:vmail "/tmp/$(basename "$file")"
    mv "/tmp/$(basename "$file")" "$file"
  else
    rm "/tmp/$(basename "$file")"
  fi
fi
done