6x - Politecnico di Torino

Transcript

6x - Politecnico di Torino
Posta elettronica Internet
(eMail - mar'17)
Applicazioni di rete
La posta elettronica
nell'architettura TCP/IP
Antonio Lioy
< [email protected] >
Politecnico di Torino
Dip. Automatica e Informatica
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

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:
 [email protected]
 Antonio Lioy <[email protected]>
 [email protected] (Antonio Lioy)
 occhio alle fregature!
 "Prof. Antonio Lioy <[email protected]>
" <[email protected]>

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)

© A.Lioy - Politecnico di Torino (2013-17)
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)


C-1
Posta elettronica Internet
(eMail - mar'17)
E-mail in client-server
SMTP
Mailserver
( MSA )
SMTP
Webmail
Mailserver SMTP
( MSA )
MTA ...
MTA ...
SMTP
HTTP
HTML
MUA
(es. Thunderbird,
Outlook Express)
web server
HTTP
engine
virtual
MUA
web browser
Post Office
( MS )
POP, IMAP
SMTP
POP / IMAP
... MTA
Post Office
( MS )
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-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
© A.Lioy - Politecnico di Torino (2013-17)
... MTA
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
 alcuni campi aggiuntivi nell’header

Messaggi "RFC-822"

SMTP
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

C-2
Posta elettronica Internet
(eMail - mar'17)
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

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
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

© A.Lioy - Politecnico di Torino (2013-17)
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>


C-3
Posta elettronica Internet
(eMail - mar'17)
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

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
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-17)
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

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


C-4
Posta elettronica Internet
(eMail - mar'17)
Un esempio SMTP / RFC-822
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
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
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

Estensione DSN
(Delivery Status Notification)
Estensioni ESMTP standard
8BITMIME
 (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)

© A.Lioy - Politecnico di Torino (2013-17)
tutti i comandi SMTP non obbligatori:
 SEND
 SOML
 SAML
 EXPN
 HELP
 TURN
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

C-5
Posta elettronica Internet
(eMail - mar'17)
Esempi ESMTP positivi

mailer ESMTP senza estensioni:
Esempio ESMTP negativo

il mailer non conosce il protocollo ESMTP:
220 mail.polito.it - SMTP service ready
EHLO mailer.x.com
250 Hello mailer.x.com - nice to meet you!

220 mail.polito.it - SMTP service ready
EHLO mailer.x.com
500 Command not recognized: EHLO
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
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


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
AUTH: metodo PLAIN
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:
lioy
bGlveQ==
334 UGFzc3dvcmQ6
Password:
antonio
YW50b25pbw==
235 authenticated
© A.Lioy - Politecnico di Torino (2013-17)
il mailer non conosce (o non accetta) la modalità
di autenticazione proposta dal client:
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
C-6
Posta elettronica Internet
(eMail - mar'17)
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


POP-3: comandi obbligatori
QUIT
STAT
+OK nmsg totalmsgsize
 LIST [ msgid ]
msgid msgsize
 RETR msgid
 DELE msgid
 NOOP
 RSET


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-17)
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

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
C-7