jeudi 2 novembre 2017

Test de connexion de port sous Linux : Arrêtez d’utiliser TelNet

Lorsque l’on veut tester une connexion sur un port d’un hôte distant, le premier réflexe du SysAdmin est de faire un “telnet” dessus.

Telnet, pour Terminal Network ou Telecommunication Network est un protocole de communication TCP/IP permettant de communiquer de façon bi-directionnel avec un serveur distant. Son problème, c’est qu’il n’est absolument pas sécurisé, toutes les informations y transitent en clair. Du coup des protocoles chiffrés comme SSH ont vu le jour pour remplacer TelNet. Il n’est donc pas rare que TelNet ne soit pas installé sur des serveurs d’entreprises.

“Oui mais comment je fais moi pour tester mes ouvertures de flux, si je ne peux pas utiliser TelNet ?”
Les systèmes d’exploitation basés sur Linux utilisent des fichiers spéciaux pour accéder aux périphériques (oui, sur les système d’exploitation GNU/Linux, tout est fichier). De plus l’interpréteur de commande Bash, propose des alias de fichiers spéciaux /dev/tcp/ et le répertoire /dev/udp/ qui correspondent réciproquement aux périphériques communiquant en TCP et UDP.
Ainsi, depuis l’interpréteur de commande Bash, si je veux depuis ma machine foo tester le port 80/tcp de ma machine bar, il me suffit de tester d’écrire dans le fichier spécial /dev/tcp/bar/80, et de me faire un retour si l’opération a réussi ou si elle a échoué.

user@foo: echo > /dev/tcp/bar/80 && echo ‘up’ || echo ‘down’

Pour des questions pratiques, il peut même être utile d’écrire une fonction à ajouter dans son fichier $HOME/.bashrc :

function test_port() {

    DATEHEURE=$(date +%Y-%m-%d\ %H:%M:%S)
    TSTPORT=$((echo > /dev/tcp/$1/$2) 2>&1)

    if [ $? -eq 0 ]; then

        echo "$DATEHEURE: The port $2 on host $1 is OPEN."
        return 0

    else

        STATUS=$(echo ${TSTPORT} | awk -F ": " '{print $5}')
        echo "$DATEHEURE: The port $2 on host $1 is not reachable: ${STATUS}."
        return 1

    fi
}

Une fois le fichier $HOME/.bashrc rechargé, la fonction peut être utilisée.

user@foo: test_port bar 80
2017-09-28 09:55:45: The port 80 on host bar is OPEN.
user@foo: test_port bare 80
2017-09-28 09:55:55: The port 80 on host bare is not reachable: No route to host.
user@foo: test_port bar 42
2017-09-28 09:56:05: The port 42 on host bar is not reachable: Connection refused.

Voilà, chers amis Sysadmin, vous pouvez désormais vous passer de TelNet.

A bientôt pour d’autres astuces...

Aucun commentaire:

Enregistrer un commentaire