Vous recherchez telnet sur RHEL 8 ? Essayez nc



Telnet : Un protocole désuet mais encore utile

Telnet est un protocole réseau permettant l’accès distant à un ordinateur via une communication textuelle bidirectionnelle. Pour établir une telle communication, un serveur et un client Telnet sont indispensables.

Longtemps utilisé, Telnet a été un outil populaire sous Linux et Windows.

Cependant, la principale faille de Telnet, en particulier dans les systèmes modernes, réside dans son manque de sécurité. Toutes les données transmises via Telnet le sont en clair, sans chiffrement. Ainsi, toute personne ayant un accès au réseau et les outils nécessaires peut intercepter et lire ces informations. C’est pourquoi la plupart des distributions Linux actuelles n’incluent plus Telnet par défaut et déconseillent son utilisation.

L’arrivée du protocole SSH (Secure Shell), une alternative chiffrée à Telnet, a rendu l’utilisation de ce dernier obsolète. Toutefois, Telnet conserve un intérêt pour certains administrateurs et passionnés de technologie, notamment pour vérifier la connectivité des ports TCP distants.

En effet, avec la commande Telnet, il est simple de vérifier si un port TCP distant est à l’écoute et répond correctement. L’exemple ci-dessous montre comment vérifier si google.com est accessible en testant les connexions HTTP/HTTPS.

$ telnet google.com 80
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

$
$ telnet google.com 443
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
$

Un port TCP inaccessible ou fermé se comportera comme suit lors d’une tentative de connexion avec Telnet :

$ telnet google.com 22
Trying 142.250.193.174...
^C
$

Cette fonctionnalité facilite le diagnostic des problèmes de connectivité réseau, en complément des commandes ping, traceroute, tracepath, ou encore netstat.

Pour les utilisateurs de RHEL 8 (ou de versions plus anciennes de RHEL/CentOS), il existe une alternative plus performante : l’outil nc (ou Ncat ou Network Connector), qui offre de nombreuses options de diagnostic réseau. Nous allons détailler son installation et son utilisation sur RHEL8 et systèmes similaires.

nc : Qu’est-ce que c’est ?

nc (ou Ncat) est un utilitaire en ligne de commande polyvalent permettant de lire, écrire, rediriger et chiffrer des données sur un réseau. Développé initialement pour le projet nmap, de nombreuses implémentations de Netcat sont désormais disponibles. Il supporte les protocoles TCP et UDP sur IPv4 et IPv6 et offre des possibilités d’utilisation très vastes.

Voici quelques-unes des fonctionnalités clés de l’utilitaire nc :

  • Possibilité d’enchaîner les ncats
  • Redirection des ports TCP, UDP et SCTP vers d’autres destinations
  • Chiffrement des communications via SSL
  • Support des proxys via SOCKS4/5 ou HTTP (avec authentification)
  • Compatibilité multiplateforme, incluant Windows, Linux et macOS

Installation de nc

nc est inclus dans les dépôts par défaut des systèmes RHEL. Pour l’installer sur RHEL 7, exécutez simplement la commande suivante dans le terminal :

$ sudo yum install -y nc

Pour les systèmes RHEL 8, vous pouvez utiliser dnf :

$ sudo dnf install -y nc

Vérification de la connectivité TCP

Bien que nc offre de nombreuses fonctionnalités, son usage le plus courant est le dépannage réseau, en remplacement de Telnet.

nc permet de vérifier si un port TCP est accessible. Voici la syntaxe de la commande :

$ nc -vz <IP/DNS> <Port>

Par exemple, pour vérifier l’accessibilité de toptips.fr via HTTP ou HTTPS, on peut utiliser nc comme suit (le port 80 correspond à HTTP et le port 443 à HTTPS) :

$ nc -vz toptips.fr.com 80
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 104.26.11.88:80.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
$
$ nc -vz toptips.fr.com 443
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 104.26.10.88:443.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
$

De la même manière, un port inaccessible ou bloqué affichera un résultat similaire (plusieurs adresses IP sont testées car le nom DNS toptips.fr renvoie à plusieurs adresses) :

$ nc -vz toptips.fr.com 22
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connection to 172.67.70.213 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 104.26.11.88 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 104.26.10.88 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 2606:4700:20::681a:a58 failed: Network is unreachable.
Ncat: Trying next address...
Ncat: Connection to 2606:4700:20::681a:b58 failed: Network is unreachable.
Ncat: Trying next address...
Ncat: Network is unreachable.
$
$ dig toptips.fr.com +short
104.26.10.88
172.67.70.213
104.26.11.88
$

Vérification de la connectivité UDP

Alors que Telnet ne peut tester que les ports TCP, nc permet de vérifier la connectivité TCP et UDP.

nc peut envoyer des paquets UDP au lieu des paquets TCP par défaut en utilisant la commande :

$ nc -vzu <IP/DNS> <Port>

