Articles

Postfix – Il processo di consegna delle e-mail

In postfix on novembre 2, 2010 by poyblog

In questo articolo cercherò di spiegare come viene consegnato un messaggio da postfix, elencando tutti i programmi coinvolti e le code utilizzate. In sostanza vedremo come si comportano tutti quegli elementi espressi nell’articolo https://poyblog.wordpress.com/2010/10/31/postfix-servizi/ dal punto di vista pratico.

Divideremo questa nostra ispezione in 3 fasi, ovvero analizzeremo:

  • la gestione della ricezione di un messaggio
  • analisi  e scansione di un messaggio
  • la gestione della consegna di un messaggio

Partiamo con la fase di ricezione, innanzitutto un messaggio può essere ricevuto da un utente locale in due modi:

  • da un altro utente locale
    • sendmail: questo programma invia i messaggi degli utenti locali verso la coda Postfix
    • postdrop: questo programma viene utilizzato per sicurezza, al fine di non consentire  l’accesso alla cartella maildrop a tutti gli utenti. Una soluzione infatti è quella di generare un gruppo specifico per i messaggi maildrop e lasciare che solo il programma postdrop vi possa accedere per consegnarvi i messaggi.

  • da un utente(host) remoto, via SMTP
    • smtpd: questo programma riceve messaggi tramite il protocollo SMTP da altri host remoti. Ecco un esempio di sessione SMTP (S server C client o host remoto)
                S: 220 smtp.example.com ESMTP Postfix
	   	C: HELO relay.example.org
	  	S: 250 Hello relay.example.org, I am glad to meet you
	   	C: MAIL FROM:<bob@example.org>
		S: 250 Ok
		C: RCPT TO:<alice@example.com>
		S: 250 Ok
		C: RCPT TO:<theboss@example.com>
		S: 250 Ok
		C: DATA
		S: 354 End data with <CR><LF>.<CR><LF>	
		C: From: "Bob Example" <bob@example.org>
		C: To: "Alice Example" <alice@example.com>
		C: Cc: theboss@example.com
		C: Date: Tue, 15 Jan 2008 16:02:43 -0500
		C: Subject: Test message
		C:	
		C: Hello Alice.
		C: This is a test message with 5 header fields and 4 lines in the message body.
		C: Your friend,
		C: Bob
		C: .
		S: 250 Ok: queued as 12345
		C: QUIT
		S: 221 Bye
		{The server closes the connection}
    • pickup: tale programma monitora la coda maildrop. Quando un messaggio arriva in questa directory il programma pickup lo legge e lo invia al programma cleanup perchè lo processi.

Quando un messaggio è arrivato c’è una fase in cui questo viene “scansionato” al fine di capire se i suoi header sono in un formato standard e le informazioni ivi contenute sono consone al sistema in questione. Ecco pi programmi che concorrono in questa fase di “analisi” del messaggio:

  • cleanup: quando un messaggio viene ricevuto dal processo sendmail o smtpd, cleanup controlla che gli indirizzi espressi nell’header del messaggio siano in un formato consono e che tale e-mail possa essere gestita dal sistema. Il formato del messaggio deve essere conforme allo standard RFC 822, ecco il link per maggiori informazioni:

    Oltre alla conformità allo standard clenaup controlla che l’indirizzo di destinazione sia uno fra quelli contemplati all’interno del sistema

    Nel caso in cui un messaggio venga “scartato” da cleanup allora questo viene messo nella coda corrupted, mentre se tutto è corertto tale e-mail viene inviata alla coda incoming

  • trivial-rewrite: questo programma viene utilizzato nel caso in cui un indirizzo presente nell’header non sia in FQDN (Fully Qualified Domain Name), ecco nel dettaglio le possibili riscritture:

    Una volta che un messaggio viene riscritto, viene ritornato al programma cleanup

  • qmgr: solo quando un messaggio è stato riscritto e posizionato nella coda incoming allora il programma in questione assicura che tale messaggio venga trasferito verso la corretta destinazione, sostanzialmente sposta il messaggio dalla coda incoming verso la coda active .A questo punto qmgr passa il messaggio a uno dei seguenti programmi in base alle informazioni contenute nell’header del messaggio recapitato:
    • local
    • smtp
    • pipe

Siamo ora alla fase finale, ovvero la consegna del messaggio. Ecco i programmi che concorrono in questa ultima fase di gestione del nostro sistema:

  • local: come si può già evincere dal nome tale programma raccoglie i messaggi provenienti da qmgr e li indirizza al corretto utente locale
  • smtp: in questo caso l’utente non è locale ma remoto, a questo punto si utilizza il protocollo SMTP per l’invio del messaggio attraverso la rete
  • pipe: questo programma invia il messaggio in questione verso altri sistemi di gestione e-mail del sistema locale
  • bounce: tale programma gestisce quei messaggi che sono stati scartati (termine tecnico rejected → rigettati) per qualsiasi motivo. Il messaggio viene poi re-indirizzato al mittente con una spiegazione di cosa non è andato a buon fine. Infine il messaggio originale viene inserito nella coda deferred che verrà poi processata da qmgr, cosi come processa la coda incoming
Annunci

Una Risposta to “Postfix – Il processo di consegna delle e-mail”

  1. […] Il processo di consegna delle e-mail : analisi dettagliata di un caso reale di consegna di un messaggio attraverso Postfix e i suoi servizi […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: