GNU/Linux >> Tutoriales Linux >  >> Linux

Prueba de servicios de red con Netcat

Advertencia: El creador del software de Netcat no ha actualizado el software desde 2006. Por lo tanto, Rackspace Technology no garantiza que la calidad de Netcat satisfaga sus expectativas.

Usando Netcat

Si su servicio de red no funciona correctamente pero sabe que el servicio está escuchando un puerto de red, puede verificar la conexión del programa para solucionar el problema.

Utilice el comando Netcat, nc , para acceder al servicio. Si está ejecutando una distribución basada en Red Hat® y no tiene nc instalado, escriba el siguiente comando en la línea de comando:

$ sudo yum install nc`

Para una distribución basada en Debian®, escriba el siguiente comando en la línea de comando:

$ sudo apt-get install Netcat`

Prueba básica

Ejecute una prueba simple para verificar que el puerto acepta conexiones.

Escribe nc en la línea de comando seguido de -vz opción con su dirección IP y puerto:

$ nc -vz IP_address port

La dirección IP debe ser aquella en la que el servicio recibe conexiones.

Los siguientes ejemplos muestran los posibles mensajes de salida:

La conexión tiene éxito

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

La conexión es rechazada

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

No hay respuesta a la solicitud de conexión

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

Conexión rechazada

El servicio no se está ejecutando o un firewall está rechazando la conexión. Verifique el estado del proceso ejecutando ps en la línea de comando. Consulte Comprobación de los servicios en ejecución en Linux para obtener más opciones.

Nota: Si su servicio se está ejecutando, su firewall podría rechazar la conexión. Lea la conexión agotada sección para obtener instrucciones sobre la resolución de problemas del cortafuegos.

Se agotó el tiempo de conexión

Se agotó el tiempo de espera de una conexión La respuesta indica que su conexión no funciona, lo que podría significar que su firewall está bloqueando el puerto. Pruebe el estado de la conexión agregando una regla que acepte conexiones en el puerto requerido.

El siguiente ejemplo inserta una regla en la línea 1 de la cadena de entrada que acepta todas las conexiones TCP en el puerto 80 (HTTP). Utilice esta regla cuando pruebe un servidor web como Apache®.

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

Las tablas de IP reflejan instantáneamente cualquier cambio realizado. Repita la prueba con nc para ver si hay algún cambio en la respuesta.

Si desea eliminar la regla que ha agregado, puede usar -D opción combinada con la posición de la regla en la cadena. El ejemplo anterior agregó una regla en la línea 1, la parte superior de la cadena. El siguiente ejemplo muestra cómo eliminarlo.

$ sudo /sbin/iptables -D INPUT 1

Puede comprobar la configuración actual de su cortafuegos en cualquier momento ejecutando el siguiente comando en la línea de comandos:

$ sudo /sbin/iptables -L -v

Conexión exitosa

Si la conexión inicial tiene éxito, Netcat puede conectarse al servicio. Mire la conexión con más detalle.

Primero, use el -vt opción para ver si el servicio puede responder a consultas básicas de red:

$ nc -vt IP Address Port

Si puede enviar comandos al demonio de servicio y recibir respuestas, eso indica que se puede acceder al programa y que su problema puede deberse a la configuración de conexión del cliente.

Después de conectarse, pruebe el servicio para obtener una respuesta. Puede probar el servicio enviando un GET solicitud a un servidor web, o algún otro dato apropiado para solicitar una respuesta al servidor.

Cerrando la conexión

Puede finalizar la conexión presionando Ctrl-C o escriba el comando de salida específico del servicio.

Por ejemplo, puede cerrar una conexión a un protocolo de transferencia de archivos, FTP, servidor con QUIT comando:

$ 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.

Comandos rechazados

Supongamos que nc informa el éxito pero no le permite enviar ningún comando, o recibe una respuesta del demonio de servicio informando que el servicio no está disponible. En ese caso, es posible que tenga envoltorios de protocolo de control de transmisión, envoltorios TCP , proporcionando control de acceso.

Un servicio FTP bloqueado por envoltorios TCP podría parecerse al siguiente ejemplo:

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

Los programas que son compatibles con contenedores TCP se compilan con libwrap . Para verificar si un programa puede usar TCPwrappers, use el siguiente comando:

$ ldd /path/to/binary | grep libwrap

El siguiente ejemplo verifica el vsftpd programa para el libwrap archivo de biblioteca compartida.

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

Si el programa no es compatible con contenedores TCP, el grep anterior el comando no devuelve nada.

Comprobación de registros

Una conexión bloqueada produce una entrada de registro. Consulte los registros del programa para ver si hay mensajes relevantes.

En el vsftpd registros, que se encuentran en /var/log/vsftpd.log , una conexión bloqueada debido a contenedores tcp se parece al siguiente ejemplo:

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

hosts.deny

El /etc/hosts.deny El archivo establece la definición de conexiones bloqueadas. Si tiene problemas para ver una entrada para su servicio en el archivo, use grep para buscarlo.

Busque en el archivo el nombre del programa ejecutando el siguiente comando:

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

Intente comentar cualquier línea ofensiva usando un hash (#). Los cambios en este archivo surten efecto automáticamente; no es necesario que reinicie ningún servicio.

Tenga en cuenta que los envoltorios TCP permiten una conexión de forma predeterminada, por lo que si es la causa del problema, debe haber una entrada en /etc/hosts.deny para el servicio. Puede cambiar el nombre del archivo /etc/hosts.deny para eliminar temporalmente todas sus reglas de denegación. Por ejemplo, ejecute sudo mv /etc/hosts.deny /etc/hosts.deny.old . Tenga en cuenta que este comando afecta a todas las aplicaciones que utilizan contenedores TCP. No olvide volver a cambiarlo después de terminar sus pruebas, si es necesario.

Investigación adicional

Si completó todas las pruebas de este artículo sin identificar ningún problema, es probable que el servicio funcione normalmente. El siguiente paso es probar la conectividad con el servidor usando ping y traceroute utilidades.


Linux
  1. Introducción a los cortafuegos de Linux

  2. Solucione los problemas de su red con tcpdump

  3. Enumerar una nueva red con Nmap

  4. Prueba de conexiones SSL con SSLyze, Nmap u OpenSSL

  5. ¿Puedo probar mi propia red?

Listado de servicios de Linux con Systemctl

Comando Netcat (nc) con ejemplos

Análisis de tráfico de red con tcpdump

Servicios de red

Servicios y protocolos de red

Network Manager en Linux con ejemplos