La posta elettronica nell'architettura TCP/IP Antonio Lioy < lioy@polito.it > Politecnico di Torino Dip. Automatica e Informatica Applicazioni di rete indirizzi logici (applicativi) per identificare gli utenti del servizio applicativo protocollo di rete (sopra TCP/UDP e IP) 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-17) C-1
Indirizzi reali e virtuali l indirizzo RFC-822 è: casella-postale @ dominio-postale la casella postale può essere: un nome di utente (login) un identificativo virtuale il dominio postale può essere: un nome (FQDN) o indirizzo del server di posta un dominio di posta virtuale Indirizzi RFC-822 tre possibilità: indirizzo commento < indirizzo > indirizzo ( commento ) esempio: lioy@polito.it Antonio Lioy <lioy@polito.it> lioy@polito.it (Antonio Lioy) occhio alle fregature! "Prof. Antonio Lioy <lioy@polito.it> " <cattivik@malvagi.it> A.Lioy - Politecnico di Torino (2013-17) C-2
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 coincide con un host? nslookup -q=a dominio posta inviata all host il dominio è virtuale ed ha quindi un mail exchanger? nslookup -q=mx dominio posta inviata ad uno degli MX host (contattati in ordine di preferenza) MHS (Message Handling System) MTA MSA MTA chain MTA MSA MS MS MUA MUA MUA (Message User Agent) MSA (Message Submission Agent) MTA (Message Transfer Agent) MS (Message Store) A.Lioy - Politecnico di Torino (2013-17) C-3
E-mail in client-server SMTP Mailserver ( MSA ) SMTP MTA... MUA (es. Thunderbird, Outlook Express) POP, IMAP Post Office ( MS ) SMTP... MTA Webmail Mailserver ( MSA ) SMTP MTA... web browser HTTP HTML HTTP engine SMTP web server POP / IMAP virtual MUA Post Office ( MS ) SMTP... MTA A.Lioy - Politecnico di Torino (2013-17) C-4
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) RFC-822 Formati dei messaggi 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 alcuni campi aggiuntivi nell header A.Lioy - Politecnico di Torino (2013-17) C-5
Messaggi "RFC-822" RFC-5322 (ex RFC-822) solo caratteri US-ASCII a 7 bit righe terminate da <CR> <LF> 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 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-17) C-6
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 Unix (sendmail): alla ricezione Windows-NT: alla lettura Notes: alla ricezione e alla lettura lo standard preferisce RCPT TO con DSN (che però copre solo la consegna ma non la lettura) 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 A.Lioy - Politecnico di Torino (2013-17) C-7
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 Esempio uuencode $ ls -sh flower.ico 68K flower.ico $ uuencode flower.ico flower.ico > flower.uue $ cat flower.uue begin 755 flower.ico M```!``$`@(````$`(``H"`$`%@```"@```"```````$```$`(``````````! M`!(+```2"P````````````# \` `/ P# \` `/ P# \`... M + \` end $ ls -sh flower.uue 92K flower.uue A.Lioy - Politecnico di Torino (2013-17) C-8
Esempio uuencode: spiegazione il primo carattere di ogni riga indica il numero di byte codificati nella riga per renderlo stampabile si somma il suo valore a quello del carattere Blank si considerano 6 bit per volta (invece di 8) ed il loro valore lo si somma al carattere Blank 3 byte diventano 4 caratteri stampabili (+33%) alcuni calcoli (sui contatori): M (ASCII 77) Blank (ASCII 32) = 45 byte 45 / 3 = 15; 15 * 4 = 60 caratteri di dati riga da 62 caratteri (dati + contatore + LF) + (ASCII 43) 32 = 11 byte / 3 = 4 * 4 = 16 + 2 = 18 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 <CR><LF> A.Lioy - Politecnico di Torino (2013-17) C-9
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.<cr><lf> QUIT termine della trasmissione SMTP Altri comandi SMTP RSET annulla tutti comandi sinora impartiti VRFY indirizzo-postale verifica se l indirizzo è valido EXPN indirizzo-di-una-lista elenca gli iscritti alla lista HELP fornisce un breve help NOOP operazione nulla (utile per keep-alive) nota: VRFY e EXPN quasi sempre non sono supportati per cercare di limitare lo spam A.Lioy - Politecnico di Torino (2013-17) C-10
Comandi SMTP obsoleti SMTP permetteva anche di mandare messaggi direttamente sul terminale di un utente, operazione nota col nome di SEND per distinguerla dalla normale MAIL SEND FROM: return-path identifica il mittente SOML FROM: return-path send-or-mail SAML FROM: return-path send-and-mail 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-17) C-11
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) 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-17) C-12
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: cat 250 cat... Sender ok RCPT TO: franz 250 franz... Recipient ok DATA 354 Enter mail, end with. on a line by itself From: cat@athena.polito.it (Antonio Lioy) To: franz@duke.colorado.edu 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-17) C-13
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 Estensioni SMTP standard tutti i comandi SMTP non obbligatori: SEND SOML SAML EXPN HELP TURN A.Lioy - Politecnico di Torino (2013-17) C-14
8BITMIME Estensioni ESMTP standard (RFC-1652) nel corpo del comando DATA può ricevere dati da 8bit 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) 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-17) C-15
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 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-17) C-16
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 fallisce, il canale viene chiuso 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-17) C-17
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 AUTH: metodo PLAIN sintassi (RFC-2595): AUTH PLAIN id_pwd BASE64 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-17) C-18
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) POP-3: formati protocollo ASCII (ma è 8-bit clean) comandi case-insensitive righe terminate da <CR><LF> codici di errore del server +OK -ERR risposte multi-linea terminate da una riga contenente solo:. <CR> <LF> separatore: un solo carattere di spazio A.Lioy - Politecnico di Torino (2013-17) C-19
QUIT POP-3: comandi obbligatori STAT +OK nmsg totalmsgsize LIST [ msgid ] msgid msgsize RETR msgid DELE msgid NOOP RSET 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-17) C-20
Un esempio POP-3 telnet pop.polito.it 110 +OK POP3 server ready <7831.84549@pop.polito.it> 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. 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-17) C-21