Inviare e ricevere Mail Con Telnet

Inviare mail con il telnet è un ottimo modo per fare un po' di debug sull'invio di mail. Ecco un sito web con le sue due pagina

Riporto qui sotto i dettagli delle pagina casomai il sito dovesse mai andare offline.

INVIARE

QUANDO ESIGENZA IMPONE…
(ovvero smtp auth login plain && base64 de/coder)

"… In un vicolo di New York, dove il sole non batte neanche la domenica, …"

Questa procedura, ora, nel mio caso è con il protocollo AUTH LOGIN PLAIN.

Prima di effettuare la connessione telnet dobbiamo trasformare la nostra USERID e la relativa PASSWORD in base64. O cavoli con carta e penna?! Ma nooo…. in rete trovate un sacco di applicazioni web-based, in codice C o in altri linguaggi da voi preferiti. Naturalmente sarebbe consigliata un'applicazione sulla propria macchina che una in rete… parlando di sicurezza non si sa mai…. che ne dite?

Di solito quando si codifica una stringa, per esempio "venusia" come userid e "segreto" come passwd, l'applicazione ci avverte che la sequenza è ultimata o con "==" o "o="; naturalmente qualche prova di codifica e decodifica non è male da sperimentare. Alla bisogna naturalmente non metteremo i simboli di "fine stringa" perché non fanno parte ovviamente dei dati che l'autentificazione ci richiederà.

Di seguito allego il codice di un de/codificatore, che uso per la sua semplicità ed efficenza, di cui gentilmente ringraziamo Daniel Lerch per averlo condiviso sulla rete… fatevi un giro sul suo sito.

/***

  • Autor: Daniel Lerch
  • e-mail: moc.ay|hcrel#moc.ay|hcrel

*

  • Referencias:
  • Network security with OpenSSL (O'Reilly)

*

  • Compilacion:
  • $ gcc base64.c -o base64 -lssl

*
***/

#include <stdio.h>
#include <string.h>
#include <openssl/evp.h>

unsigned char *base64_encode (unsigned char *buffer, unsigned int len)
{

unsigned char *ret = (unsigned char *) malloc ((((len+2)/3)*4)+1);
EVP_EncodeBlock (ret, buffer, len);
ret[(((len+2)/3)*4)] = 0;
return ret;
}

unsigned char *base64_decode (unsigned char *buffer, unsigned int len)
{

unsigned char *ret = (unsigned char *) malloc ((((len+2)/3)*4)+1);
EVP_DecodeBlock (ret, buffer, len);
ret[(((len+2)/3)*4)] = 0;
return ret;
}

void usage (char *progname) {

printf ("Usage: %s [ encode | decode ] Text\n\n", progname);
exit(0);
}

int main (int argc, char *argv[])
{
int i;

/* Sin parametros */
if (argc < 3) usage(argv[0]);

if (argc == 3) {

/* Verificamos los algoritmos */
if (strcmp(argv[1], "encode") == 0)
printf ("%s\n", base64_encode (argv[2], strlen(argv[2])));

if (strcmp(argv[1], "decode") == 0)
printf ("%s\n", base64_decode (argv[2], strlen(argv[2])));

}
else usage(argv[0]);

return 0;
}

/***/

Naturalmente facciamo attenzione alla compilazione che lo stesso autore ci suggerisce:
$ gcc base64.c -o base64 -lssl

Ora che abbiamo tutto ciò che occorre vediamo la variante applicata alla sessione telnet:

telnet smtp.vega.it 25
[Trying 100.99.198.97…
Connected to vega.it.
Escape character is '^]'.
220 vega.it ESMTP Sendmail 8.12.9 ready at Sun,
03 Sep 2004 00:00:00 +0200 (CEST)]

e da qui in grassetto si evidenzierà cosa andremo a comunicare al server

EHLO LOCALHOST
250-vega.it
250-auth login plain
250-pipelining
250 8bitmime

avrete notato che non abbiamo usato il saluto solito HELO ma abbiamo avvertito il server che vogliamo autenticarci passandogli il comando EHLO. Delle sue risposte a noi interessa "250-auth login plain" che ci conferma l'uso di quel tipo di protocollo

