Salut Telnet! Et pour l'instant. Commande OpenSSL s_client pour les connexions chiffrées



Image : JanBaby, via Pixabay CC0



L'utilitaire de réseau telnet est un mot à la mode . Il a été à une époque très activement utilisé par l'écrasante majorité des administrateurs système et autres adeptes de l'administration de serveurs à distance. L'utilitaire vous permet d'accéder aux ports d'un hôte distant, de suivre la procédure d'autorisation et d'exécuter des commandes sur cette machine.



Mais le protocole telnet n'utilise pas de cryptage. Dans les réalités d'aujourd'hui, sacrifier la sécurité est un luxe inabordable. Cependant, telnet peut effectuer un certain nombre de tâches avec plus ou moins de succès: test du réseau, vérification des ports et interaction avec les appareils et les routeurs IoT. 



Il semblerait que l'utilitaire puisse être facilement utilisé comme une version avancée de ping. En elle-même, la commande ping, au mieux, ne vérifie que la disponibilité de l'hôte (parfois cette commande ne fonctionnera pas du tout, par exemple en raison de restrictions de politique d'accès). Mais la commande telnet vérifie non seulement si le port est ouvert, mais peut également communiquer avec les services réseau via ce port. Mais avec le temps, nous serons de plus en plus confrontés à la nécessité d'utiliser une connexion cryptée, où telnet sera à nouveau impuissant.



OpenSSL et la commande s_client



Donc, dans la plupart des cas, j'utilise la commande s_client de la bibliothèque OpenSSL au lieu de telnet . La commande s_client exécute les fonctions d'un client SSL / TLS pour se connecter à un hôte distant avec divers paramètres - clé de chiffrement, type de prise de contact, protocole, etc. La commande vous permet également de vérifier si la session est en cours de reprise.



Installation d'OpenSSL



Si la bibliothèque OpenSSL n'est pas encore installée sur votre système d'exploitation, elle peut être installée à l'aide du gestionnaire de packages:



$ sudo dnf install openssl

 Debian        :

$ sudo apt install openssl

       :

$ openssl version

OpenSSL x.y.z FIPS

      
      





Contrôle d'accès au port



Voici comment fonctionne la commande telnet pour vérifier l'accès au port 25:



$ telnet mail.example.com 25

Trying 98.76.54.32...

Connected to example.com.

Escape character is '^]'.
      
      





Dans l'exemple ci-dessus, nous avons ouvert une session interactive avec un certain serveur de messagerie écoutant sur le port 25. Si nous y avons accès, nous pouvons échanger des messages avec lui. Si le port 25 n'est pas disponible, la connexion ne sera pas établie. 



Voyons maintenant comment fonctionne une commande similaire d'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)

      
      





Comme vous pouvez le voir, il n'y a pas eu d'envoi de données sur le certificat SSL, donc la connexion a été interrompue, il n'a pas été possible d'ouvrir une session. Pour établir une connexion cryptée sécurisée à l'aide du protocole HTTPS, vous devez accéder à un port spécial.



Ouverture d'une session interactive avec une connexion cryptée



Dans ce cas, les navigateurs et les serveurs Web communiquent de telle manière que le trafic dirigé vers le port 80 est effectivement redirigé vers le port 443, qui est réservé au trafic HTTPS. Sachant cela, vous pouvez avec n'importe quel service Web qui écoute sur le port 443.



Tout d'abord, connectons-nous au port en utilisant SSL. Nous utilisons l'option -showcerts et le certificat SSL sera imprimé sur votre 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
      
      





Nous avons pu ouvrir une session interactive. Jusqu'à ce qu'il se ferme, nous pouvons envoyer des messages HTTP au serveur:



[...]

GET / HTTP/1.1

HOST: example.com

      
      





Appuyez deux fois sur la touche Retour (pour MacOS) ou ENTRÉE (pour Windows), et nous recevrons une réponse du serveur sous la forme 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>
      
      





Serveur de courrier



La commande s_client peut être utilisée pour tester une connexion chiffrée à un serveur de messagerie. Pour que cela fonctionne, nous avons besoin d'un nom d'utilisateur et d'un mot de passe (dans mon cas, pour un utilisateur de test) encodés en Base64.



Vous pouvez les encoder, par exemple, comme ceci:



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

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

      
      





Si tout se passe bien, vous pouvez passer à l'étape suivante - vous connecter au serveur de messagerie via SSL. Le port 587 est couramment utilisé:



$ 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

      
      





J'ai entré l'adresse e-mail admin@example.com, que j'attends de recevoir un message test du serveur de messagerie.



Risque injustifié



Certaines personnes utilisent encore telnet, mais ce n'est plus l'outil indispensable qu'il était autrefois. Il est désormais classé comme un package «hérité» sur de nombreux systèmes. Certains administrateurs système se demandent pourquoi il est exclu de l'installation par défaut. Telnet perd progressivement de sa pertinence. C'est un processus objectif. 



La sécurité du réseau est vitale pour la plupart des systèmes, il vaut donc la peine de se familiariser avec les outils appropriés. Il est important qu'ils soient capables de travailler avec des connexions sécurisées. Ainsi, lors des tests ou du dépannage, vous n'avez pas à désactiver la protection du système et la sécurité des risques.






Les serveurs cloud de Macleod sont rapides et sécurisés.



Inscrivez-vous en utilisant le lien ci-dessus ou en cliquant sur la bannière et bénéficiez d'une remise de 10% pour le premier mois de location d'un serveur de toute configuration!






All Articles