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