Come gestisci la tua posta elettronica?

Uno degli aspetti più importanti per la nostra comunicazione è la posta elettronica, soprattutto quando si è titolari di un nome a dominio dal quale dipendono anche gli account email.

Più specificamente si deve prestare attenzione ai profili di sicurezza e privacy, poiché sono noti i rischi di attacchi ai sistemi di posta elettronica.

Ci sono diverse soluzioni, anche gratuite, che permettono di creare una casella email e anche di gestire la posta elettronica di un dominio.

Tra queste soluzioni che reputiamo più sicure possiamo menzionare ProtonMail; una volta creato un account è possibile impostare un nome a dominio (opzione disponibile solo per i piani a pagamento).

Ci sono diverse altre soluzioni, fondamentalmente a pagamento, che consentono di gestire la posta elettronica collegata a un nome a dominio.

La nostra esperienza (abbiamo testato diverse soluzioni) ci ha spinti a orientarci per una soluzione c.d. self-hosted che prevede l’installazione di un server mail su un proprio server in modo da gestire autonomamente la posta elettronica.

In questo modo siamo certi che i messaggi email e l’intera configurazione del server e del server mail è sotto il nostro controllo e ciò ci consente di adottare le opportune misure di sicurezza anche nel rispetto della vigente disciplina in materia di protezione dei dati personali.

Precisiamo che, per coloro che non hanno molta esperienza o dimestichezza con i comandi del sistema operativo (fondamentalmente Linux) e con la gestione dei pacchetti, potrebbe non essere semplice, posto che l’intero mail server richiede l’installazione e la configurazione di alcuni servizi.

Tuttavia, abbiamo individuato Mailcow che è la soluzione gratuita self-hosted per la gestione del nostro server mail.

Mailcow: valida soluzione per un server mail anche self-hosted

Mailcow è una soluzione software dockerizzata per la gestione di un server mail che fa uso di diverse applicazioni open-source.

Mailcow è prodotto dalla società tedesca Servercow che da loro viene definito “The easy groupware solution based on modern and open software.” (La soluzione groupware1 facile basata su un software moderno e aperto).

Mailcow viene fornito in due diverse versioni:

  1. versione “managed”;
  2. versione “self-hosted”.

La soluzione managed è quella che viene gestita interamente da Servercow, mentre con la versione self-hosted l’utente dovrà provvedere all’installazione, alla configurazione e alla manutenzione.

Per la versione self-hosted è prevista la possibilità di pagare un canone trimestrale che consente di ottenere assistenza via ticket, ma gli interventi sul server sono sempre a carico di chi installa.

Per soluzioni commerciali ci si deve rivolgere a Servercow.

In ogni caso, sul sito di Servercow ci sono le indicazioni necessarie per ogni soluzione.

Perché Mailcow?

La nostra scelta di Mailcow è legata da un lato alla esperienza maturata con altre soluzioni per la gestione di server mail self-hosted, e dall’altro alla valutazione del prodotto in sé.

Infatti, Mailcow è una soluzione dockerizzata e cioè gestita tramite Docker; in sostanza, tutti i pacchetti applicativi sono contenuti in un unico “contenitore”.

Docker è la soluzione software con la quale le applicazioni vengono “impacchettate”, distribuite ed eseguite mediante contenitori.

Si tratta di soluzioni che agevolano l’utente nella fase di installazione e aggiornamento delle applicazioni, poiché invece di procedere alla installazione e alla configurazione di ogni singolo pacchetto, lo sviluppatore inserisce nel contenitore i pacchetti di applicazioni già pronti per essere installati e automaticamente configurati.

La soluzione c.d. dockerizzata dal nostro punto di vista è un vantaggio.

Altro aspetto che abbiamo considerato riguarda le singole applicazioni che sono contenute nella versione dockerizzata di Mailcow, come indicato nella pagina ufficiale. Infatti, Mailcow viene fornito con diversi container che sono collegati tra loro “in one bridged network” e precisamente:

Il contenuto delle mail è criptato sul server come emerge dalla guida ufficiale dalla quale leggiamo “Mails are stored compressed (lz4) and encrypted. The key pair can be found in crypt-vol-1.”.

Altro aspetto non trascurabile riguarda il rilascio di aggiornamenti.

Esiste anche una community molto attiva sia su Forum sia su Telegram.

In ultimo, ma non perché sia meno importante, Mailcow consente anche la configurazione di account XMPP per lo scambio di messaggi.

Pertanto, Mailcow ci sembra, al momento, la migliore soluzione.

Soluzione self-hosted: come installare Mailcow su Ubuntu server 20.04

Riteniamo utile proporre una piccola guida all’installazione di Mailcow riproponendo i passaggi che abbiamo eseguito per la sua installazione su server con Ubuntu 20.04.

Prerequisiti

