La posta elettronica nell'architettura TCP/IP

Antonio Lioy < [email protected] >

Politecnico di Torino Dip. Automatica e Informatica Applicazioni di rete

 indirizzi logici (applicativi)  per identificare gli utenti del servizio applicativo  protocollo applicativo (sopra TCP/UDP e IP)  L7, ossia tra i due end-point applicativi  formato dati  dati significativi per l'applicazione  per ciascun punto occorre definire:  lessico = i caratteri ammissibili  sintassi = composizione di richieste e risposte  semantica (parziale) = significato

© A.Lioy (Politecnico di Torino, 2013-2020) 2 Indirizzi reali e virtuali

 l’indirizzo RFC-822 è:

casella-postale @ dominio-postale

 la casella postale può essere:  un nome di utente (es. login)  un identificativo virtuale (es. "casella funzionale")  il dominio postale può essere:  un nome (FQDN) o indirizzo del server di posta  un dominio di posta virtuale

© A.Lioy (Politecnico di Torino, 2013-2020) 3 Indirizzi RFC-822

 tre possibilità:  indirizzo  commento < indirizzo >  indirizzo ( commento )  esempio:  [email protected]  Antonio Lioy [email protected] (Antonio Lioy)  occhio alle fregature!  "Prof. Antonio Lioy "

© A.Lioy (Politecnico di Torino, 2013-2020) 4 Dai domini postali agli host

 il dominio postale è un concetto logico ma per trasmettere la posta con SMTP occorre identificare un host fisico con un indirizzo IP preciso  il dominio è virtuale ed ha quindi un mail exchanger?  nslookup -q=MX dominio-postale  posta inviata ad uno degli MX host (contattati in ordine di preferenza)  se non esiste un MX, il dominio coincide forse con un host?  nslookup -q=A dominio-postale  posta inviata all’host  se non esiste né MX né A allora è impossibile consegnare la posta al destinatario (dominio di posta errato)

© A.Lioy (Politecnico di Torino, 2013-2020) 5 Dai domini postali agli host: esempio

nslookup –q=MX polito.it. Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: polito.it mail exchanger = 10 mx.polito.it. nslookup –q=A polito.it. Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: *** Can't find polito.it: No answer

© A.Lioy (Politecnico di Torino, 2013-2020) 6 Dai domini postali agli host: esempio nslookup –q=MX cisco.com. Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: cisco.com mail exchanger = 30 aer-mx-01.cisco.com. cisco.com mail exchanger = 20 rcdn-mx-01.cisco.com. cisco.com mail exchanger = 10 alln-mx-01.cisco.com. nslookup –q=A cisco.com Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: Name: cisco.com Address: 72.163.4.185 © A.Lioy (Politecnico di Torino, 2013-2020) 7 MHS (Message Handling System)

MTA MTA MTA chain MSA MSA

MS MS

MUA MUA

 MUA (Message User Agent)  MSA ()  MTA (Message Transfer Agent)  MS (Message Store)

© A.Lioy (Politecnico di Torino, 2013-2020) 8 Architettura Internet mail

 RFC-5598 "Internet Mail Architecture"  in alcuni casi, oltre a MUA, MSA, MTA e MS, si distinguono altri server lato ricevente:  MDA (Mail Delivery Agent)  l'ultimo MTA della catena che ha l'incarico di consegnare la posta al MS  MRA (Mail Retrieval Agent)  elemento incaricato di prelevare la posta dal MS e metterla in un deposito locale accessibile al MUA  in pratica un MUA senza interfaccia utente, da usarsi con un MUA incapace di prelevare la posta dal MS

© A.Lioy (Politecnico di Torino, 2013-2020) 9 E-mail in client-server

SMTP Mailserver SMTP MTA ... ( MSA )

MUA (es. Thunderbird, Outlook Express)

Post Office ... MTA POP, IMAP ( MS ) SMTP

© A.Lioy (Politecnico di Torino, 2013-2020) 10

Mailserver SMTP MTA ... ( MSA )

SMTP HTTP web server HTML HTTP virtual engine MUA web browser POP / IMAP

Post Office ... MTA ( MS ) SMTP

© A.Lioy (Politecnico di Torino, 2013-2020) 11 Protocolli e porte

 SMTP (Simple Mail Transfer Protocol)  25/tcp (MTA)  587/tcp (MSA)  POP (Post Office Protocol)  110/tcp  IMAP (Internet Message Access Protocol)  143/tcp  sono protocolli di basso livello (si occupano solo di trasportare i messaggi, non entrano in merito al loro contenuto)

