¡Hola Telnet! Y por ahora. Comando s_client de OpenSSL para conexiones cifradas



Imagen : JanBaby, a través de Pixabay CC0



La utilidad de red telnet es una palabra de moda . En un momento fue utilizado de manera muy activa por la inmensa mayoría de los administradores de sistemas y otros fanáticos de la administración de servidores remotos. La utilidad le permite acceder a los puertos de un host remoto, pasar por el procedimiento de autorización y ejecutar comandos en esta máquina.



Pero el protocolo telnet no utiliza cifrado. En la realidad actual, sacrificar la seguridad es un lujo inasequible. Sin embargo, hay una serie de tareas que telnet puede realizar con diversos grados de éxito: pruebas de red, verificación de puertos e interacción con dispositivos y enrutadores de IoT. 



Parecería que la utilidad se puede utilizar fácilmente como una versión avanzada de ping. Por sí mismo, el comando ping, en el mejor de los casos, solo verifica la disponibilidad del host (a veces este comando no funcionará en absoluto, por ejemplo, debido a restricciones de la política de acceso). Pero el comando telnet no solo verifica si el puerto está abierto, sino que también puede comunicarse con los servicios de red a través de este puerto. Pero con el tiempo, nos enfrentaremos cada vez más a la necesidad de utilizar una conexión cifrada, donde Telnet volverá a ser impotente.



OpenSSL y el comando s_client



Entonces, en la mayoría de los casos, uso el comando s_client de la biblioteca OpenSSL en lugar de telnet . El comando s_client realiza las funciones de un cliente SSL / TLS para conectarse a un host remoto con varias configuraciones: clave de cifrado, tipo de protocolo de enlace, protocolo, etc. El comando también le permite verificar si la sesión se reanuda.



Instalación de OpenSSL



Si la biblioteca OpenSSL aún no está instalada en su sistema operativo, puede instalarla usando el administrador de paquetes:



$ sudo dnf install openssl

 Debian        :

$ sudo apt install openssl

       :

$ openssl version

OpenSSL x.y.z FIPS

      
      





Verificación de acceso al puerto



Así es como funciona el comando telnet para verificar el acceso al puerto 25:



$ telnet mail.example.com 25

Trying 98.76.54.32...

Connected to example.com.

Escape character is '^]'.
      
      





En el ejemplo anterior, abrimos una sesión interactiva con un determinado servidor de correo escuchando en el puerto 25. Si tenemos acceso a él, podemos intercambiar mensajes con él. Si el puerto 25 no está disponible, no se establecerá la conexión. 



Ahora veamos cómo funciona un comando similar de OpenSSL: 



$ openssl s_client -connect example.com:80

CONNECTED(00000003)

140306897352512:error:1408F10B:SSL [...]

no peer certificate available

No client certificate CA names sent

SSL handshake has read 5 bytes and written 309 bytes

Verification: OK

New, (NONE), Cipher is (NONE)

Secure Renegotiation IS NOT supported

Compression: NONE

Expansion: NONE

No ALPN negotiated

Early data was not sent

Verify return code: 0 (ok)

      
      





Como puede ver, no hubo envío de datos sobre el certificado SSL, por lo que se interrumpió la conexión, no fue posible abrir una sesión. Para establecer una conexión encriptada segura usando el protocolo HTTPS, necesita acceder a un puerto especial.



Abrir una sesión interactiva con una conexión encriptada



En este caso, los navegadores y los servidores web se comunican de tal manera que el tráfico dirigido al puerto 80 se redirige al puerto 443, que está reservado para el tráfico HTTPS. Sabiendo esto, puede



hacerlo con cualquier servicio web que escuche en el puerto 443. Primero, conectemos al puerto usando SSL. Usamos la opción -showcerts y el certificado SSL se imprimirá en su terminal:



$ openssl s_client -connect example.com:443 -showcerts

[...]

    0080 — 52 cd bd 95 3d 8a 1e 2d-3f 84 a0 e3 7a c0 8d 87   R...=..-?...z...

    0090 — 62 d0 ae d5 95 8d 82 11-01 bc 97 97 cd 8a 30 c1   b.............0.

    00a0 — 54 78 5c ad 62 5b 77 b9-a6 35 97 67 65 f5 9b 22   Tx\.b[w..5.ge..»

    00b0 — 18 8a 6a 94 a4 d9 7e 2f-f5 33 e8 8a b7 82 bd 94   ..j...~/.3......

    Start Time: 1619661100

    Timeout   : 7200 (sec)

    Verify return code: 0 (ok)

    Extended master secret: no

    Max Early Data: 0

-

read R BLOCK
      
      





Pudimos abrir una sesión interactiva. Hasta que cierre, podemos enviar mensajes HTTP al servidor:



[...]

GET / HTTP/1.1

HOST: example.com

      
      





Presione la tecla Retorno (para MacOS) o ENTER (para Windows) dos veces, y recibiremos una respuesta del servidor en el formulario example.com/index.html:



[...]

<body>

<div>

    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this

    domain in literature without prior coordination or asking for permission.</p>

    <p><a href="https://www.iana.org/domains/example">More information...</a></p>

</div>

</body>

</html>
      
      





Servidor de correo



El comando s_client se puede utilizar para probar una conexión cifrada a un servidor de correo. Para que esto funcione, necesitamos un nombre de usuario y una contraseña (en mi caso, para un usuario de prueba) codificados en Base64.



Puede codificarlos, por ejemplo, así:



$ perl -MMIME::Base64 -e 'print encode_base64(«username»);'

$ perl -MMIME::Base64 -e 'print encode_base64(«password»);'

      
      





Si todo va bien, puede continuar con el siguiente paso: conectarse al servidor de correo a través de SSL. El puerto 587 se usa comúnmente:



$ openssl s_client -starttls smtp \

-connect email.example.com:587

> ehlo example.com

> auth login

##paste your user base64 string here##

##paste your password base64 string here##

> mail from: noreply@example.com

> rcpt to: admin@example.com

> data

> Subject: Test 001

This is a test email.

.

> quit

      
      





Ingresé la dirección de correo electrónico admin@example.com, que espero recibir un mensaje de prueba del servidor de correo.



Riesgo injustificado



Algunas personas todavía usan telnet, pero ya no es la herramienta indispensable que alguna vez fue. Ahora se clasifica como un paquete "heredado" en muchos sistemas. Algunos administradores de sistemas se preguntan por qué se excluye de la instalación predeterminada. Telnet está perdiendo gradualmente su relevancia. Este es un proceso objetivo. 



La seguridad de la red es vital para la mayoría de los sistemas, por lo que vale la pena familiarizarse con las herramientas adecuadas. Es importante que sean capaces de trabajar con conexiones seguras. Por lo tanto, mientras realiza pruebas o soluciona problemas, no tiene que deshabilitar la protección del sistema y la seguridad de riesgo.






Los servidores en la nube de Macleod son rápidos y seguros.



Regístrese usando el enlace de arriba o haciendo clic en el banner y obtenga un 10% de descuento durante el primer mes de alquiler de un servidor de cualquier configuración.






All Articles