Sono necessari dei prerequisiti e precisamente:

  1. avere un server o una VM accessibile via SSH;
  2. avere o impostare un FQDN (Fully Qualified Domain Name) - un nome a dominio da dedicare al server mail.

Con riferimento al nome a dominio (FQDN), sarà necessario configurare i DNS come di seguito illustrato.

Attività preliminari

Preliminarmente alla installazione è necessario configurare i record DNS relatici al nome a dominio scelto.
Ipotizzando che il nome a dominio sia domain.com per la gestione della posta elettronica dovremmo creare un FQDN come mail.domain.com oppure webmail.domain.com (il FQDN verrà richiesto durante l’installazione).
Quindi, presso il provider del nome a dominio si dovranno gestire i record DNS e precisamente (faremo riferimento unicamente a mail.domain.com):

  1. impostare il record A per mail.domain.com che punti all’indirizzo IP del server mail;
  2. impostare il record CNAME per autodiscover.domain.com che punti all’hostname mail.domain.com;
  3. impostare il record CNAME per autoconfig.domain.com che punti all’hostname mail.domain.com;
  4. impostare il record MX che punti all’hostname mail.domain.com con priorità 10
  5. aggiungere un record TXT con il valore v=spf1 ip4:indirzzoipdelserver mx ~all (es.: “v=spf1 ip4:95.105.20.88 mx ~all” [l’indirizzo IP inserito è di fantasia] consentirà al server specificato nel record MX di inviare e-mail con il dominio mail.domain.com come dominio mittente solo dall’indirizzo IP del server mail. il parametro ~all indica che gli altri server non sono autorizzati a inviare e-mail dal dominio mail.domain.com anche se le mail saranno comunque consegnate - c.d. SoftFail quando i record SPF o Sender Policy Framework falliscono; menzioniamo anche SPF hard fails e altri errori SPF.)
  6. impostare un PTR record (Pointer Record o Reverse DNS) dal pannello di controllo del provider oppure per AWS mediante l’apertura di un ticket.

Installazione dei pacchetti necessari

  1. accedere via SSH alla VM su AWS e quindi, dopo l’accesso, acquisire i privilegi di root e digitare:
sudo su
  1. quindi per aggiornare il sistema, digitare i seguenti comandi:
apt update && apt upgrade -y

oppure lanciare i due comandi su indicati separatamente con:

apt update

e poi

apt upgrade -y
  1. installare i pacchetti necessari con il seguente comando (qualora alcuni dei pacchetti fossero già installati, il sistema restituirebbe un messaggio in tal senso):
apt install curl nano git apt-transport-https ca-certificates gnupg2 software-properties-common -y

Installazione del Docker

Una volta completata l’installazione dei suddetti pacchetti di sistema, si deve installare il Docker.

installazione di Docker Engine

