Mailcow è una suite software open source progettata per semplificare la gestione di un server di posta elettronica. Combina tutti i componenti chiave - Postfix, Dovecot, SOGo (webmail), antivirus e altro - e fornisce un’interfaccia web pulita per gestire utenti, domini e caselle di posta.
Inoltre, il contenuto delle mail è criptato sul server, come emerge dalla guida ufficiale, dalla quale si legge che mails are stored compressed (lz4) and encrypted. The key pair can be found in crypt-vol-1.
Prerequisiti
Sono necessari alcuni prerequisiti e precisamente:
- Un
servero una VM accessibile via SSH e con Docker installato. Un VPS puó essere acquistato, ad esempio, da Contabo - Un
indirizzo IP staticoche non sia stato inserito in una qualche blacklist - Un
nome di dominio valido, acquistabile da diversi provider, come OVH - Conoscenza di base dei
protocolli email, come SMTP, IMAP4 e POP3 - Familiarità con i
record DNS, in particolare coi record MX, SPF, DKIM e DMARC
Per la configurazione di un VPS, é consigliata la lettura dell’articolo Mettere in sicurezza un VPS.
Record DNS
La sigla DNS sta per Domain Name System, sistema dei nomi di dominio. Si tratta in sostanza della rubrica telefonica del web in cui i domini sono organizzati e identificati. Così come una rubrica telefonica traduce un nome come Pizzeria da Gigi nel numero di telefono da chiamare, il DNS traduce un indirizzo web come www.novemila.org nell’indirizzo IP assegnato al dispositivo che ospita la risorsa.
Ad un nome DNS possono corrispondere diversi tipi di informazioni. Per questo motivo, esistono diversi tipi di record, ognuno con uno scopo specifico:
Tipo A(Address Record): associa un nome di dominio a un indirizzo IPv4, un processo noto comeDNS lookupTipo AAAA(Address Record): simile al tipo A, ma associa un nome di dominio a un indirizzo IPv6Tipo MX(Mail Exchange Record): indica il server di posta autorizzato a ricevere email per un determinato dominioTipo CNAME(Canonical Name Record): associa un nome di dominio canonico a un alias. Ad esempio, blog.example.com potrebbe essere collegato a example.comTipo PTR(Pointer Record): utilizzato per lareverse DNS lookup, associa un indirizzo IP a un nome di dominioTipo TXT: associa una stringa di testo a un dominio. I record TXT sono spesso utilizzati per configurazioni relative alla posta elettronica, come SPF, DKIM e DMARC, per migliorare la sicurezza e l’autenticità delle comunicazioni email
Record MX
I record MX indicano al protocollo SMTP quale sia il server deputato a ricevere il messaggio di posta elettronica per un dominio specifico. Per individuare dove sia localizzato il destinatario della email, infatti, il protocollo interroga il sistema DNS affinché fornisca l’indirizzo esatto dove poter recapitare il messaggio. Un comando per verificare quali siano i server autorizzati per un dominio é il seguente:
Record SPF
SPF (Sender Policy Framework) è un record TXT che dichiara quali sono gli indirizzi IP autorizzati ad inviare email per un dominio.
In pratica, il record SPF consente ai destinatari di verificare la validità delle email ricevute, contribuendo a prevenire lo spoofing e l’invio di email di phishing. Lo spoofing é una tecnica di attacco informatico che consiste nella creazione di email con indirizzo del mittente contraffatto. Viene comunemente usata per email spam e phishing al fine di ingannare il destinatario circa l’origine del messaggio.
Record DKIM
Il DKIM (DomainKeys Identified Mail) è un sistema che consente di firmare digitalmente i messaggi in uscita dai server SMTP. Questa firma digitale permette ai destinatari di verificare l’autenticità del mittente e la provenienza del messaggio, contribuendo così a garantire l’integrità delle comunicazioni via email.
Il funzionamento del DKIM si basa sulla crittografia asimmetrica, che utilizza una coppia di chiavi: una privata e una pubblica. La chiave privata è mantenuta segreta dal proprietario del dominio e viene utilizzata per firmare digitalmente le email inviate. La chiave pubblica è pubblicata nel record TXT del dominio e consente ai server di posta dei destinatari di verificare la validità della firma digitale.
Record DMARC
Il DMARC (Domain-based Message Authentication, Reporting & Conformance) consente al proprietario del dominio di definire una policy che istruisce i provider di servizi di posta su come gestire le email che non superano i controlli SPF e DKIM.
Per ulteriori informazioni, visitare la pagina SPF DKIM DMARC
UFW
Per prima cosa, sul server é necessario aprire le seguenti porte:
|
|
In particolare:
25: questa è la porta standard per SMTP. È utilizzata per l’invio di email senza crittografia, il che significa che le informazioni vengono trasmesse in chiaro443: utilizzata per il traffico HTTPS465: questa porta è utilizzata per SMTPS (SMTP Secure), che implementa la crittografia tramite TLS (Transport Layer Security)587: questa porta è utilizzata per SMTP con il comando STARTTLS, che consente di avviare una connessione sicura utilizzando TLS993: utilizzata per la ricezione di email tramite IMAP, con crittografia garantita da certificati SSL/TLS4190: utilizzata per la gestione delle regole di filtraggio delle email tramite il protocollo Sieve, consentendo agli utenti di configurare filtri e azioni automatiche sulle loro caselle di posta
DNS setup
Attraverso il pannello del provider da cui abbiamo acquistato il dominio, è necessario creare i seguenti record DNS:
I record CNAME autodiscover e autoconfig consentono ai client di posta di trovare automaticamente le impostazioni del server, evitando configurazioni manuali da parte dell’utente.
SPF, DMAC e DKIM
Nello specifico, il record MX indica che il server di posta mail.novemila.org è responsabile della ricezione delle email per il dominio novemila.org, con una priorità di 10. "v=spf1 mx a -all" consente esclusivamente ai server di posta elencati nei record MX e agli indirizzi IP associati ai record A del dominio di inviare email per questo dominio. -all indica che qualsiasi altro server non specificato nei precedenti record non è autorizzato a inviare email per questo dominio. Il segno meno (-) indica un rifiuto rigoroso, quindi i messaggi provenienti da server non autorizzati devono essere scartati.
Reverse DNS
Il record PTR deve corrispondere al ${MAILCOW_HOSTNAME}, in questo caso mail.novemila.org. Questa impostazione di trova solitamente nel pannello di amministrazione del provider da cui abbiamo acquistato il VPS o il dominio.
Configurazione avanzata
Per una configurazione avanzata, fare riferimento a The advanced DNS configuration.
|
|
Installazione di Mailcow
Innanzitutto, occorre installare Docker e Docker Compose, seguendo la procedura ufficiale. Per l’installazione di Mailcow, collegarsi al VPS via SSH e seguire i seguenti passaggi:
Eseguire quindi lo script ./generate_config.sh per generare il file di configurazione. Utilizzare ${MAILCOW_HOSTNAME} come hostname quando richiesto.
Editare il file mailcow.conf per modifica la configurazione se necessario. Le uniche modifiche che abbiamo apportato sono le seguenti:
|
|
Se si utilizza un reverse proxy, come Caddy, si consiglia di associare HTTPS all’indirizzo 127.0.0.1 (localhost) su una porta a scelta, come la 3020, e HTTP a 127.0.0.1 su una porta a scelta, come la 8080. È fondamentale non utilizzare le porte 8081, 9081, 9082 o 65510, poiché queste porte sono riservate o potrebbero causare conflitti con altri servizi.
Inoltre, è possibile disabilitare tutti i container e i servizi non utilizzati e non necessari. Nel nostro caso, poiché non utilizziamo IPv6 e abbiamo scelto Caddy come reverse proxy per la gestione dei certificati, abbiamo disabilitato i container acme-mailcow, ipv6nat-mailcow e watchdog-mailcow, semplicemente commentandoli nel file docker-compose.yml.
Per disabilitare IPv6, basta seguire la procedura ufficiale.
Tutti i file di configurazione si trovano su Gitea.
Nel caso di problemi con la risoluzione dei nomi dal container Postfix, occorre usare un resolver esterno, seguendo la documentazione Using an external DNS service
Configurazione di Caddy
Aggiungere le seguenti righe nel file /etc/caddy/Caddyfile:
|
|
Inoltre, in /etc/opt/mailcow-dockerized, creare lo script deploy-certs.sh:
|
|
Poiché Caddy gestisce i certificati autonomamente, questo script include i certificati generati da Caddy in mailcow. Potrebbe essere eseguito come un cronjob ogni ora:
|
|
Si consiglia di testarne prima l’esecuzione ./deploy-certs.sh.
Se tutto é andato a buon fine, riavviare caddy col comando systemctl restart caddy.service.
Avvio dei container
Per avviare lo stack, eseguire i seguenti comandi:
Ora che il server Mailcow è attivo e funzionante, è il momento di configurarlo per gestire effettivamente le email. Prima di tutto, accedere all’interfaccia di amministrazione di Mailcow, attraverso l’url https://${MAILCOW_HOSTNAME}/admin
Verrà chiesto di accedere utilizzando le credenziali predefinite:
che sono da cambiare immediatamente.
Gli utenti che utilizzano le caselle di posta elettronica possono continuare a effettuare il login utilizzando l’URL standard, https://${MAILCOW_HOSTNAME}.
Configurazione di Mailcow
Aggiunta di un dominio
Con l’accesso amministrativo, aggiungere il proprio dominio, nel nostro caso novemila.org. Una volta aggiunto, cliccare sul pulsante Add domain and restart SOGo.
Generare le chiavi DKIM
Una volta generata la chiave, bisogna copiarla e creare il seguente record TXT dal pannello di configurazione del proprio dominio:
|
|
Creazione mailbox
Da Mail Setup > Mailboxes nella dashboard di Mailcow, sará possibile aggiungere le nuove caselle di posta.
Ovviamente, sará possibile aggiungere tutte le caselle di posta di cui si ha bisogno, sia per se stessi che per altre persone.
Creazione di alias e filtri
Una volta effettuato il login, sarà possibile creare degli alias, anche a scadenza, per la propria casella di posta. Gli alias sono indirizzi email alternativi che reindirizzano i messaggi alla casella principale. Questa funzionalità è utile per gestire meglio le comunicazioni, filtrare le email in arrivo e sopratutto per mantenere la propria privacy: utilizzando alias temporanei, è possibile evitare di condividere il proprio indirizzo email principale con terze parti.
É possibile infine creare dei filtri personalizzati dalle preferenze del proprio account:
Testing
Per verificare che tutto sia impostato correttamente, esistono diversi tool:
- Inviare una mail a
check-auth@verifier.port25.com - DKIM, SPF, SpamAssassin Email Validator
- MX Toolbox
- Mail-tester
Configurazione MUA
Il MUA (Mail User Agent) è l’applicazione utilizzata dagli utenti per inviare e ricevere email. Può essere accessibile tramite un browser web oppure tramite applicazioni installate localmente, come Thunderbird.
Per configurare Thunderbird, seguire la pagina dedicata Setup Mozilla Thunderbird. Purtroppo, la versione mobile non supporta l’autodiscover. All’indirizzo del server, bisognerá inserire ${MAILCOW_HOSTNAME}, nel nostro caso mail.novemila.org, sia per il server in entrata che per quello in uscita:
Alternativa
Una alternativa a Mailcow portrebbe essere Stalwart.