© A.Lioy (Politecnico di Torino, 2013-2020) 12 Formati dei messaggi

 “RFC-822”  formato di un messaggio (header + body)  body di puro testo  contenuti non testuali (es. immagini) devono essere trasformati in testo (es. uuencode, binhex)  MIME  estensione multimediale di RFC-822  body può includere anche dati non di testo  trasformati automaticamente in testo da MIME  alcuni campi aggiuntivi nell’header

© A.Lioy (Politecnico di Torino, 2013-2020) 13 Messaggi "RFC-822"

 RFC-5322 (ex RFC-822)  solo caratteri US-ASCII a 7 bit  righe terminate da  messaggi composti da header + body  header  parole chiave a inizio riga  righe di continuazione iniziano con uno spazio  body  separato dall’header da una riga vuota  contiene il messaggio

© A.Lioy (Politecnico di Torino, 2013-2020) 14 Header RFC-822

 From: mittente (logico) Sender: mittente (operativo)  Organization: organizzazione del mittente  To: destinatario  Subject: argomento  Date: data e ora di spedizione  Received: passaggi intermedi  Message-Id: ID di spedizione  CC: in copia a Bcc: in copia (nascosta) a  Return-Receipt-To: ricevuta di ritorno a

© A.Lioy (Politecnico di Torino, 2013-2020) 15 Ricevuta di ritorno RFC-822

 collegata all’header Return-Receipt-To:  non standard e deprecata ma usata da molti MUA  risposta dipende da MS e/o MUA del destinatario:  può non offrirla  può offrirla alla ricezione o alla lettura  lo standard preferisce:  RCPT TO con DSN (Delivery Status Notification, che però copre solo la consegna ma non la lettura)  l'header MDN (Message Disposition Notification, che però può essere ignorato dal MUA)

© A.Lioy (Politecnico di Torino, 2013-2020) 16 Perché si attraversano tanti MTA?

 minimo due MTA  concettualmente MSA e MS sono diversi dagli MTA  un MTA in uscita dalla rete del mittente (con tanti MSA alle spalle per distribuire il carico in ingresso)  un MTA in ingresso nella rete del destinatario (con tanti MS per distribuire il carico di memorizzazione e lettura dei messaggi).  in passato molti altri MTA intermedi  rete non tutta TCP/IP e/o posta non RFC-822  MTA = gateway (traduzione protocollo di rete e/o formato di posta)  guardare i "Received:" per vedere gli MTA attuali:  "from" e "by" indicano MTA mittente e ricevente di un passo

© A.Lioy (Politecnico di Torino, 2013-2020) 22 Esempio: lettura header Received

Received: from [130.192.180.16] (HELO antispam.polito.it) by polito.it (CommuniGate Pro SMTP 6.2.5) for [email protected]; Fri, 14 Dec 2018 18:11:50 +0100 Received: from mail-it1-f177.google.com [209.85.166.177] by antispam.polito.it for ; Fri, 14 Dec 2018 18:11:48 +0100 Received: by mail-it1-f177.google.com for ; Fri, 14 Dec 2018 09:11:48 -0800 (PST) Received: from 131-193-184-17.east.wireless.uic.edu. [131.193.184.17] by smtp.gmail.com; Fri, 14 Dec 2018 09:11:37 -0800 (PST)

© A.Lioy (Politecnico di Torino, 2013-2020) 23 Contenuti binari in RFC-822

 devono essere codificati come testo tramite appositi programmi:  uuencode / uudecode in Unix  binhex in MacOS  esempio:  uuencode photo.gif photo.gif | mail –s "my pic" ucl!ucb!john  problema poi affrontato e risolto in modo più automatico, completo e strutturato dal formato MIME

© A.Lioy (Politecnico di Torino, 2013-2020) 24 Il protocollo SMTP

 specifica base in RFC-5321 (ex RFC-821)  protocollo ASCII a 7 bit  il MSB del byte può essere forzato a zero o usato per la parità (semplice controllo di errore)  alfabeto US-ASCII  comandi case-insensitive  righe terminate da

© A.Lioy (Politecnico di Torino, 2013-2020) 27 Comandi base SMTP

 HELO hostname identifica l’host mittente  MAIL FROM: return-path identifica il mittente  RCPT TO: forward-path identifica il destinatario  DATA tutte le righe successive contengono un messaggio RFC-822 sino alla riga (esclusa) che contiene “.”  QUIT termine della trasmissione SMTP

