GNU/Linux >> Tutoriels Linux >  >> Linux

Tester les services réseau avec Netcat

Avertissement : Le créateur du logiciel Netcat n'a pas mis à jour le logiciel depuis 2006. Par conséquent, Rackspace Technology ne garantit pas que la qualité de Netcat répondra à vos attentes.

Utiliser Netcat

Si votre service réseau fonctionne mal mais que vous savez que le service écoute un port réseau, vous pouvez vérifier la connexion du programme pour résoudre le problème.

Utilisez la commande Netcat, nc , pour accéder au service. Si vous exécutez une distribution basée sur Red Hat® et que vous n'avez pas nc installé, tapez la commande suivante sur la ligne de commande :

$ sudo yum install nc`

Pour une distribution basée sur Debian®, saisissez la commande suivante sur la ligne de commande :

$ sudo apt-get install Netcat`

Test de base

Exécutez un test simple pour vérifier que le port accepte les connexions.

Tapez nc sur la ligne de commande suivi du -vz option avec votre adresse IP et votre port :

$ nc -vz IP_address port

L'adresse IP doit être celle sur laquelle le service reçoit les connexions.

Les exemples suivants montrent les messages de sortie possibles :

La connexion réussit

$ nc -vz 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!

La connexion est refusée

$ nc -vz 203.0.113.96 80
nc: connect to 203.0.113.96 port 80 (tcp) failed: Connection refused

Il n'y a pas de réponse à la demande de connexion

$ nc -vz 203.0.113.96 80
nc: connect to 203.0.113.96 port 80 (tcp) failed: Connection timed out

Connexion refusée

Le service ne fonctionne pas ou un pare-feu rejette la connexion. Vérifiez l'état du processus en exécutant ps sur la ligne de commande. Voir Vérification des services en cours d'exécution sur Linux pour plus d'options.

Remarque : Si votre service est en cours d'exécution, votre pare-feu peut rejeter la connexion. Lire le délai de connexion expiré section pour obtenir des instructions sur le dépannage du pare-feu.

Expiration du délai de connexion

Une connexion a expiré La réponse indique que votre connexion ne fonctionne pas, ce qui peut signifier que votre pare-feu bloque le port. Testez l'état de la connexion en ajoutant une règle qui accepte les connexions sur le port requis.

L'exemple suivant insère une règle sur la ligne 1 de la chaîne d'entrée qui accepte toutes les connexions TCP sur le port 80 (HTTP). Utilisez cette règle lors du test d'un serveur Web tel qu'Apache®.

$ sudo /sbin/iptables -I INPUT 1 -p tcp --dport http -j ACCEPT

Les tables IP reflètent instantanément toutes les modifications apportées. Refaire le test avec nc pour voir s'il y a un changement dans la réponse.

Si vous souhaitez supprimer la règle que vous avez ajoutée, vous pouvez utiliser le -D option combinée avec la position de la règle dans la chaîne. L'exemple précédent a ajouté une règle à la ligne 1, le sommet de la chaîne. L'exemple suivant montre comment le supprimer.

$ sudo /sbin/iptables -D INPUT 1

Vous pouvez vérifier à tout moment la configuration actuelle de votre pare-feu en exécutant la commande suivante sur la ligne de commande :

$ sudo /sbin/iptables -L -v

Connexion réussie

Si la connexion initiale réussit, Netcat peut se connecter au service. Regardez la connexion plus en détail.

Tout d'abord, utilisez le -vt option pour voir si le service peut répondre aux requêtes réseau de base :

$ nc -vt IP Address Port

Si vous pouvez envoyer des commandes au service-daemon et recevoir des réponses, cela indique que le programme est accessible et que votre problème peut être dû à la configuration de la connexion du client.

Une fois connecté, testez le service pour obtenir une réponse. Vous pouvez tester le service en envoyant un GET demande à un serveur Web, ou d'autres données appropriées pour inviter le serveur à répondre.

Fermer la connexion

Vous pouvez mettre fin à la connexion en appuyant sur Ctrl-C ou tapez la commande de sortie spécifique au service.

Par exemple, vous pouvez fermer une connexion à un protocole de transfert de fichiers, FTP, serveur avec le QUIT commande :

$ nc -vt 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!
220 (vsFTPd 2.0.5)
$ QUIT
221 Goodbye.

Commandes rejetées

Supposons nc rapporte le succès mais ne vous permet pas d'envoyer des commandes, ou vous obtenez une réponse du service-daemon signalant que le service n'est pas disponible. Dans ce cas, vous pourriez avoir des wrappers de protocole de contrôle de transmission, wrappers TCP , assurant le contrôle d'accès.

Un service FTP bloqué par des enveloppeurs TCP pourrait ressembler à l'exemple suivant :

$ nc -vt 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!
421 Service not available.

Les programmes compatibles avec les wrappers TCP sont compilés avec libwrap . Pour vérifier si un programme peut utiliser TCPwrappers, utilisez la commande suivante :

$ ldd /path/to/binary | grep libwrap

L'exemple suivant vérifie le vsftpd programme pour libwrap fichier de bibliothèque partagée.

ldd /usr/sbin/vsftpd | grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f62c734a000)

Si le programme n'est pas compatible avec les wrappers TCP, le précédent grep la commande ne renvoie rien.

Vérification des journaux

Une connexion bloquée produit une entrée de journal. Vérifiez les journaux du programme pour les messages pertinents.

Dans le vsftpd journaux, trouvés dans /var/log/vsftpd.log , une connexion bloquée en raison d'encapsuleurs TCP ressemble à l'exemple suivant :

Tue Jun  7 16:14:21 2011 [pid 28599] CONNECT: Client "203.0.113.43", "Connection refused: tcp_wrappers denial."

hosts.deny

Le /etc/hosts.deny Le fichier établit la définition des connexions bloquées. Si vous avez du mal à voir une entrée pour votre service dans le fichier, utilisez grep pour le rechercher.

Recherchez le nom du programme dans le fichier en exécutant la commande suivante :

$ sudo grep "vsftpd" /etc/hosts.deny
vsftpd : ALL

Essayez de commenter toutes les lignes incriminées en utilisant un dièse (#). Les modifications apportées à ce fichier prennent effet automatiquement :vous n'avez pas besoin de redémarrer les services.

Notez que les wrappers TCP autorisent une connexion par défaut, donc si c'est la cause du problème, il doit y avoir une entrée dans /etc/hosts.deny pour le service. Vous pouvez renommer le fichier /etc/hosts.deny pour supprimer temporairement toutes vos règles de refus. Par exemple, exécutez sudo mv /etc/hosts.deny /etc/hosts.deny.old . Notez que cette commande affecte toutes les applications qui utilisent des wrappers TCP. N'oubliez pas de le remettre en place une fois vos tests terminés, si nécessaire.

Enquête complémentaire

Si vous avez effectué tous les tests de cet article sans identifier de problème, le service fonctionne probablement normalement. L'étape suivante consiste à tester la connectivité au serveur en utilisant ping et traceroute utilitaires.


Linux
  1. Démarrer avec NetworkManager sous Linux

  2. Gérer les connexions réseau à partir de la ligne de commande Linux avec nmcli

  3. Premiers pas avec les pare-feux Linux

  4. Configuration de l'interface réseau avec une adresse IP statique sur RHEL 7

  5. Démarrage de la connexion réseau à partir de la récupération Ubuntu ?

Liste des services Linux avec Systemctl

Commande Netcat (nc) avec exemples

Analyse du trafic réseau avec tcpdump

Services réseau

Services et protocoles réseau

Network Manager sur Linux avec des exemples