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!