© A.Lioy (Politecnico di Torino, 2013-2020) 28 Codici di stato SMTP

 ogni risposta inizia con un codice di stato numerico a tre cifre XYZ  la prima cifra (X) fornisce il major status dell’azione richiesta:  X=1 : positive preliminary  X=2 : positive completion  X=3 : positive intermediate  X=4 : transient negative completion  X=5 : permanent negative completion

© A.Lioy (Politecnico di Torino, 2013-2020) 31 Codici di stato SMTP

 la seconda cifra (Y) indica la tipologia  Y=0 : syntax  Y=1 : information  Y=2 : connections  Y=5 : mail system  la terza cifra (Z) fornisce un modo per distinguere codici di risposta appartenenti alla stessa classe  risposta su più righe se lo stato è XYZ– (l’ultima riga ha solo XYZ)

© A.Lioy (Politecnico di Torino, 2013-2020) 32 Limiti quantitativi di SMTP e RFC-822

 mailbox ≤ 64 caratteri  domain ≤ 64 caratteri  reverse / forward-path ≤ 256 caratteri  comando / risposta ≤ 512 caratteri  linea di testo ≤ 1000 caratteri (MUST)  linea di testo ≤ 80 caratteri (SHOULD) molti MTA forzano un CRLF dopo 78 caratteri  numero di destinatari ≤ 100

© A.Lioy (Politecnico di Torino, 2013-2020) 33 Un esempio SMTP / RFC-822 telnet duke.colorado.edu 25 Trying ..... Connected to duke.colorado.edu Escape character is ‘^]’ 220 duke.colorado.edu ... HELO leonardo.polito.it 250 Hello leonardo.polito.it ... Nice to meet you! MAIL FROM: [email protected] 250 cat ... Sender ok RCPT TO: [email protected] 250 franz ... Recipient ok DATA 354 Enter mail, end with “.” on a line by itself © A.Lioy (Politecnico di Torino, 2013-2020) 34 From: [email protected] (Antonio Lioy) To: [email protected] Subject: vacanze Ciao Francesco, ti rinnovo l’invito a venirmi a trovare nelle tue prossime vacanze in Italia. Fammi sapere quando arrivi. Antonio . 250 Ok QUIT 221 duke.colorado.edu closing connection connection closed by foreign host

© A.Lioy (Politecnico di Torino, 2013-2020) 35 ESMTP

 Extended SMTP, definito in RFC-1869 e quindi incorporato (con SMTP) in RFC-5321  non cambia il protocollo base ed il canale  i client ESMTP devono presentarsi con: EHLO hostname  se il server ricevente parla ESMTP, deve dichiarare le estensioni che supporta, una per riga, nella sua risposta all’EHLO

© A.Lioy (Politecnico di Torino, 2013-2020) 36 Estensioni ESMTP standard

 8BITMIME  (RFC-1652) nel corpo del comando DATA può ricevere dati codificati su 8 bit  rischioso! gli MTA intermedi potrebbero non supportare questa opzione  SIZE dimensione MAIL FROM: address SIZE=dimensione  (RFC-1870) dichiara la massima dimensione accettabile dal server o la dimensione del messaggio da inviare  PIPELINING  (RFC-1854) invio di più comandi senza attendere risposta per ognuno di essi (eccezione: quelli che fanno cambiare stato)

© A.Lioy (Politecnico di Torino, 2013-2020) 38 Estensione DSN (Delivery Status Notification)

 estende il comando RCPT con:  NOTIFY=notify-list valori possibili: NEVER, SUCCESS, FAILURE, DELAY  ORCPT=original-recipient specifica il destinatario originale  estende il comando MAIL con:  RET=returned-message valori possibili: FULL, HDRS  ENVID=sender-id identificativo creato dal mittente

© A.Lioy (Politecnico di Torino, 2013-2020) 39 Esempi ESMTP positivi

 mailer ESMTP senza estensioni:

220 mail.polito.it - SMTP service ready EHLO mailer.x.com 250 Hello mailer.x.com - nice to meet you!

 mailer ESMTP con estensioni: 220 mail.polito.it - SMTP service ready EHLO mailer.x.com 250-Hello mailer.x.com - nice to meet you! 250-SIZE 26214400 250 8BITMIME

© A.Lioy (Politecnico di Torino, 2013-2020) 40 Esempio ESMTP negativo

 il mailer non conosce il protocollo ESMTP:

220 mail.polito.it - SMTP service ready EHLO mailer.x.com 500 Command not recognized: EHLO

