Pregunta ¿Comprobar si el puerto está abierto o cerrado en un servidor Linux?


¿Cómo puedo verificar si un puerto está escuchando en un servidor Linux?


170
2017-09-07 17:24


origen


No está muy claro lo que estás preguntando. ¿Qué quieres decir con "abrir"? ¿Quieres decir que algún servidor está escuchando en ese puerto? ¿O quiere decir que está permitido por el firewall del sistema? ¿O que? - David Schwartz
Creo que se está bloqueando un puerto en mi servidor y quiero desbloquearlo / abrirlo nuevamente. - James Anderson
netstat -an | grep PORTNUMBER | grep -i listen Si la salida está vacía, el puerto no está en uso. - automatix


Respuestas:


Puede verificar si un proceso escucha en un puerto TCP o UDP con netstat -tuplen.

Para verificar si se puede acceder a algunos puertos desde el exterior (esto es probablemente lo que quiere) puede usar un escáner de puertos como Nmap desde otro sistema. Ejecutar Nmap en el mismo host que desea revisar es bastante inútil para su propósito.


158
2017-09-07 17:31



GNU netstat conoce los parámetros -t, -u, -p, -l, -ey -n. Gracias al analizador de opciones se puede expresar como -tuplen. linux.die.net/man/8/netstat - joschi
También el telnet Generalmente, el comando solo admite TCP, por lo que no tendrá suerte si el servicio que desea verificar se ejecuta en otro protocolo. - joschi
Sí, estaba usando ventanas de ahí la confusión. - Dexter
nc es (mejor) alternativa a telnet. Es compatible con UDP también. - Tsvetomir Dimitrov
Úsalo con sudo: sudo netstat -tuplen. Esto le dará a usted los procesos que le pertenecen no solo a usted, sino también a otros, e imprimirá detalles adicionales (como PID / Nombre del programa) si aún no se muestran como usuarios no root. - John Red


La forma más rápida de probar si un puerto TCP está abierto (incluidos los cortafuegos de hardware que pueda tener), es escribir desde una computadora remota (por ejemplo, su escritorio):

telnet myserver.com 80

Que intentará abrir una conexión al puerto 80 en ese servidor. Si obtiene un tiempo de espera o denegación, el puerto no está abierto :)


83
2017-09-07 17:33



dice que no reconoce "telnet" como un comando ... - James Anderson
"yum install telnet" para instalar el paquete del cliente telnet. - cjc
Dice: telnet: conectarse a la dirección 82.165.148.224: conexión rechazada - James Anderson
Escrito arriba: if you get a time out or deny, the port is not open - Industrial
¿Qué pasa si no tienes permisos para instalar telnet? ¿Hay otra herramienta estándar? - KC Baltz


De acuerdo, en resumen, tiene un servidor en el que puede iniciar sesión. Quieres ver si algo está escuchando en algún puerto. Como root, ejecuta:

netstat -nlp

Esto mostrará una lista de los procesos que escuchan en los puertos TCP y UDP. Puede escanearlo (o grep) para el proceso en el que está interesado y / o los números de puerto que espera ver.

Si el proceso que espera no está allí, debe iniciar ese proceso y volver a verificar netstat. Si el proceso está ahí, pero está escuchando en una interfaz y puerto que no esperaba, entonces hay un problema de configuración (por ejemplo, podría estar escuchando, pero solo en la interfaz de bucle de retorno, por lo que vería 127.0.0.1:3306 y no hay otras líneas para el puerto 3306, en el caso de la configuración predeterminada para MySQL).

Si el proceso está activo y está escuchando en el puerto que espera, puede intentar ejecutar un "telnet" para ese puerto desde su Macbook en su oficina / hogar, por ejemplo,

 telnet xxxxxxxxxxxx.co.uk 443

Eso probará si (asumiendo puertos estándar) que hay un servidor web configurado para SSL. Tenga en cuenta que esta prueba que utiliza telnet solo funcionará si el proceso está escuchando en un puerto TCP. Si se trata de un puerto UDP, también puede probar con cualquier cliente que vaya a utilizar para conectarse. (Veo que usaste el puerto 224. Esto es masqdialer, y no tengo idea de qué es eso).

Si el servicio está ahí, pero no puede acceder a él externamente, entonces hay un firewall que lo bloquea. En ese caso, ejecute:

 iptables -L -n

Esto mostrará todas las reglas de firewall definidas en su sistema. Puede publicar eso, pero, en general, si no está permitiendo todo en la cadena de ENTRADAS, probablemente deba permitir explícitamente el tráfico en el puerto en cuestión:

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

O algo por el estilo. No ejecute los comandos de su cortafuegos a ciegas basándose en lo que algún extraño le haya dicho en Internet. Considera lo que estás haciendo.

Si su firewall en la caja permite el tráfico que desea, entonces su empresa de alojamiento puede estar ejecutando un firewall (por ejemplo, solo permiten SSH (22 / tcp), HTTP (80 / tcp) y HTTPS (443 / tcp) y negando todo el tráfico entrante). En este caso, deberá abrir un ticket del servicio de asistencia con ellos para resolver este problema, aunque supongo que puede haber algo en su cPanel que lo permita.


23
2017-09-07 20:01



¿Podría por favor agregar cómo deshacer el comando iptables -I? ¡¡Gracias!! - Evgeny
"iptables -D" seguido de lo que tengas después de "-I" en el comando original. Básicamente, busque la documentación. - cjc


Yo uso el combo de netstaty lsof:

netstat -an | grep <portnumber>
lsof -i:<portnumber>

Para ver si el puerto se está utilizando, y qué se está utilizando.


8
2018-03-28 19:32



nada pide con o sin sudo - Dheeraj Thedijje
@DheerajThedijje - entonces ese puerto no está abierto - warren
Sí, no lo fue, lo tengo. - Dheeraj Thedijje


Si está conectado al sistema y puede ejecutar un comando como root, puede verificar la salida de iptables

iptables -L -vn

Esto mostrará una lista de las reglas del firewall y qué puertos están abiertos. ACCEPT y cualquier objetivo de puertos explícitamente cerrados REJECT.


7
2017-09-07 17:57



Y si tienes firewalld, es más sencillo. firewall-cmd --query-port=port/protocol, p.ej. firewall-cmd --query-port=80/tcp. - Agostino


lsof -i :ssh listará todos los procesos con el puerto ssh abierto, tanto las conexiones activas como las de escucha.


5
2018-01-25 21:45



Prefijo sudo Si no devuelve ninguna salida. - Elijah Lynn