AUTH LOGIN
334-xxxxxxxxx
dmVudXNpYQ
334-xxxxxxxxx
c2VncmV0bw
235 ok, go ahead (#2.0.0)

il server ha trasmesso la sua identificazione con il codice 334 e noi abbiamo immesso la userid (venusia) codificata in base64 "dmVudXNpYQ" e di seguito all'altra richiesta 334 la nostra passwd (segreto) "c2VncmV0bw" e se tutto è ok, ci viene comunicato con il codice 235.

Bene…. ora che siamo stati riconosciuti, il server attenderà poi la normale procedura con i comandi:

MAIL FROM:
RCPT TO:
DATA
e bla…bla… bla….

ma questo lo sapete già… vero?!

Questo tutto nel rispetto del significato dell'acronimo KISS e nel segno del "semplicemente funzionale" a molti caro.

Ma quanto amo i comandi testuali!!!

Si denota ora, che abbiamo una valente risposta ai normali e frequenti problemi di gestione del server di posta ed alla lentezza cronica della grafica ad essa applicata. Se il vostro fornitore del servizio di posta non prevede la possibilità di usare i protocolli smtp e pop, che aspettate a cambiarlo?!

SPEDIRE

Telnet è il principale protocollo di Internet per realizzare delle connessioni con macchine in remoto. Da la possibilità di essere fisicamente sul proprio sistema e lavorare su un altro che può essere nella stanza accanto come dall'altra parte del mondo, la propria macchina (locale) diventa così un terminale remoto: tecnicamente l'operazione è definita Remote Login.

Ad esempio: se ci si trova lontani dal proprio ambiente di lavoro e si ha bisogno di controllare la posta elettronica, basta trovare un qualsiasi accesso ad Internet con servizio di telnet e collegarsi al proprio server di posta elettronica. Esistono due tipi di server per la posta elettronica: SMTP e POP3 che potrebbero anche essere la stessa macchina. SMTP è la sigla che indica i server di posta in uscita, POP3 i server di posta in entrata. In poche parole, con un server SMTP si mandano le email, con un server POP3, invece, si ricevono le email sul proprio computer client.

Il nostro client può inviare la nostra missiva grazie ad una opportuna sessione Telnet, tramite questa si manda il nostro messaggio al server SMTP il quale a sua volta lo manda al server POP3 di destinazione e, tramite una sessione Telnet compiuta dal ricevente, è possibile scaricarla nel computer client dell'amico che riceverà la lettera elettronica.

Definiamo anche cos'è un HOST, un HOST non è altro che un codice alfanumerico che identifica un computer in rete, per esempio pp1518.actarus.it è un Host, esso ci serve per distinguere quel computer da tutti gli altri che si trovano in rete. Ad ogni Host corrisponde un indirizzo IP.

Per usufruire del comando Telnet da ambienti linux, unix, mac osx, windows con dos aprire un terminale (ovvero una shell, ovvero una riga di comando, ovvero una finestra dos) e digitare la parola telnet. Da ambienti windows dipende dalla versione usata, per esempio da vista è possibile attivare telnet (seguire questa guida), da xp da quanche parte dovrebbe esserci una riga di comando.

Vediamo un esempio di spedizione e ricezione di email, puntualizzando i passaggi.

Supponiamo che ti.agev|suratca#ti.agev|suratca mandi una mail a ti.sunev|aisunev#ti.sunev|aisunev, il computer client di actarus apre una sessione Telnet e manda la mail attraverso il server di posta in entrata di tipo SMTP smtp.vega.it. Il server SMTP la recapita al server di posta in uscita di tipo POP3 venus pop.venus.it il quale a sua volta lo fa ricevere a Venusia sul suo client tramite una propria sessione Telnet.

Tutti i passaggi che un messaggio ha subito da un server all'altro compaiono negli 'Headers'. Fatta questa breve descrizione generale di come avviene la spedizione di una email, vediamo il comando telnet nella sua essenza.

La sintassi per connettersi ad un servizio qualsiasi è la seguente:

telnet provider.it porta

Un server ha un nome unico (es: pippo.it), ma ad ogni servizio che esso offre è associata una corrispettiva porta (es. 25 SMTP, 21 FTP, 110 POP3, 119 NNTP, 23 Telnet, 80 HTTP etc.), quindi se ci colleghiamo alla porta 25 ci risponderà (sempre perché è un numero unico valido per tutti i server) il servizio SMTP, ovviamente il servizio deve essere attivo sul server cioè ci deve essere "qualcuno" in ascolto sulla porta 25.

Per collegarci a un server SMTP del provider Libero.it, digiteremo telnet libero.it 25.

Comandi SMTP

Una volta che ci siamo connessi al server smtp possiamo cominciare a digitare comandi. Eccone una lista:

HELO provider.it
Questo comando serve per salutare il server SMTP il quali ci riconoscerà dal nostro IP. Il server SMTP non permette l'autenticazione, per questa funzione accorre usare il server POP3 che vedremo più avanti.

MAIL FROM: <ti.redivorp|oirporp_kcin#ti.redivorp|oirporp_kcin>
Questo comando serve per indicare l'indirizzo email del mittente, è nostra cura dare l'email esatta, in caso contrario il destinatario potrà non riconoscerci. Non omettere le parentesi angolari.

RCPT TO: <ti.redivorp|oiratanitsed_kcin#ti.redivorp|oiratanitsed_kcin>
Questo comando serve per indicare l'indirizzo email del destinatario. Anche qui non omettere le parentesi angolari.

DATA
A questo comando segue una riga vuota che va riempita con la prima riga del nostro messaggio, per terminare l'inserimento è sufficiente una riga contenete il solo punto: ".".

VRFY: <ti.redivorp|kcin#ti.redivorp|kcin>
Questo comando serve per accettarsi dell'esistenza di un indirizzo email.

HELP oppure HELP <comando>
Fornisce la lista dei comandi disponibile oppure da informazioni su un singolo comando.

Vediamo una sessione di Telnet per spedire una email, supposto che l'autenticazione sia già stata fatta, in caratteri monospace e in grassetto i comandi da digitare e di seguito la risposta del server.

Supposto di avere un programma di posta elettronica normale tipo Mozilla, Thunderbird o OutLook, ci autentichiamo facendo un semplice "get message" ovvero "scarica la posta" sul nostro account di posta, in alternativa ci si può autenticare con telnet tramite una sessione di collegamento al POP3 che vedremo più avanti.

SESSIONE SMTP:

telnet smtp.vega.it 25
Trying 100.99.198.97…
Connected to vega.it.
Escape character is '^]'.
220 vega.it ESMTP Sendmail 8.12.9 ready at Sun, 01 Sep 2003 00:00:00 +0200 (CEST)

helo vega.it
250 vega.it Hello <Nome del proprio pc> [<IP del proprio pc>], pleased to meet you

help
214-2.0.0 This is sendmail version 8.12.9
214-2.0.0 Topics:
214-2.0.0 HELO EHLO MAIL RCPT DATA
214-2.0.0 RSET NOOP QUIT HELP VRFY
214-2.0.0 EXPN VERB ETRN DSN AUTH
214-2.0.0 STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation send email to
214-2.0.0 gro.liamdnes|sgub-liamdnes#gro.liamdnes|sgub-liamdnes.
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info

mail from: <ti.agev|suratca#ti.agev|suratca>
250 2.1.0 <ti.agev|suratca#ti.agev|suratca>… Sender ok

rcpt to: <ti.sunev|aisunev#ti.sunev|aisunev>
250 2.1.5 <ti.sunev|aisunev#ti.sunev|aisunev>… Recipient ok

data
354 Enter mail, end with "." on a line by itself
subject: Importante!
ciao!
Ci vediamo stasera?
baci.
.
250 2.0.0 <codice del messaggio> Message accepted for delivery

quit
221 2.0.0 vega.it closing connection
Connection closed by foreign host.

Se non abbiamo eseguito l'autenticazione il server ci risponderà con:
550 5.7.1 ti.agev|suratca#ti.agev|suratca… SMTP relay denied, authenticate via POP/IMAP first

Avrete sicuramente notato che siete stati voi a inserire il mittente che può essere così facilmente falsificato. Fate attenzione che il server SMTP comunque aggiunge agli header dell'email il vostro indirizzo IP.

Notate infatti che come risposta del saluto "helo", il server smtp vi dice il nome del vostro computer e anche l'IP, questi dati verranno aggiunti alla vostra email dal server e quindi la ricevente li potrà vedere. Al massimo potete confondere la mittente aggiungendo dei dati fasulli all'interno del comando "data" ma un occhio esperto capirà che siete stati voi a spedire la missiva. (Per risalire al computer che ha mandato la email è spesso, ma non sempre, necessario ricorrere a dati sensibili e quindi solo la magistratura può in pratica risalire a voi).

Comandi POP3

Connettiamoci al nostro ISP con telnet, esattamente al suo server di posta in entrata:

telnet pop.venus.it 110
la porta 110 è ovviamente quella del server che ci da il sevizio POP3.

Ecco la lista dei comandi:

user venusia
pass segreto
(il nostro nome utente e la nostra password.)

LIST oppure STAT
per ottenere la lista e la dimensione dei messaggi, List da la lista completa mentre Stat da il valore complessivo.

RETR: <nr del messaggio>
per leggere il messaggio desiderato.

TOP <nr del messaggio> <nr righe da vedere>
permette di vedere solo le prime nr righe del messaggio nr.

DELE: <nr del messaggio>
per cancellare un messaggio. Anche se esso viene effettivamente eliminato solo dopo essere usciti dalla connessione con QUIT.

RSET
per eliminare la marcatura fatta con "DELE". All'uscita, "QUIT", non verrà cancellata alcuna email.

QUIT
la connessione termina e vengono cancellati i messaggi selezionati con DELE.

Ecco una sessione Telnet per prelevare la posta:

SESSIONE POP3:

telnet pop.venus.it 110
Trying 193.70.192.70…
Connected to pop.venus.it.
Escape character is '^]'.
+OK POP3 server ready (7.0.019) <ti.sunev.pop|xxx#ti.sunev.pop|xxx>

user venusia
+OK Password required

pass segreta
+OK 4 messages

list
+OK
1 871
2 6533
3 3980
4 743
.
fornisce la lista delle email in ordine di arrivo al server pop3 e la loro lunghezza in byte

retr 4
+OK 743 bytes
Return-Path: <ti.agev|suratca#ti.agev|suratca>
Received: ….
Date: Sun, 01 Sep 2003 00:00:00 +0200 (CEST)
From: ti.agev|suratca#ti.agev|suratca
Message-Id: «codice del messaggio>@vega.it>
subject: Importante!
ciao!
Ci vediamo stasera?
baci.
.
abbiamo scaricato l'ultimo messaggio che è arrivato al server: il numero 4 da 743 byte.

dele 4
+OK message marked for deletion

stat
+OK 3 11384
3 messaggi rimanenti con la lunghezza complessiva

quit
+OK POP3 server closing connection
Connection closed by foreign host.
solo all'uscita i messaggi marcati vengono cancellati

Una piccola nota, il server POP3 di Libero.it è popmail.libero.it. Si tenga conto che quasi tutti i server smtp pretendono di inviare solo la posta dei propri utenti e rifiutano gli estranei. Nel caso di libero e altri occorre collegarsi via modem all'ISP Libero (cioè "telefonare" a Libero) per spedire la corrispondenza tramite i suoi server.

ViCisLAcK mi ha gentilmente permesso di pubblicare un suo articolo (Login autenticato per spedire email) in cui descrive come autenticarsi in quei casi in cui il server SMTP permetta questa procedura.

Una guida più da esperti descrive sia come inviare allegati sia come inviare email HTML sia come inviare email miste.

Come può servire oggigiorno o in futuro un sistema così antiquato? Le risposte sono molteplici ma una può essere avere sotto controllo totale la posta. Praticamente può essere usato per cancellare i messaggi troppo grandi verificando le prime linee in modo da essere certi che sia spam.

Senza dimenticare che tutti i mailer usano una sessione telnet per gestire la posta con i comandi che abbiamo visto anzi con molti meno, quindi l'azione diretta sul server da possibilità di ordine superiore.

Ultimamente mi capita di essere bersaglio di computer infetti che mandano virus sul mio server di posta elettronica con nomi a caso e come dominio kensan.it, mi sono arrivate decine di megabyte in poche ore intasandomi la mailbox.

In questi casi la soluzione migliore è accedere con una sessione telnet alla casella elettronica, cancellare un po' di messaggi con il comando DELE e poi agire a livello di webmail per cancellare la rimanente parte di spam. In questo modo ho evitato di scaricare lo spam per liberare la mia mailbox.

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License