# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Leer correo de una cuenta POP a través de TELNET


Hoy voy a seguir con las explicaciones referentes a acceder a servicios a través de telnet, ya sea para chequear que el funcionamiento del servicio es el correcto o por verdadera necesidad de enviar/recibir un correo de este modo.

En este caso vamos a acceder al servicio POP de una cuenta de correo para leer los correos que hay pendientes de ser recibidos en la cuenta de email. Algo muy importante que has de conocer antes de ejecutar esta técnica es que estás enviando tu clave de la cuenta de correo en texto plano y sin encriptar, no es recomendable utilizar este método a no ser que sea para chequear que simplemente el servicio funciona.

En primer lugar conectamos por el puerto por defecto del servicio pop, el 110:

$ telnet mail.miservidor.com 110

Si todo va bien, el servidor nos responderá algo similar a esto:

$ telnet mail.miservidor.com 110
Trying mail.miservidor.com ...
Connected to .mail.miservidor.com
Escape character is '^]'.
+OK Hello there.

En este momento es cuando debemos introducir nuestras credenciales de acceso (cuenta de correo y clave):

user micuenta@miservidor.com
+OK Password required.
pass **************
+OK logged in.

Ya estamos conectados al servidor POP, los comandos más básicos son los siguientes:

  • list: Muestra un listado de los correos que hay almacenados en el servidor y su tamaño:
    list
    +OK POP3 clients that break here, they violate STD53.
    1 653
    2 1340
    3 1983
    4 3736
  • retr: Comando para leer un determinado mensaje, simplemente seleccionamos el identificador del mensaje que queremos leer:
    list
    +OK POP3 clients that break here, they violate STD53.
    1 1442
    .
    retr 1
    +OK 1442 octets follow.
    Return-path:
    Envelope-to: xxxx@xxxxx
    Delivery-date: Mon, 05 Oct 2009 21:48:13 +0200
    Received: from xxx.xxx.xx ([xx.xx.xx.xx])
    	by xxx.xx.xx with esmtp (Exim 4.69)
    
    etc....
  • dele: Comando para borrar un correo, simplemente dele seguido del ID:
    dele 1
    +OK Deleted.
    
  • Para finalizar la conexión utilizaremos quit:
    quit
    +OK Bye.
    

Otros comandos son stat para ver el tamaño y número total de los mensajes en cola, top para leer X líneas de un mensaje o rset para deshacer la eliminación de un mensaje.

Comprobar funcionamiento servidor web vía TELNET


Seguimos con las comprobaciones a través de TELNET de los diferentes servicios que nos encontramos normalmente en un servidor. Ayer vimos como hacer pruebas contra un servidor SMTP, y hoy vamos a hacerlo contra un servidor web, concretamente contra un servidor web bajo Apache y otro bajo IIS, aunque el modo de operar es el mismo y muy sencillo.

Simplemente conectamos al servidor/host vía TELNET a través del puerto 80:

$ telnet www.apache.org 80
Trying 192.87.106.226...
Connected to www.apache.org.
Escape character is '^]'.

Ya estamos dentro, lo que es una buena señal, ahora vamos a lanzar una petición HTTP (HTTP/1.0, HTTP/1.1) en la que solicitamos solamente las cabeceras (HEAD) de la misma. Si quisieramos solicitar el documento completo en vez de HEAD utilizaríamos GET.

Nota: Hay que presionar ENTER dos veces tras escribir la petición HEAD/GET:

Ejemplo de un servidor Apache con respuesta correcta:

$ telnet www.apache.org 80
Trying 192.87.106.226...
Connected to www.apache.org.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Fri, 02 Oct 2009 09:26:01 GMT
Server: Apache/2.2.12 (Unix) mod_fcgid/2.3.2-dev
Last-Modified: Mon, 03 Aug 2009 13:41:54 GMT
ETag: "700a74-4e05-4703ceed30c80"
Accept-Ranges: bytes
Content-Length: 19973
Cache-Control: max-age=86400
Expires: Sat, 03 Oct 2009 09:26:01 GMT
Vary: Accept-Encoding
Connection: close
Content-Type: text/html

Ejemplo de un servidor IIS con respuesta correcta:

$ telnet www.microsoft.com 80
Trying 207.46.192.254...
Connected to lb1.www.ms.akadns.net.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 1020
Content-Type: text/html
Last-Modified: Mon, 16 Mar 2009 20:35:26 GMT
Accept-Ranges: bytes
ETag: "67991fbd76a6c91:0"
Server: Microsoft-IIS/7.5
P3P: CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"
X-Powered-By: ASP.NET
Date: Fri, 02 Oct 2009 09:27:36 GMT
Connection: keep-alive

