Quadro generale
Il server di posta che state per configurare usa diversi componenti software. Vediamo brevemente qual è lo scopo di ognuno di essi:
- Debian “Stretch” – Il sistema operativo
- Postifix riceve mail in arrivo da internet ed inoltra mail ad altri server di posta
- rspamd controlla ogni mail in arrivo per spam/malware e decide se rifiutarle o metterle nella posta indesiderata dell’utente
- Dovecot salva le mail sul vostro disco, applica filtri e permette ai vostri utenti di scaricare le loro mail tramite i protocolli POP3 e IMAP
- Roundcube è una webmail che permette agli utenti di leggere la posta usando un browser web, gestire i filtri mail e cambiare password
- MariaDB è un database che salva le informazioni sui vostri domini, alias mail e account mail
Cosa succede quando qualcuno vi manda una mail?
Assumiamo che voi siate responsabili per il dominio mail example.org e qualcuno su internet mandi una mail a john@example.org. Ecco cosa succede:
- Il server di posta remoto chiede al suo server DNS più vicino qual è il server MX (Mail eXchanger) del dominio del destinatario. Il dominio qui è exmple.org, quindi chiede qual è il record “MX” del dominio example.org. Il server DNS risponde che il nome host del server di posta responsabile della destinazione è mx15.example.org. In alternativa, nel caso in cui non ci sia alcun record MX, cercherà di usare il record A. Il server DNS può anche rispondere con record multipli con priorità differenti. Il server remoto proverà tutte le voci in ordine. Questo permette di avere load balancing e mail exchanger di riserva in contesti di una certa grandezza.
- Il server mail chiede al server DNS di trovare l’indirizzo IP del server di posta mx15.example.org. Il server DNS risponde con l’indirizzo IP.
- Il server di posta stabilisce ora una connessione TCP sulla porta 25 (che è per definizione usata per SMTP – simple mail transport protocol) con quell’indirizzo IP e si mette in contatto con il demone Postfix del vostro server di posta. Da a Postifix l’indirizzo mail del mittente e del destinatario ed il contenuto vero e proprio della mail. La comunicazione SMTP è tenuta aperta mentre il passo successivo avviene – il controllo spam/malware di rspamd. Se rspamd è sicuro che la mail è spam/malware allora il dialogo SMTP ancora aperto viene cancellato con un appropriato messaggio di errore “5.7.1 Spam message rejected”. rspamd può anche fare in modo che Postfix accetti la mail e la segni come spam. Oppure può dire a Postfix di mettere nella greylist il server mittente (inducendolo a provare di nuovo dopo un paio di minuti).
- Postfix comunica con il processo rspamd e passa la mail così come l’indirizzo IP del mittente. rspamd fa un gran numero di controlli e calcola un punteggio numerico. Un punteggio basso indica che probabilmente la mail è legittima. Un punteggio alto significa che è presumibilmente spam o addirittura contenga malware. In base alla configurazione di rspamd può dire a Postfix di accettare la mail, ritardare la mail (greylisting) oppure rifiutare la mail con un messaggio di errore.
- Se rspamd ha accetto la mail allora Postfix farà altri controlli – chiamati restrizioni. Il vostro server di posta è effettivamente responsabile del dominio del destinatario? L’indirizzo mail esiste in quel dominio? Se il destinatario non è valido allora Postfix rifiuterà la mail – sempre durante il dialogo SMTP.
- Ora Postfix ha finalmente accettato la mail e chiude la connessione SMTP con il server mittente. Inoltra quindi la mail al processo Docecot nel vostro server. Questa comunicazione usa LMTP – una versione leggera di SMTP. Postfix poi rimuove la mail dalla propria coda.
- Dovecot controlla se il destinatario ha definito qualche regola sieve. Un esempio: “se l’header contiene ‘List-Id: rspamd-user’ allora muovila nella cartella ‘mailinglists/rspamd-user’“. In aggiunta alle regole sieve dell’utente, controlla le regole sieve globali. Noi le useremo per spostare le mail che rspamd segna come spam in una cartella di posta indesiderata separata.
- Dovecot salva la mail in un file della cartella mail del destinatario. Esempio: “/var/vmail/example.com/john/Maildir/…“
Phew, questa era davvero tanta roba. Non cercate di memorizzarla tutta. Piuttosto tornate qui quando vi sentite persi tra i vari componenti software. Più avanti andrete, più tutto avrà senso.
Molte cose accadono quando i vostri utenti ricevono una mail. La prossima situazione che vorrei spiegare è…
Cosa succede quando un utente scarica la posta usando IMAP/POP3?
Questo processo è molto più semplice. Più o meno è così:
- Di solito l’utente ha un client mail (chiamato anche mail user agent) in grado di parlare POP3 o IMAP per prelevare le mail dal server di posta. Ci sono tantissimi client mail in circolazione. Io preferisco Thunderbird o Evolution su linux per esempio. Il client mail si connette alla porta POP3 (TCP 110) oppure IMAP (TCP 143), invia il comando STARTTLS per stabilire una connessione criptata e manda lo username dell’utente (che è uguale all’indirizzo mail nel nostro caso) e la password. Se possibile gli utenti dovrebbero usare IMAP che lascia sempre le mail sul server e supporta cartelle multiple. POP3 è molto limitato e scarsamente usato al giorno d’oggi.
- Dovecot fa un query al database MariaDB e verifica che l’username e password appartengano ad un utente conosciuto. La password non è salvata in chiaro nel database. Dovecot usa hash salati che possono essere utilizzati per verificare una password ma non per renderla leggibile. Questo è un metodo moderno e sicuro per salvare le password. Se la password è sbagliata Dovecot si rifiuterà di fare il login.
- Utilizzeremo uno schema semplice per salvare le mail sul disco. L’username per loggarsi è uguale all’indirizzo mail. Quindi se l’utente è jane@example.org, Dovecot cercherà i file delle mail in /var/vmail/example.org/jane/Maildir/… e manderà all’utente le mail richieste.
Sorprendentemente moti utenti (specialmente non-nerd) non amano installare e configurare un client mail. Preferiscono leggere la posta dal browser. Nessun problema. Questo è il motivo per cui forniremo una webmail.
Cosa succede se un utente legge la posta usando una webmail?
Il sotfware Roundcube, che fornisce l’interfaccia webmail, è in pratica un software PHP che fa da gateway tra pagine HTML ed un client IMAP integrato. Comunica in HTML con l’utente quindi funziona in un browser. E comunica tramite IMAP con Dovecot per prelevare le mail. Così facendo mima un client mail.
- Gli utenti puntano il browser all’URL HTTPS della webmail. Il server web Apache riceve la connessione e lancia gli scripts PHP di Roundcube. Roundcube mostra un form di login. L’utente inserisce username (= indirizzo mail) e password e invia il form di login.
- Roundcube si connette a Dovecot usando IMAP ed inoltra l’username e la password per controllare che siano validi.
- Dovecot tratta questa connessione in modo simile a quella con un client mail. Interroga il database MariaDB per verificare l’username (= indirizzo mail) e la password.
- Se l’autenticazione ha successo Dovecot prende i file delle mail dal disco fisso e li manda tramite IMAP a Roundcube. Roundcube poi traduce le mail in HTML e l’utente può leggerlo.
Si può notare che anche la webmail lavora tramite IMAP, anche se l’utente non se ne rende conto.
E l’ultimo scenario che vorrei spiegare è…
Cosa succede quando l’utente vuole mandare una mail su internet?
Sicuramente i vostri utenti vorranno spedire mail ad altri utenti su internet. Ma non possono mandare la mail direttamente al server di posta del destinatario. In primo luogo il client mail non sa quale server destinazione è responsabile per il destinatario – questa funzionalità semplicemente non è integrata. In secondo luogo all’utente di norma è assegnato un indirizzo IP dinamico che è bloccato dalla maggior parte dei server mail perché tendono ad essere abusati da PC Wind*ws infetti che spediscono spam. Quindi il modo corretto per mandare una mail su internet è attraverso il vostro server di posta. Questo è chiamato relaying perché il vostro server di posta si comporta da relay. In questo esempio il vostro utente vuole mandare una mail a fred@example.net.
- L’utente scrive una mail nel suo client e clicca su “Invia”. Il client mail stabilisce una connessione SMTP con il vostro Postfix. Per assicurarsi che all’utente sia permesso inviare mail attraverso il vostro sistema, richiede all’utente username e password insieme alla mail. Queste informazioni sono inviate in modo criptato.
- Prima di accettare la mail Postfix controlla username e password. Postfix ha i mezzi per comunicare con un database SQL ma le sue funzionalità sono sorprendentemente limitate e complicate. Per semplificare il processo chiede a Dovecot che sa già come gestire l’autenticazione.
- Dovecot manda una query al database MariaDB per controllare se l’username e la password (hash) sono corrette e comunica a Postfix il risultato.
- Postfix adesso sa che è autorizzato a spedire la mail per conto dell’utente. Dice all’utente che ha accettato la mail con successo. La mail viene messa nella coda di Postfix per ulteriori elaborazioni. Postfix chiederà ora al suo DNS (name server) più vicino per determinare chi è il server mail responsabile della destinazione. Poiché il destinatario ha un indirizzo “…@example.com”, controlla il record MX del dominio “exmaple.com” e quindi riceve il relativo indirizzo IP.
- A questo punto Postfix sa a quale server di posta inviare la mail. Apre una connessione SMTP e consegna la mail.