Quest’oggi andremo alla scoperta di Stalwart Email Server, un progetto scritto in Rust piuttosto recente che permette di ottenere, in un colpo solo, tutta una serie di servizi, come un server che supporta i protocolli: JMAP, IMAP, POP3, SMTP; Spamfilter integrato, interfaccia web moderna, integrazione con Let’s Encrypt e possibilità di gestire l’autenticazione attraverso LDAP o SQL.
Il progetto, è compatibile anche con Windows ed è facile da installare grazie a Docker! Ovviamente, se reputi che questo progetto sia utile e vuoi sostenerlo, ti consigliamo contribuire con una donazione, la pagina del progetto GitHub è disponibile qui.
Per procedere con questo tutorial, avrai bisogno di un dominio a cui associare i tuoi indirizzi di posta elettronica e ovviamente di Docker installato (se non sai come farlo, puoi seguire questa guida). In questa guida, ci focalizzeremo più sul mondo Debian e derivate.
Inoltre, è importante avere a disposizione un IP statico pubblico per questo tipo di servizi, quindi converrebbe di più eseguire il tutto su un VPS o su un Server dedicato.
Requisiti
- VPS / Server con Debian o Ubuntu (questo per essere al 100% allineati con questa guida, ma va bene qualsiasi altra distribuzione GNU/Linux, basta che ci sia Docker installato);
- Docker installato;
- 1 vCPU, 1 GB di RAM consigliati se prendete un VPS;
- Almeno 20 GB di spazio libero, così da poter gestire al meglio le caselle di posta e avere spazio anche per altro;
- Dominio dedicato (es: miodominio.it);
Installazione di Stalwart Email Server con Docker
1. Il server di posta di Stalwart è disponibile come immagine Docker che include server JMAP, IMAP e SMTP direttamente su DockerHub. Per iniziare, eseguiamo il pull dell’immagine mail-server:latest
:
$ docker pull stalwartlabs/mail-server:latest
2. Quindi, creiamo una directory sul server in cui andremo a memorizzare i file di configurazione e i dati per il server di posta, ad esempio:
$ sudo mkdir -p /var/lib/stalwart-mail
3. Una volta completati questi due step di configurazione, avviamo il container di Stalwart Mail Server:
$ docker run -d -ti -p 443:443 -p 8080:8080 \
-p 25:25 -p 587:587 -p 465:465 \
-p 143:143 -p 993:993 -p 4190:4190 \
-p 110:110 -p 995:995 \
-v /var/lib/stalwart-mail:/opt/stalwart-mail \
--name stalwart-mail stalwartlabs/mail-server:latest
In questo modo, esporremmo sull’host tutte le porte del container docker di Stalwart Mail Server (quindi HTTPS, 8080, SMTP, IMAP, JMAP e POP3). Ovviamente possiamo non farlo e toglierne alcune in base al nostro caso d’utilizzo. Se non avete un web server in esecuzione sulla stessa macchina, potete anche procedere così tranquillamente, altrimenti incorrereste nel problema che le porte sono già in uso.
Se avete un firewall attivo, ricordatevi di esporre al pubblico le porte che deciderete di utilizzare. Per ulteriori informazioni, ti invitiamo a leggere la documentazione per ulteriori relativa alla scelta delle porte.
Accesso all’interfaccia web
4. A questo punto, recuperiamo le credenziali di accesso che verranno salvate nei log di docker, tramite il comando: docker logs stalwart-mail
:
$ docker logs stalwart-mail
✅ Configuration file written to /opt/stalwart-mail/etc/config.toml
🔑 Your administrator account is 'admin' with password 'd24tPzE41o'.
Con queste informazioni, è possibile accedere all’interfaccia web che troveremo su http://indirizzo-del-tuo-server:8080/login
.
Scelta su dove archiviare i dati
5. Una volta effettuato l’accesso, vai nella sezione Settings
> Storage
e configura come vuoi archiviare i tuoi dati, blob, full-text e lookup. Puoi trovare maggiori dettagli sulle opzioni disponibili qui.
Se si desidera utilizzare un metodo di autenticazione esterno come LDAP o SQL, vai nella sezione Settings
> Authentication
e configura il backend di autenticazione.
RocksDB
come backend predefinito per tutti i data store. Puoi saltare questo passaggio se non hai necessità particolari.Configurazione dell’hostname e del dominio
6. Procediamo assicurandoci che l’hostname del server in Settings
> Server
> Network
sia corretto e che rispecchi il puntamento che abbiamo configurato in precedenza sul nostro dominio (se ancora non lo avessi fatto, questo è un buon momento per attivare un record DNS di tipo A che faccia il puntamento all’indirizzo IP pubblico del tuo server).
Dopodiché, aggiungiamo il nostro dominio principale in Management
> Directory
> Domains
.
Dopo aver creato il dominio, l’interfaccia visualizzerà i record DNS che è necessario aggiungere alla configurazione del nostro dominio.
Ad esempio:
MX example.org. 10 mail.example.org.
TXT 202404e._domainkey.example.org. v=DKIM1; k=ed25519; h=sha256; p=MCowBQYDK2VwAyEAOT2JN9F8SLTVFNEODDu22SD9RJDC282mugCAeXkzjH0=
TXT 202404r._domainkey.example.org. v=DKIM1; k=rsa; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAykeYJjv5N0AlnJ8gKF+/8qjbStiMFWvPg+p3JPh96GPXEN6l9W/Ee6Lag6i3vLyTVH5dnRVRBhfWhc+Dc0nKreZe4f5i4L5M4RI31+RpEgu4bCmncUIk2WzJgGBW5XbiOwXjge6OKWtJQN9d8Lc1AuryL5xeged9iS6xd/+EJz4WxAf18U+j38xmAm8fJUTBnQVeb/AZup+voSKAS59jyumsb0jQtXfX5xnwTFXdiX2OF8LRrmmNs/ObHozgHftxAv+YCiSU4bqSlKNPQIrN5kk1YnZDnLlc1Gr66AWlmdUVE7PWtZPTy4f8+uHO93EW3WUxLmynZm+Syn9FTJC2uwIDAQAB
TXT mail.example.org. v=spf1 a -all ra=postmaster
TXT example.org. v=spf1 mx -all ra=postmaster
TXT _dmarc.example.org. v=DMARC1; p=reject; rua=mailto:postmaster@example.org; ruf=mailto:postmaster@example.org
Alcuni di questi record generati automaticamente possono essere facoltativi a seconda della configurazione, leggi la sezione Comprensione dei record DNS per ulteriori informazioni.
Abilitare la cifratura TLS
Stalwart Mail Server richiede un certificato TLS valido per proteggere la connessione tra il server e il client. È possibile abilitare TLS in uno dei seguenti modi:
- Se hai già un certificato TLS per il tuo server, puoi caricarlo nella sezione
Settings
>Server
>TLS
>Certificates
. - Se non si dispone di un certificato, è possibile abilitare i certificati TLS automatici da Let’s Encrypt utilizzando ACME. Per abilitare ACME, vai in
Settings
>Server
>TLS
>ACME Providers
e aggiungi Let’s Encrypt come provider ACME assicurandoti che l’hostname del tuo server esista sulla configurazione DNS del tuo dominio. Stalwart supporta le challengetls-alpn-01
,dns-01
ehttp-01
, se non sei sicuro di quale usare, leggi la documentazione dei tipi di ACME challenges. - Se si esegue Stalwart dietro un proxy inverso come Caddy, HAProxy o Traefik, è necessario saltare questo passaggio e configurare TLS nel proxy inverso.
Riavviare il container docker
Una volta completate le istruzioni di installazione, riavviamo il container:
$ docker restart stalwart-mail
Prossimi passi: creazione account
Se hai scelto di utilizzare la directory interna con RocksDB, ora puoi aggiungere gli account per gli utenti nella sezione Management
> Directory
> Accounts
. Se è stata selezionata una directory esterna, è necessario creare gli utenti nel server della directory (quindi o su LDAP o sul database SQL da cui vengono recuperati).
Se tutto è andato a buon fine, i tuoi utenti dovrebbero essere in grado di connettersi al server e inviare e ricevere e-mail. Se non riesci a connetterti al server, controlla i file di log dal pannello di amministrazione web o sotto la directory <DIR_DI_INSTALLAZIONE>/logs
cercando eventuali errori.
Se hai domande, controlla la sezione FAQ o inizia una discussione nel forum della community.
N.B: Prima di rendere il tuo server accessibile al pubblico, è consigliabile disabilitare qualsiasi servizio non utilizzato per migliorare la sicurezza o comunque sia, disabilitarlo a livello del firewall di sistema.
Dimostrazione di installazione
È tutto! Adesso dovresti avere un server di posta elettronica pienamente funzionante, moderno e semplice da gestire. Conoscevi già Stalwart? Hai dubbi o domande in merito?
Scrivili nei commenti, proveremo a darti una mano con la configurazione e la risoluzione di eventuali problemi!
Per altre guide e tutorial, puoi dare un’occhiata qui sotto o esplorando la sezione la blog del nostro sito.
4 Commenti
Roberto
Buongiorno,
premetto che non sono un professionista e che sto provando da poco a sperimentare con VPS e ho installato un server email Stalwart seguendo la vostra guida.
Sono riuscito a farlo funzionare per entrare e gestirlo come admin ma ho un po’ di dubbi sui DNS:
1) se il mio dominio è esempio.com l’ hostname da inserire all’interno di Stalwart deve essere mail.esempio.com o esempio.com, adesso ho inserito mail.esempio.com
Nei DNS su Godaddy ho inserito:
A esempio.com > indirizzo ip server VPS
CNAME mail > esempio.com
2) ho provato a configurare un client di posta imap per accedere ma non riesco a connettermi, ho inserito tutti i record SRV indicati da Stalwart
3) per poter avere una webmail si deve installare Roundcube?
Grazie
Cordiali Saluti
Dragone2
Ciao
Roberto,
Allora, come impostazione di Stalwart puoi utilizzare sia
esempio.com che mail.esempio.com, è indifferente e lo
configuri in Settings > Server > Network.
Io opterei per mail.esempio.com, tanto per tenere le cose
separate, l’importante è che ci sia un puntamento all’IP corretto
del server e sia coerente ai record DNS che hai messo in TXT e SRV.
Per il resto, sono essenziali il record MX e gli altri, poiché
servono per inviare e ricevere e-mail su Stalwart e includono anche
la prevenzione che le email inviate finiscano nello spam o vengano
proprio bloccate dai vari provider di posta elettronica.
2) Hai un firewall attivo sul VPS? Casomai fai un check con:
Per vedere se ci sono regole di Drop. Alcuni VPS hanno dei software
predefiniti installati che magari sono in ascolto e occupano le
porte, per esempio potrebbe esserci sendmail o postfix, o magari non
sei partito sul pulito e avevi installato tu Dovecot + Postfix o
altre soluzioni per gestire le e-mail. Se è così, assicurati che
non siano attive, ad esempio con "service postfix
status".
Inoltre, verifica i record SRV, che combacino con
il dominio che hai configurato su Stalwart, es: mail.esempio.com
Su questa pagina, trovi tutti i record DNS che puoi configurare:
https://stalw.art/docs/get-started/#understanding-dns-records
Ti segnalo inoltre che a volte Docker, se c’è un firewall attivo,
può avere alcuni problemi e richiede per esempio che sia abilitato
l’inoltro dei pacchetti dall’interfaccia di rete pubblica al bridge
virtuale che crea. Casomai fai un test disattivando completamente il
firewall per qualche minuto.
A seconda dei casi, alcuni provider di VPS potrebbero bloccare
determinate porte, in particolare la porta 25, però comunque le
altre dovrebbero funzionare.
Che client di posta utilizzi? Casomai prova Thunderbird se già
non lo stessi facendo e cerca di configurarlo tu manualmente,
inserendo tutti i dati corretti, giusto per verificare che sia tutto
ok.
3) Sì, puoi installare Roundcube o qualsiasi altra webmail,
Stalwart ha solo una dashboard amministrativa per gestire il server
di posta.
Spero di averti aiutato in qualche modo!
Buona serata
Roberto
Buongiorno,
scusa il ritardo ma non riuscivo a fare i test prima.
Sei stato di enorme aiuto perché ho imparato delle cose che non conoscevo.
La VPS era senza postfix e senza firewall, il mio problema credo fosse il certificato perché non lo avevo creato su mail.esempio.com ma su esempio.com.
Altra cosa era che provavo già con Thunderbird ma probabilmente impostavo male il TLS, dopo aver sistemato il certificato con Thunderbird e configurazione in automatico sta funzionando bene.
Grazie ancora per il supporto!
Con il comando iptables mi sembra di aver capito che Docker crea una rete interna alla VPS con dei suoi indirizzi IP, il prossimo step è installare
Roundcube e mi divertirò a capire dove deve puntare e come configurarlo per raggiungere la pagina web dall’esterno.
Dragone2
Buongiorno,
Ottimo, mi fa piacere, generalmente sì o son problemi con il firewall o problemi con il certificato TLS, per questo ti consigliavo Thunderbird perché se c’è qualche problema con il certificato dovrebbe mostrartelo e aiutarti anche a bypassarlo.
Sì, Docker crea una sua rete interna, in realtà crea diverse interfacce di rete, che sono poi collegate tutte a un bridge virtuale, il quale gli permette di uscire su Internet.
In teoria per Roundcube puoi sfruttare il DNS o usare localhost oppure l’IP pubblico del tuo VPS, tanto Docker si ri-aggancia alle porte dell’host principale.