
Gestire un server di posta elettronica in autonomia è da sempre una delle sfide più ostiche del self-hosting: tra Postfix, Dovecot, filtri antispam, DKIM, SPF, DMARC e certificati TLS da tenere sincronizzati, mettere in piedi un mail server “a mano” può richiedere giorni di lavoro e una manutenzione costante.
Mailu nasce proprio per abbattere questa complessità: è una suite di posta elettronica open source che impacchetta tutti i componenti necessari server SMTP (Postfix), server IMAP/POP3 (Dovecot), filtro antispam e antivirus (Rspamd), webmail (Roundcube o Rainloop) e un pannello di amministrazione via web in un set di container Docker orchestrati con Docker Compose, pronti a essere avviati con poche righe di configurazione.
In questo articolo vedremo come installare e configurare Mailu da zero su un’istanza Ubuntu Server 26.04 pulita, partendo dall’installazione di Docker Engine fino ad arrivare a un server di posta funzionante: creazione del dominio, generazione delle chiavi DKIM, gestione dei certificati TLS (Let’s Encrypt o manuali), esposizione delle porte corrette e creazione del primo utente amministratore.L’obiettivo è arrivare, passo dopo passo, ad avere un ambiente Mailu operativo e sicuro, evitando gli errori di configurazione più comuni dal binding delle porte sbagliato ai problemi di risoluzione DNS che spesso fanno perdere ore a chi affronta questo setup per la prima volta.
Non serve essere sysadmin esperti per seguire questa guida: bastano una VM (o un server fisico) con Ubuntu Server 26.04, accesso root via SSH e un po’ di pazienza con la riga di comando.
PREREQUISITI
- Un server Ubuntu Server 26.04 LTS con un utente sudo e accesso SSH.
- Un IP pubblico dedicato (non condiviso via NAT) con la porta 25 non bloccata dal provider: molti provider cloud/VPS bloccano di default il traffico SMTP in uscita sulla porta 25 — verifica con il tuo hosting o chiedi lo sblocco prima di iniziare, altrimenti la posta in uscita non funzionerà.
- RAM: almeno 1 GB (senza antivirus) o 3 GB se abiliti ClamAV (consigliato), più 1 GB di swap.
- Root partition ext4 o btrfs; opzionale una partizione dedicata montata su /mailu per lo storage della posta.
- Un nome a dominio che gestirai per la posta (es. tuodominio.it) con accesso al pannello DNS del registrar.
- Nessun altro servizio in ascolto sulle porte riservate a Mailu: 25, 80, 110, 143, 443, 465, 587, 993, 995, 4190.
NOTA BENE: Mailu richiede una versione recente di Docker installata dal repository ufficiale (non dai pacchetti Ubuntu), perché usa funzionalità Docker aggiornate.
DNS DI BASE
Prima di avviare Mailu, configura nel pannello DNS del tuo dominio:
Record A: l’hostname del server di posta che punta all’IP pubblico:
mail.tuodominio.it. IN A a.b.c.d
Record MX: indirizza la posta del dominio verso l’hostname:
tuodominio.it. IN MX 10 mail.tuodominio.it.
PTR (reverse DNS): l’IP deve risolvere all’indietro nell’hostname del mail server. Si configura lato provider/hosting, non nel DNS del dominio:
nslookup a.b.c.d → deve restituire mail.tuodominio.it
ATTENZIONE: un reverse DNS non configurato correttamente è una delle cause più comuni per cui la posta in uscita viene classificata come spam o rifiutata. Contatta il tuo provider se non puoi impostarlo da solo.
I record SPF, DKIM e DMARC li aggiungerai allo step successivo, dopo aver avviato Mailu (le chiavi DKIM vengono generate dal pannello di amministrazione).
PREPARAZIONE DEL SISTEMA
|
0 1 2 |
sudo apt update && sudo apt full-upgrade -y sudo apt install -y ca-certificates curl gnupg ufw iptables-persistent |
NOTA BENE: se l’aggiornamento include un nuovo kernel, riavvia con sudo reboot prima di proseguire.
INSTALLAZIONE DI DOCKER ENGINE
Aggiungere la chiave GPG e il repository Docker:
|
0 1 2 3 4 5 6 7 8 9 10 11 |
sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update |
Installare Docker Engine e il plugin Compose con il comando:
|
0 |
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
Verificare e abilitare l’utente corrente:
|
0 1 2 3 4 |
sudo docker run hello-world sudo usermod -aG docker $USER newgrp docker |
ATTENZIONE: se poco dopo il rilascio di Ubuntu 26.04 il repository Docker non ha ancora una build per il suo codename, sostituire $(. /etc/os-release && echo “$VERSION_CODENAME”) con il codename della LTS precedente supportata (es. noble) nel comando sopra.
GENERARE LA CONFIGURAZIONE CON IL SETUP WIZARD
Mailu fornisce un wizard ufficiale che genera i due file necessari (docker-compose.yml e mailu.env) in base alle tue scelte.
|
0 1 2 |
sudo mkdir -p /mailu cd /mailu |
Aprire sul tuo computer https://setup.mailu.io, selezionare la versione (di norma l’ultima release stabile proposta di default) e compilare il wizard indicando almeno:
Hostname del server di posta: mail.tuodominio.it
Dominio principale: tuodominio.it
Postmaster: l’utente che riceverà la posta amministrativa (es. admin)
TLS: Let’s Encrypt (consigliato per il rinnovo automatico dei certificati)
Funzionalità: webmail (Roundcube), antivirus (ClamAV, opzionale ma consigliato), antispam (Rspamd, incluso di default)
Database: SQLite va bene per installazioni piccole/singolo server
Il wizard produce due file da scaricare: docker-compose.yml e mailu.env.
Eseguire i comandi elecanti nella pagina web per scaricarli sul server
REVISIONE DI MAILU.ENV
Apri il file con un editor (nano mailu.env) e controlla in particolare la sezione “Common configuration”: HOSTNAME, DOMAIN, POSTMASTER, TLS_FLAVOR.
Le chiavi segrete (es. SECRET_KEY) vengono generate automaticamente dal wizard: non serve modificarle a mano, ma vanno mantenute private.
Se hai scelto TLS_FLAVOR=cert invece di letsencrypt, crea manualmente una cartella certs con cert.pem e key.pem; con letsencrypt il certificato viene ottenuto e rinnovato automaticamente.
AVVIO DELLO STACK
Avviare lo stack con i seguenti comandi:
|
0 1 2 3 4 5 6 |
cd /mailu docker compose pull docker compose up -d docker compose ps |
Al primo avvio Mailu scarica tutte le immagini dei servizi (postfix, dovecot, rspamd, admin, webmail, ecc.) e inizializza i volumi: può richiedere qualche minuto.
|
0 1 2 3 4 5 6 7 8 9 |
[+] pull 73/73 ✔ Image ghcr.io/mailu/webmail:2024.06 Pulled 32.9s ✔ Image ghcr.io/mailu/postfix:2024.06 Pulled 29.4s ✔ Image ghcr.io/mailu/unbound:2024.06 Pulled 29.6s ✔ Image ghcr.io/mailu/dovecot:2024.06 Pulled 31.3s ✔ Image redis:alpine Pulled 21.7s ✔ Image ghcr.io/mailu/nginx:2024.06 Pulled 31.3s ✔ Image ghcr.io/mailu/oletools:2024.06 Pulled 29.1s ✔ Image ghcr.io/mailu/admin:2024.06 Pulled 30.2s ✔ Image ghcr.io/mailu/rspamd:2024.06 Pulled |
Seguire i log per verificare che tutto parta correttamente:
|
0 |
docker compose logs -f admin |
CREAZIONE DEL PRIMO ACCOUNT AMMINISTRATORE
Creare il primo account amministratore con il comando:
|
0 |
docker compose exec admin flask mailu admin me tuodominio.it 'PasswordRobusta123!' |
Questo comando crea l’utente [email protected] con privilegi di amministratore.
Accedere poi da un qualsiasi browser al pannello dal link https://mail.tuodominio.it/admin.
Inserire le credenziali create in precedenza quindi cliccare Entra
ATTENZIONE: è fondamentale che esista un utente con lo stesso indirizzo email impostato in POSTMASTER in mailu.env (o un alias con quel nome), altrimenti la posta amministrativa (bounce, abuse, ecc.) non avrà una casella di destinazione.
Se è andato tutto bene dovremmo visualizzare il pannelo Admin di Mailu
AGGIUNGERE I RECORD SPF, DKIM E DMARC
Dal pannello admin andare su https://mail.tuodominio.it/admin/domain/details/tuodominio.it
Cliccare su Generare Chiavi per ottenere i valori DKIM specifici del tuo dominio
Cliccare Conferma
La pagina mostra i record esatti da copiare. In generale avrai bisogno di:
SPF (record TXT sul dominio): autorizza l’IP del server a inviare posta per conto del dominio.
DKIM (record TXT su un sottodominio tipo dkim._domainkey.tuodominio.it): la chiave pubblica generata dal pannello.
DMARC (record TXT su _dmarc.tuodominio.it): policy di gestione della posta che fallisce SPF/DKIM.
Copiare i valori esatti mostrati dal pannello (cambiano da installazione a installazione) nel DNS del dominio.
NOTA BENE: se abiliti SPF/DKIM/DMARC senza aggiungere questi record nel DNS, la tua posta rischia di non essere consegnata: i due passaggi vanno sempre fatti insieme.
CONFIGURAZIONE DEL FIREWALL
Eseguire i comandi:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
sudo ufw allow OpenSSH sudo ufw allow 25/tcp # SMTP sudo ufw allow 465/tcp # SMTPS sudo ufw allow 587/tcp # Submission sudo ufw allow 143/tcp # IMAP sudo ufw allow 993/tcp # IMAPS sudo ufw allow 110/tcp # POP3 (se abilitato) sudo ufw allow 995/tcp # POP3S (se abilitato) sudo ufw allow 4190/tcp # ManageSieve (se abilitato) sudo ufw allow 80/tcp # HTTP (validazione Let's Encrypt) sudo ufw allow 443/tcp # HTTPS (webmail, admin) sudo ufw enable sudo ufw status |
MANUTENZIONE E COMANDI UTILI
Stato dei container: docker compose ps
Log di un servizio: docker compose logs -f admin (o smtp, imap, rspamd, ecc.)
Riavviare un servizio: docker compose restart admin
Aggiornare Mailu: docker compose pull && docker compose up -d
Fermare lo stack (dati conservati): docker compose down
Creare un altro utente: docker compose exec admin flask mailu user nome dominio.it ‘Password’
Backup: i dati (caselle, chiavi DKIM, configurazione) risiedono nei volumi Docker montati in /mailu; un backup periodico della cartella /mailu (con lo stack fermo, o con uno strumento che gestisca i file aperti) copre database SQLite, posta e certificati.
Risoluzione problemi: se la posta in uscita non parte, il sospetto numero uno è la porta 25 bloccata dal provider (vedi step 1). Se i client di posta non si connettono, verifica che nessun altro servizio (es. un vecchio Postfix locale) occupi le porte richieste da Mailu prima dell’avvio dello stack.
PRO E CONTRO
Ecco un elenco pro/contro di Mailu, pensato per stare bene dentro l’articolo:
Pro
- Stack completo pronto all’uso: Postfix, Dovecot, Rspamd, webmail e pannello admin arrivano già integrati e configurati per parlarsi tra loro, senza dover cablare a mano ogni componente.
- Gestione via Docker Compose: aggiornamenti, backup e rollback dei singoli servizi sono più semplici rispetto a un’installazione tradizionale su pacchetti di sistema.
- Pannello di amministrazione web intuitivo per gestire domini, utenti, alias, DKIM e regole antispam senza toccare file di configurazione per le operazioni quotidiane.
- Supporto nativo a Let’s Encrypt e a scenari con reverse proxy esterno (i vari TLS_FLAVOR), quindi si adatta sia a installazioni esposte direttamente sia dietro un proxy già esistente.
- Multi-dominio e multi-utente di serie, utile per chi gestisce la posta di più organizzazioni o clienti dalla stessa istanza.
- Progetto open source attivo, con documentazione e community su GitHub che rispondono abbastanza rapidamente ai problemi comuni.
Contro
- Overhead di risorse: una decina di container sempre attivi (come hai visto nel tuo docker compose ps) pesano di più, in RAM e gestione, di un classico Postfix+Dovecot installato via apt.
- Configurazione “a doppio binario”: alcune impostazioni vivono nel file .env/mailu.env, altre finiscono scritte direttamente nel docker-compose.yml (come il binding delle porte che abbiamo dovuto correggere) — un po’ di attenzione va messa per non perdere modifiche tra un aggiornamento e l’altro.
- La deliverability della posta in uscita resta comunque un problema “tuo”: IP reputation, PTR record, SPF/DKIM/DMARC e blacklist vanno curati indipendentemente dal software, e i grandi provider (Gmail, Outlook) sono sempre più severi con la posta da IP self-hosted.
- Nessun clustering/alta disponibilità nativo: per scalare o avere ridondanza serve mettere mano tu all’infrastruttura attorno a Mailu.
- Esporre direttamente le porte di posta (25, 587, 465, 993, 995) su internet richiede attenzione a firewall e hardening, specie su una VM di test come quella usata in questa guida.
- Il troubleshooting a basso livello (binding delle porte, permessi dei volumi, variabili d’ambiente) richiede comunque familiarità con Docker: non è un prodotto completamente “point and click” per chi non mastica la riga di comando.

0 Commenti