© A.Lioy (Politecnico di Torino, 2013-2020) 41 SMTP-Auth

 estensione di ESMTP definita in RFC-4954  comando AUTH + opzioni di MAIL FROM  per autenticare un client …  … prima di accettarne i messaggi!!!  utile contro lo spamming:  dopo il comando EHLO il server invia i meccanismi di autenticazione supportati  il client ne sceglie uno  viene eseguito il protocollo di autenticazione  se l'autenticazione ha successo, il server accetta i comandi SMTP del client  se l’autenticazione fallisce, il canale viene immediatamente chiuso

© A.Lioy (Politecnico di Torino, 2013-2020) 42 Esempio AUTH negativo

 il mailer non conosce (o non accetta) la modalità di autenticazione proposta dal client:

220 example.polito.it - SMTP service ready EHLO mailer.x.com 250-example.polito.it 250 AUTH LOGIN CRAM-MD5 DIGEST-MD5 AUTH PLAIN 504 Unrecognized authentication type

© A.Lioy (Politecnico di Torino, 2013-2020) 43 AUTH: metodo LOGIN

220 example.polito.it - SMTP service ready EHLO mailer.x.com 250-example.polito.it 250 AUTH LOGIN CRAM-MD5 DIGEST-MD5 AUTH LOGIN 334 VXNlcm5hbWU6 Username: bGlveQ== lioy 334 UGFzc3dvcmQ6 Password: YW50b25pbw== antonio 235 authenticated

© A.Lioy (Politecnico di Torino, 2013-2020) 44 AUTH: metodo PLAIN

 sintassi (RFC-2595): AUTH PLAIN id_pwdBASE64  id_pwd è definito come: [ authorize_id ] \0 authentication_id \0 pwd

220 example.polito.it - SMTP service ready EHLO mailer.x.com 250-example.polito.it 250 AUTH LOGIN PLAIN AUTH PLAIN bGlveQBsaW95AGFudG9uaW8=

235 authenticated lioy \0 lioy \0 antonio

© A.Lioy (Politecnico di Torino, 2013-2020) 45 POP (Post-Office Protocol)

 una volta era diffuso anche POP-2 (109/tcp) oggi è usato solo POP-3 (RFC-1725, 110/tcp)  realizza il collegamento tra MUA e MS, quindi serve solo a leggere la posta dall’ufficio postale  talvolta usato (impropriamente) in assenza di SMTP-auth per autenticare l’utente prima di spedire posta (es. Pegasus Mail)

© A.Lioy (Politecnico di Torino, 2013-2020) 46 POP-3: formati

 protocollo ASCII (ma è 8-bit clean)  comandi case-insensitive  righe terminate da  codici di errore del server +OK -ERR  risposte multi-linea terminate da una riga contenente solo: .  separatore: un solo carattere di spazio

© A.Lioy (Politecnico di Torino, 2013-2020) 47 POP-3: comandi obbligatori

 QUIT  STAT +OK nmsg totalmsgsize  LIST [ msgid ] msgid msgsize  RETR msgid  DELE msgid  NOOP  RSET

© A.Lioy (Politecnico di Torino, 2013-2020) 48 POP-3: comandi opzionali

 USER mailbox PASS password  APOP mailbox digest  AUTH mechanism (KERBEROS_V4, GSSAPI, SKEY)  TOP msgid nline  UIDL [ msgid ] msgid umsgid fornisce stringhe di identificazione univoche per tutte le sessioni

© A.Lioy (Politecnico di Torino, 2013-2020) 49 Un esempio POP-3 telnet pop.polito.it 110 +OK POP3 server ready <[email protected]> USER lioy +OK password required for lioy PASS antonio +OK lioy mailbox locked and ready STAT +OK 2 320 LIST +OK 2 messages (320 octets) 1 120 2 200

© A.Lioy (Politecnico di Torino, 2013-2020) 50 Un esempio POP-3

RETR 1 +OK 120 octets ( messaggio n. 1 ) . DELE 1 +OK message 1 deleted RETR 2 +OK 200 octets ( messaggio n.2 ) . QUIT +OK POP3 server signing off

© A.Lioy (Politecnico di Torino, 2013-2020) 51 IMAP

 Internet Message Access Protocol  varie versioni, la più recente e diffusa è IMAP4  porta 143/tcp  vantaggi rispetto a POP:  possibile modo connesso (canale sempre aperto)  accesso simultaneo da più client  fetch parziale (es. solo header) ed accesso a singole parti MIME  stato dei messaggi (es. letto, cancellato, inoltrato)  uso di cartelle (folder) per organizzare i messaggi  ricerche lato server (meno carico su rete e client)

© A.Lioy (Politecnico di Torino, 2013-2020) 52