Reading Time: 4 minutes

Posta Elettronica: SMTP

Un’applicazione Internet che ha ottenuto notevole diffusione, contribuendo ad avvicinare milioni di utenti alla rete, è il servizio di posta elettronica.

La posta elettronica permette a due o più utenti di scambiarsi messaggi personali attraverso un meccanismo di consegna dati store-and-forward (ricevi e trasmetti).

La trasmissione dei messaggi è basata sul protocollo SMTP (Simple Mail Transfer Protocol), mentre per la fruizione dei messaggi da parte degli utenti finali sono oggi disponibili numerose alternative (POP3, IMAP, HTTP).

Anche se esistono soluzioni proprietarie, molto utilizzate in ambio Corporate, di solito l’inoltro dei messaggi di posta elettronica su Internet pubblica avviene tramite SMTP.

Le regole fondamentali del protocollo SMTP sono state definite con la RFC 821 emessa nel 1982, e resistono ancor oggi senza sostanziali modifiche.

Le entità coinvolte in un servizio di posta elettronica, basato su SMTP, coincidono formalmente con quelle descritte dalla raccomandazione X.400, proposta dal CCITT, per la realizzazione di un servizio di scambio di messaggi interpersonali (MHS, Message Handling System).

Le entità si distinguono in:

  • Mail User Agent (MUA);
  • Message Transfer Agent (MTA).

Con il termine MUA si intende quella parte del software che fornisce l’interfaccia utente per inviare e ricevere messaggi di posta elettronica.

L’utente che vuole inviare un messaggio di posta invoca il proprio Agent locale, completa le parti del messaggio, dopo di che affida al programma il compito di consegnare a un MTA il messaggio appena creato.

La componente software incaricata della spedizione viene indicata generalmente come client SMTP.

Il client è responsabile della trasmissione del messaggio di posta elettronica, attraverso l’instaurazione di una sessione SMTP con un server SMTP (o MTA).

Per semplificare il compito del client normalmente la consegna viene effettuata a un server impostato come default, indipendentemente dall’indirizzo di posta elettronica specificato come destinazione.

Il client SMTP si attiva ogni volta che riscontra uno o più messaggi da spedire in coda di uscita.

Per molti anni gli utenti provvisti di un collegamento commutato hanno preferito impostare il proprio software per l’inoltro delle mail in maniera semiautomatica, ovvero attivato dalla rilevazione della disponibilità del collegamento ma senza consentire al messaggio in uscita di negoziare una nuova connessione qualora questa fosse momentaneamente assente.

Oggi la larga diffusione di collegamenti always-on ha portato all’adozione generale di client che spediscono i messaggi non appena questi sono pronti per la consegna, senza avvisare l’utente dello stato di avanzamento dell’inoltro.

Il processo di consegna può richiedere l’uso di funzioni di Relay su uno o più MTA. Il client SMTP è responsabile solo dell’inoltro dei messaggi di posta elettronica a un MTA.

Se il server SMTP contattato non possiede un repository locale relativo all’indirizzo di destinazione è costretto a effettuare una ritrasmissione del messaggio appena ricevuto verso la destinazione finale.

Questo principio generale permette la spedizione della posta anche quando il client SMTP non è in grado di raggiungere direttamente il server che mantiene il repository finale.

Il client è chiamato ad aprire una connessione TCP, invocando la porta 25 di un server SMTP noto, su cui sono attivate le necessarie funzioni di Relay.

Una volta che il server accetta la richiesta di servizio, il client provvede a trasmettere il messaggio di posta elettronica seguendo le specifiche del protocollo SMTP.

La risoluzione DNS necessaria per scoprire il repository finale in tal caso non è richiesta al client, ma solo al server SMTP contattato.

Per evitare che MTA provvisti di indirizzo IP pubblico possano essere utilizzati arbitrariamente come Relay Server, da qualsiasi client SMTP, in essi viene normalmente impostata la lista degli indirizzi IP sorgente autorizzati al servizio.

Solo se il server riconosce tra questi l’indirizzo IP del client ammette il messaggio e ne effettua la ritrasmissione.

Altrimenti chiude il servizio, bloccando la consegna del messaggio di posta elettronica.

Se il messaggio viene accettato dal Relay Server il passo successivo è stabilire a quale server SMTP è necessario consegnarlo.

Per stabilire qual è il server SMTP, responsabile per la ricezione della posta elettronica per gli utenti di un determinato dominio, è necessario interrogare il DNS.

Nel database distribuito del DNS sono indicati tutti gli MTA autorizzati a ricevere messaggi di posta per un dato dominio (sono gli indirizzi IP recuperati dai vari record MX presenti per il dominio destinazione).

Da quanto fin qui descritto è normale maturare l’impressione che il servizio di posta elettronica sia un servizio decisamente più complesso di altri (basati sul semplice paradigma client/server).

La maggiore complessità sta solo nel modello adottato negli anni per consentire un uso della posta elettronica agli utenti Internet e non nel protocollo SMTP, che stabilisce le regole base della consegna dei messaggi.

SMTP infatti è molto semplice e, almeno in origine, ben poco orientato alla sicurezza.

Nella versione base non era prevista autenticazione a livello applicativo e uso di soluzioni crittografiche per assicurare integrità e riservatezza ai dati trasmessi.

Per effettuare lo scambio dei messaggi di posta il protocollo SMTP originale definisce una serie di comandi e una sequenza prestabilita di interazioni tra client e server.

L’implementazione minima del protocollo richiede alle entità coinvolte il riconoscimento di soli otto comandi, anche se, molto spesso, le entità coinvolte nel processo di scambio dei messaggi di posta elettronica utilizzano una sequenza ridotta di comandi, composta da soli cinque comandi.

Ciascun comando è costituito da una o più linee di testo ASCII di lunghezza massima prefissata.

Un comando SMTP viene generalmente inviato dal client al server.

Il server risponde a ogni comando con un codice numerico, che permette di stabilire l’esito del comando inviato.

L’implementazione minima del protocollo SMTP prevede i seguenti comandi:

HELO, MAIL, RCPT, DATA, QUIT, RSET, VRFY, NOOP.

Di questi i primi cinque rappresentano la sequenza ridotta, indispensabile per conseguire lo scambio di un messaggio di posta elettronica.

I comandi che compongono la sequenza ridotta devono essere eseguiti nello stesso ordine in cui sono elencati.

Esamineremo i comandi indicati e le relative funzioni in un altro articolo.

error: Content is protected !!

La maggior parte dei contenuti del blog ComputerSec vengono pubblicati a beneficio di tutti e in modo completamente gratuito.
Tuttavia per supportare il blog, e per avere ulteriori vantaggi, puoi decidere di abbonarti e sfruttare al 100% tutti i contenuti!
Abbonati Ora!

Complimenti! Ti sei iscritto alla nostra Newsletter

C'è stato un errore durante l'invio della richiesta. Per favore riprova.

Computer Security will use the information you provide on this form to be in touch with you and to provide updates and marketing.