Quindi, supponendo che sulla VM non ci siano precedenti versioni di docker installate, riportiamo di seguito i comandi necessari come risultano sulla pagina ufficiale (https://docs.docker.com/engine/install/ubuntu/):

  1. consentire ad apt di usare il repository over HTTPS
apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. Aggiungere la chiave GPG ufficiale di Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. aggiungere il repository “stable” con il seguente comando:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Quindi si aggiorna il sistema con:
apt update
  1. Si procede con l’installazione dell’ultima versione di Docker Engine con il comando seguente:
apt install docker-ce docker-ce-cli containerd.io

installazione di Docker Compose

A questo punto va installato Docker Compose e riportiamo i comandi presenti sulla pagina ufficiale alla sezione Linux https://docs.docker.com/compose/install/:

  1. Scaricare l’ultima release di Docker Compose:
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. applicare i permessi come segue:
chmod +x /usr/local/bin/docker-compose
  1. verificare l’installazione mediante la richiesta della versione con il seguente comando:
docker-compose --version

il sistema dovrebbe rispondere con un messaggio tipo:
docker-compose version 1.29.2, build 5becea4c

Installazione di Mailcow

  1. spostarsi nella cartella opt lanciando il comando
cd /opt
  1. scaricare Mailcow con il comando:
git clone https://github.com/mailcow/mailcow-dockerized
  1. spostarsi nella cartella di Mailcow con il comando
cd /opt/mailcow-dockerized
  1. generare il file di configurazione di Mailcow con il comando
./generate_config.sh
  1. a questo punto verrà chiesto di inserire il FQDN (nome a dominio) da utilizzare che potrebbe essere mail.domain.com (sostituire questo al vero nome a dominio che si è scelto per il server di posta) e quindi premere Enter
  2. Il file che contiene la configurazione di Mailcow è stato creato ed è mailcow.conf; qualora si volesse accedere al contenuto per modificare la configurazione si dovrà lanciare il comando
nano mailcow.conf

Il suggerimento è di non cambiare le impostazioni, salvo che non si abbia una effettiva necessità e si conoscano i valori da modificare.
Qualora si acceda al file di configurazione con nano per salvare le modifiche effettuate si dovrà digitare
CTRL+X e poi digitare Y

  1. A questo punto è necessario scaricare le immagini necessarie di Mailcow con il comando
docker-compose pull
  1. Quindi avviare il container di mailcow con il comando
docker-compose up -d

Mailcow richiederà un certificato SSL di Let’s Encrypt per il nome a dominio indicato (FQDN - nel nostro esempio era mail.domain.com).

SSL e reverse proxy di Nginx

Il redirect da HTTP a HTTPS è disabilitato di default.
Pertanto è necessario configurare il reverse proxy di Nginx come segue:

  1. creare un file di configurazione di Nginx con il comando seguente
nano /opt/mailcow-dockerized/data/conf/nginx/redirect.conf
  1. aggiungere il seguente contenuto
server {
  root /web;
  listen 80 default_server;
  listen [::]:80 default_server;
  include /etc/nginx/conf.d/server_name.active;
  if ( $request_uri ~* "%0A|%0D" ) { return 403; }
  location ^~ /.well-known/acme-challenge/ {
    allow all;
    default_type "text/plain";
  }
  location / {
    return 301 https://$host$uri$is_args$args;
  }
}

Chiudere l’editor di “nano” salvando il contenuto del file con il comando CTRL+X e poi scrivere Y e confermare premendo Enter.

A questo punto bisogna riavviare Nginx con il comando

docker-compose restart nginx-mailcow

Configurazione di Mailcow via interfaccia web

Qualora l’installazione sia andata a buon fine, è necessario completare la configurazione mediante interfaccia web, puntando dal browser a

https://mail.domain.com

La pagina mostrerà la necessità di accedere come amministratore con login e password che sono impostati di default come segue:

login: admin
password: moohoo

Al primo accesso, ovviamente va cambiata la password cliccando sul pulsante edit che si trova in alto a destra sulla stessa riga in cui è indicato lo username (admin). Sarebbe consigliabile cambiare anche lo username con altro a scelta dell’utente.

Dalla pagina di amministrazione è possibile effettuare la configurazione del server mail scegliendo le impostazioni che si desiderano.

Per avere un’idea di ciò che si vedrà, è possibile accedere ad una demo online puntando a questa pagina https://demo.mailcow.email e utilizzando le stesse credenziali di accesso indicate sopra.

Configurazione qualora il mail server sia su AWS

Qualora l’installazione di Mailcow sia stata eseguita su una VM di AWS, si dovrà chiedere al supporto via ticket l’apertura della porta 25 (chiusa di default) relativa all’istanza.

Poi si dovrà configurare il security group aprendo le porte che sono necessarie per la posta elettronica e precisamente:

  • 993
  • 143
  • 110
  • 995
  • 25 (chiedere l’apertura via ticket)
  • 587
  • 465

Se si decidesse di attivare account XMPP, sarà necessario aprire anche le porte:

  • 5269
  • 4190
  • 5443
  • 5222

Ovviamente, per la webmail dovranno essere aperte le porte:

  • 80
  • 443

Infine si dovrà chiedere mediante apertura di un ticket per l’impostazione di un PTR record (Pointer Record o Reverse DNS) che consenta di raggiungere l’indirizzo https://mail.domain.,com

Guida di Mailcow

Mailcow fornisce una guida online, presente qui https://mailcow.github.io/mailcow-dockerized-docs/ dove è possibile avere tutte le indicazioni come ad esempio quelle per la configurazione dei client email.

Conclusioni e privacy

Come consuetudine, concludiamo con i feedback della nostra esperienza “sul campo” e possiamo dire, senza ombra di dubbio e sperando di non essere smentiti, che Mailcow rappresenta una valida soluzione per la gestione di un server mail con particolare attenzione ai profili di sicurezza e privacy.

Sulla sicurezza, a nostro avviso, conta anche l’infrastruttura dov’è ubicata il server o la VM che intendiamo utilizzare. L’impostazione di ogni misura di sicurezza dal firewall all’apertura delle porte necessarie resta attività in capo al sys admin che dovrà farsi carico di valutare tutto ciò.

Sono importanti, inoltre, l’impostazione di password forti per ciascun account email che viene creato, l’impostazione della autenticazione a due fattori per l’accesso alla pagina di configurazione, e l’adozione di ogni altro criterio di sicurezza.

Si è detto che le mail sono criptate sul server e ciò costituisce ulteriore garanzia.

Riguardo alla privacy, Mailcow ci sembra una valida soluzione che, nel considerare le necessarie misure di sicurezza, è orientata al pieno rispetto della disciplina su protezione dei dati personali.

Stay tuned!


  1. con il termine “groupware” si fa riferimento al software collaborativo. ↩︎