finalmente ho deciso di sostituire il mio vecchio server mail basato su exim4 e passare a postfix, il vecchio server che ha lavorato per piu' di 4 anni, era mancante di tante cose che devo veder di implementare in quello nuovo, e sopratutto ho deciso di passare da una VM che contiene un po' di tutto a tanti container specializzati su alcune cose, uno di questi container sarà il server mail
come dicono gli amici del gruppo telegram sistemisti italiani , se volete metter su un server di posta siete dei pazzi oggiggiorno il lavoro che c'e' dietro non vale la pena!!
nota bene, il mio server di posta è esposto verso il mondo esterno solo in trasmissione, non ricevo niente dall' esterno, quindi su alcune cose sorvolerò senza approfondirle
altra cosa che dovrete tenere conto è che quanto scritto è valido al 20 luglio 2020 e per debian 10.4 , se nel frattempo è passato molto tempo potreste avere delle nuove versioni dei software citati, o le procedure di configurazione potrebbero esser cambiate anche sostanzialmente. per questo vedrò ove possibile di spiegare al meglio cio' che si sta facendo, se cambiano le procedure di configurazione almeno avrete una traccia da riadattare e non un semplice copia incolla!!
cercando in rete ho trovato piu' di una guida, quella che mi ha fatto piu' simpatia e sulla quale mi sono basato è :
https://www.scaleway.com/en/docs/setup-a-mailserver-on-ubuntu-bionic-beaver-with-dovecot-postfix-rspamd/
su alcune cose si differisce , ma in buona sostanza ho ricalcato quel che loro hanno spiegato
per chi non ha mai avuto a che fare con un server mail, il server si divide in due parti:
- postfix che si occupa di ricevere la posta dai client e dal mondo esterno (i server di posta parlano tra di loro sulla porta 25)
- dovecot che si occupa di conservare la posta e consegnarla tramite i protocolli imap o pop ai client che la vogliono ricevere
per creare piu' utenti/caselle email ci sono vari modi, dal piu' semplice "una casella email per ogni utente del sistema" al piu' complesso "utenti virtuali"
il server che realizzeremo utilizzera delle connessioni criptate sia per l' invio che per la ricezione della posta
l' elenco degli utenti verra memorizzato su di un database (mariadb) invece del solito file di testo con password in chiaro o cifrateed essendo tutti utenti virtuali verranno gestiti sotto vmail
a differenza della guida originale, non installerò Roundcube non essendo interessato alla lettura via web della posta, leggero' tutto da python , il server mi serve per automatizzare un pò di lavoro.
prima di continuare voglio spiegare una cosa che non è immediata e che ho faticato a comprendere , quando andiamo a configurare un client di posta, sia in ricezione (imap/pop3) che in trasmissione (smtp) ci viene chiesto il tipo di crittografia SSL utilizzata, mentre l' opzione "nessuna" è chiara ossia stiamo inviando i dati in chiaro o quasi (sono codificati base64 quindi con una codifica simmetrica (reversibile)) , STARTTLS e SSL/TLS lo sono un po meno ...
STARTTLS in pratica chiede , per favore provi ad utilizzare una crittografia e se non ci riesci lavori in fallback su "nessuna" ?
mentre SSL/TLS chiede, o usi la crittografia o niente , non inviare mail senza crittografia!!
altra cosa, che differenza c'e' tra SSL e TLS ? SSL è un vecchio protocollo, ormai obsoleto, rimane pero' l' indicazione nel nome
altra cosa da tenere a mente è che inviare posta verso altri destinatari (sarà un uso residuale del mio server ma puo' capitare) ci espone alla verifica della nostra attendibilità , attendibilita che passa per :
DKIM, ossia il server firmerà i messaggi in uscita in modo da certificare che siano stati inviati da lui e non da un server che ci impersona, verrà aggiunto un campo header DKIM-signature con un valore per d= (dominio a cui corrisponde la firma) e s= (selettore della firma , in modo da poter avere piu' server di posta email e indicare per ognuno la chiave pubblica della firma)
SPF , sender policy framework , chiede al ricevente di verificare se l' ip del server mittente (MAIL FROM:Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. ad esempio) sia stato autorizzato dal proprietario del dominio a mandare mail per conto suo (in modo da sapere che xx.yy.zz.ww è un ip autorizzato ad esempio dal proprietario di davidea.it a fare da server di posta)
DMARC, ossia l' autenticazione del server di posta estendendo i concetti di DKIM e SPF , indica al server ricevente le mail quale dei due meccanismi di sopra utilizzare, se l' uno o l' altro o entrambi e cosa fare se fallisce la verifica
il record DMARC , viene anche lui pubblicato come campo DNS , quindi _dmarc.davidea.it ed è nel formato :
v=DMARC1;p=none;sp=quarantine;pct=100 rua=mailto: dmarcreports @ davidea.it;
dove
v è la versione
p è la policy da adottare
sp il subdomain policy
pct la percentuale di "bad" email a cui applicare la policy
rua è l' indirizzo a cui inviare un report giornaliero
REVERSE-DNS, ossia la richiesta ad un server dns di quali domini ci stanno dietro al nostro indirizzo ip deve restituire il nostro diminio di posta
Una volta finita la configurazione del server possiamo avvalerci di alcuni servizi web per misurare la nostra affidabilità
OK, ora inziamo, dopo aver creato il container, due cpu e 1GB di ram , aver aggiunto un utente normale , sudo, tcpdump , locate, mc , net-tools (un po di roba per fare debug insomma)
la prima cosa da fare è un bell aggiornamento del sistema
apt-get update && apt-get upgrade
apt install sudo tcpdump locate mc net-tools gnupg
l' articolo originale ci fa fermare il servizio sendmail e disabilitarlo, personalmente sul mio container debian 10 non era installato
service sendmail stop; update-rc.d -f sendmail remove
se ottenete come errore
Failed to stop sendmail.service: Unit sendmail.service not loaded.
vuol dire che non era installato
step successivi :
postfixadmin, let's encrypt e nginx