UDP étant un protocole sans session (contrairement à TCP), il n’est pas toujours possible de confirmer une connectivité UDP de bout en bout en se basant uniquement sur l’envoi de paquets UDP. En effet, sans réponse du processus d’écoute distant, nc ne peut pas déterminer si le paquet est arrivé à destination. Cependant, nc offre une alternative en lançant un écouteur UDP sur le serveur distant, sous réserve d’avoir un accès CLI.

Par exemple, pour vérifier la connectivité UDP entre deux hôtes Linux pour le DNS, on peut lancer un écouteur nc sur le port voulu du serveur:

$ sudo nc -ul <Port>

Pour le DNS, nous utilisons le port 53, ce qui donne la commande :

$ nc -ul 53

Côté client, lancez un autre processus nc qui envoie des paquets UDP au serveur :

$ nc -u <IP/DNS> <Port>

Dans notre exemple, la commande devient :

$ nc -u <IP/DNS> 53

Si aucun pare-feu ne bloque le trafic UDP sur le port 53, tout texte tapé et validé sur une machine devrait être visible sur l’autre, créant ainsi une sorte de chat bidirectionnel. Si ce n’est pas le cas, un pare-feu est probablement à l’origine du problème.

Ce modèle serveur-client de nc est idéal pour ces types de vérifications de connectivité simples. nc peut également écouter des paquets TCP sur un port donné :

$ sudo nc -l <Port>

Côté client, vous pouvez envoyer des paquets TCP pour vérifier la connexion :

$ nc <IP/DNS> <Port>

La méthode serveur/client nc n’est pas indispensable pour les connexions TCP (contrairement à UDP), car c’est un protocole orienté connexion qui fonctionne avec des accusés de réception. Un processus en écoute sur TCP répondra directement aux paquets TCP envoyés par nc.

Résumé

Cet article montre comment l’utilitaire nc remplace Telnet dans les systèmes Linux modernes pour vérifier la connectivité des ports, tout en offrant plus de possibilités pour diagnostiquer les problèmes réseau.

L’aide de nc est accessible via la commande nc -h :

$ nc -h
Ncat 7.70 ( https://nmap.org/ncat )
Usage: ncat [options] [hostname] [port]

Options taking a time assume seconds. Append 'ms' for milliseconds,
's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms).
  -4                         Use IPv4 only
  -6                         Use IPv6 only
  -U, --unixsock             Use Unix domain sockets only
  -C, --crlf                 Use CRLF for EOL sequence
  -c, --sh-exec <command>    Executes the given command via /bin/sh
  -e, --exec <command>       Executes the given command
      --lua-exec <filename>  Executes the given Lua script
  -g hop1[,hop2,...]         Loose source routing hop points (8 max)
  -G <n>                     Loose source routing hop pointer (4, 8, 12, ...)
  -m, --max-conns <n>        Maximum <n> simultaneous connections
  -h, --help                 Display this help screen
  -d, --delay <time>         Wait between read/writes
  -o, --output <filename>    Dump session data to a file
  -x, --hex-dump <filename>  Dump session data as hex to a file
  -i, --idle-timeout <time>  Idle read/write timeout
  -p, --source-port port     Specify source port to use
  -s, --source addr          Specify source address to use (doesn't affect -l)
  -l, --listen               Bind and listen for incoming connections
  -k, --keep-open            Accept multiple connections in listen mode
  -n, --nodns                Do not resolve hostnames via DNS
  -t, --telnet               Answer Telnet negotiations
  -u, --udp                  Use UDP instead of default TCP
      --sctp                 Use SCTP instead of default TCP
  -v, --verbose              Set verbosity level (can be used several times)
  -w, --wait <time>          Connect timeout
  -z                         Zero-I/O mode, report connection status only
      --append-output        Append rather than clobber specified output files
      --send-only            Only send data, ignoring received; quit on EOF
      --recv-only            Only receive data, never send anything
      --allow                Allow only given hosts to connect to Ncat
      --allowfile            A file of hosts allowed to connect to Ncat
      --deny                 Deny given hosts from connecting to Ncat
      --denyfile             A file of hosts denied from connecting to Ncat
      --broker               Enable Ncat's connection brokering mode
      --chat                 Start a simple Ncat chat server
      --proxy <addr[:port]>  Specify address of host to proxy through
      --proxy-type <type>    Specify proxy type ("http" or "socks4" or "socks5")
      --proxy-auth <auth>    Authenticate with HTTP or SOCKS proxy server
      --ssl                  Connect or listen with SSL
      --ssl-cert             Specify SSL certificate file (PEM) for listening
      --ssl-key              Specify SSL private key (PEM) for listening
      --ssl-verify           Verify trust and domain name of certificates
      --ssl-trustfile        PEM file containing trusted SSL certificates
      --ssl-ciphers          Cipherlist containing SSL ciphers to use
      --ssl-alpn             ALPN protocol list to use.
      --version              Display Ncat's version information and exit

See the ncat(1) manpage for full options, descriptions and usage examples
$

Pour des informations plus complètes sur la commande nc, référez-vous à sa page de manuel.

$ man nc