Verificar funcionamiento correo SMTP vía TELNET


Algo extremadamente útil y que supongo la mayoría conoceréis (esto va para los que no lo conozcan…) es poder chequear de forma rápida y sencilla si un servidor de correo SMTP está funcionando de forma correcta o no.
Normalmente un usuario corriente configuraría la cuenta de correo en su cliente, como por ejemplo Outlook o Thunderbird, una pérdida de tiempo que podemos evitar si utilizamos TELNET para hacer un test de conexión o envío de correo contra ese SMTP.
A continuación podéis ver el modo de establecer esta conexión y los pasos para enviar el correo:

En primera instancia conectamos vía TELNET al servidor SMTP por el puerto 25:

# telnet xx.xx.xx.xx 25
Trying xx.xx.xx.xx...
Connected to xxx.xxxxxxx (xx.xx.xx.xx).
Escape character is '^]'.
220 xxxxx.xxxxxxx.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 1 Oct 2009 23:12:13 +0200

Como podéis apreciar, el primer paso lo hemos pasado con éxito, hemos podido acceder al servidor SMTP. Ahora vamos a decir al servidor SMTP quienes somos, hay que identificarse (normalmente nos identificamos con el nombre de nuestro PC, por ejemplo):

helo alex.portatil

Y el servidor nos responde correctamente:

250 xxxx.xxxxxxxxx.com Hello xxxx.xxxxxxx [xx.xx.xx.xx], pleased to meet you

Ya estamos en disposición de enviar el correo, primero decimos desde que cuenta vamos a enviarlo:

mail from: <micuenta@midominio.com>

Si recibimos una respuesta 250 OK todo va bien:

250 2.1.0 <micuenta@midominio.com>....Sender OK

Ahora toca poner la cuenta a la que vamos a enviar:

 rcpt to: <destino@sudominio.com>

Y si la respuesta sigue siendo 250, todo correcto:

  250 2.1.5 destino@sudominio.com

Lo siguiente será el cuerpo del mensaje (data), escribimos data y presionamos enter:

data

Escribiremos el cuerpo del correo, para acabar Enter + . + Enter (.)
Tened en cuenta que dentro del “data” podemos especificar el asunto del correo, el nombre del remitente, etc:

subject: Asunto del correo
to: destino@sudominio.com
esto es una prueba

Ya podemos salir del Telnet y el correo se enviará al destino indicado:

quit

La secuencia completa:

# telnet xx.xx.xx.xx 25
Trying xx.xx.xx.xx...
Connected to xxx.xxxxxxx (xx.xx.xx.xx).
Escape character is '^]'.
220 xxxxx.xxxxxxx.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 1 Oct 2009 23:12:13 +0200
helo alex.portatil
250 xxxx.xxxxxxxxx.com Hello xxxx.xxxxxxx [xx.xx.xx.xx], pleased to meet you
mail from: <micuenta@midominio.com>
250 2.1.0 <micuenta@midominio.com>....Sender OK
rcpt to: <destino@sudominio.com>
250 2.1.5 destino@sudominio.com
data
Esto es un mail de prueba

.
quit

Nota: Si necesitáis probar una cuenta con autenticación, tendréis que usar el método SMTP AUTH, lo explicaré otro día en profundidad, aunque si buscáis en google encontraréis rápido cómo hacerlo (SMTP AUTH, SMTP Authentication Telnet).

Deshabilitar VRFY en Postfix


Una petición VRFY consulta al un determinado servidor de correo si una dirección de correo existe o no. Básicamente cuando conectamos vía telnet al puerto de un servidor de correo podemos lanzarle una petición y ver si en dicho servidor existe una cuenta de correo.

Si queremos, por seguridad deshabilitar esta opción en postfix, añadiremos la siguiente línea al fichero de configuración, normalmente /etc/postfix/main.cf

disable_vrfy_command = yes

De este modo evitamos que por telnet, cualquiera con el comando VRFY pueda verificar si una dirección de correo/usuario existe.

Ejemplo:

# telnet test.com 25
Trying 65.233.23.33...
Connected to test.com (65.233.23.33).
Escape character is '^]'.
220 test2.com ESMTP SMTP Ready; Sun, 19 Ene 2009 14:32:19 GMT
vrfy alex@test.com
252 2.5.2 Cannot VRFY user; try RCPT to attempt delivery (or try finger)
expn root
502 5.7.0 Sorry, we do not allow this operation
quit
221 2.0.0 test2.com closing connection
Connection closed by foreign host.

Gracias Jacob y David ;)