No está muy claro lo que estás preguntando. ¿Qué quieres decir con "abierto"? ¿Quiere 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 un puerto está siendo bloqueado en mi servidor y quiero desbloquearlo / abrirlo nuevamente.
James Anderson el
14
netstat -an | grep PORTNUMBER | grep -i listenSi la salida está vacía, el puerto no está en uso.
Automatix
Respuestas:
187
Puede verificar si un proceso escucha en un puerto TCP o UDP con netstat -tuplen.
Para verificar si algunos puertos son accesibles desde el exterior (esto es probablemente lo que desea), puede usar un escáner de puertos como Nmap de otro sistema. Ejecutar Nmap en el mismo host que desea verificar es bastante inútil para su propósito.
GNU netstat conoce los parámetros -t, -u, -p, -l, -e, y -n. Gracias al analizador de opciones se puede expresar como -tuplen. linux.die.net/man/8/netstat
joschi
3
Además, el telnetcomando generalmente solo admite TCP, por lo que no tiene suerte si el servicio que desea verificar se ejecuta en otro protocolo.
joschi
1
Sí, estaba usando Windows, de ahí la confusión.
Dexter
2
nc es (mejor) alternativa a telnet. También es compatible con UDP.
Tsvetomir Dimitrov
1
Utilizarlo con sudo: sudo netstat -tuplen. Esto le proporcionará procesos propiedad no solo de usted, sino también de otros, e imprimirá detalles adicionales (como PID / Nombre del programa) si aún no se muestran como usuarios no root.
John Red
102
La forma más rápida de probar si un puerto TCP está abierto (incluidos los firewall 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 tiene un tiempo de espera o lo niega, el puerto no está abierto :)
"yum install telnet" para instalar el paquete del cliente telnet.
cjc
8
Escrito arriba:if you get a time out or deny, the port is not open
Industrial
2
¿Qué pasa si no tienes permisos para instalar telnet? ¿Hay otra herramienta estándar?
KC Baltz
3
Intenté "telnet myhost 22" y obtuve un tiempo de espera. Pero puedo meterme en esa máquina. ?!
Torsten Bronger
30
OK, en resumen, tiene un servidor en el que puede iniciar sesión. Desea ver si algo está escuchando en algún puerto. Como root, ejecuta:
netstat -nlp
esto mostrará una lista de procesos que escuchan en los puertos TCP y UDP. Puede escanear (o grep) para el proceso que le interesa y / o los números de puerto que espera ver.
Si el proceso que espera no está allí, debe iniciar ese proceso y verificar netstat nuevamente. Si el proceso está allí, 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 invertido, 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" a ese puerto desde su Macbook en su oficina / hogar, por ejemplo,
telnet xxxxxxxxxxxx.co.uk 443
Eso probará si (suponiendo puertos estándar) que hay un servidor web configurado para SSL. Tenga en cuenta que esta prueba con telnet solo funcionará si el proceso está escuchando en un puerto TCP. Si se trata de un puerto UDP, también puede intentar con cualquier cliente que vaya a utilizar para conectarse a él. (Veo que usó el puerto 224. Esto es masqdialer, y no tengo idea de qué es eso).
Si el servicio está allí, 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 tal como están definidas en su sistema. Puede publicar eso, pero, en general, si no está permitiendo todo en la cadena INPUT, probablemente tendrá que 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 firewall a ciegas según lo que un 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 compañía de hosting puede estar ejecutando un firewall (por ejemplo, solo permiten SSH (22 / tcp), HTTP (80 / tcp) y HTTPS (443 / tcp) y negando todo otro 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.
netstat -an | grep PORTNUMBER | grep -i listen
Si la salida está vacía, el puerto no está en uso.Respuestas:
Puede verificar si un proceso escucha en un puerto TCP o UDP con
netstat -tuplen
.Para verificar si algunos puertos son accesibles desde el exterior (esto es probablemente lo que desea), puede usar un escáner de puertos como Nmap de otro sistema. Ejecutar Nmap en el mismo host que desea verificar es bastante inútil para su propósito.
fuente
-t
,-u
,-p
,-l
,-e
, y-n
. Gracias al analizador de opciones se puede expresar como-tuplen
. linux.die.net/man/8/netstattelnet
comando generalmente solo admite TCP, por lo que no tiene suerte si el servicio que desea verificar se ejecuta en otro protocolo.sudo netstat -tuplen
. Esto le proporcionará procesos propiedad no solo de usted, sino también de otros, e imprimirá detalles adicionales (como PID / Nombre del programa) si aún no se muestran como usuarios no root.La forma más rápida de probar si un puerto TCP está abierto (incluidos los firewall de hardware que pueda tener) es escribir desde una computadora remota (por ejemplo, su escritorio):
Que intentará abrir una conexión al puerto 80 en ese servidor. Si tiene un tiempo de espera o lo niega, el puerto no está abierto :)
fuente
if you get a time out or deny, the port is not open
OK, en resumen, tiene un servidor en el que puede iniciar sesión. Desea ver si algo está escuchando en algún puerto. Como root, ejecuta:
esto mostrará una lista de procesos que escuchan en los puertos TCP y UDP. Puede escanear (o grep) para el proceso que le interesa y / o los números de puerto que espera ver.
Si el proceso que espera no está allí, debe iniciar ese proceso y verificar netstat nuevamente. Si el proceso está allí, 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 invertido, 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" a ese puerto desde su Macbook en su oficina / hogar, por ejemplo,
Eso probará si (suponiendo puertos estándar) que hay un servidor web configurado para SSL. Tenga en cuenta que esta prueba con telnet solo funcionará si el proceso está escuchando en un puerto TCP. Si se trata de un puerto UDP, también puede intentar con cualquier cliente que vaya a utilizar para conectarse a él. (Veo que usó el puerto 224. Esto es masqdialer, y no tengo idea de qué es eso).
Si el servicio está allí, pero no puede acceder a él externamente, entonces hay un firewall que lo bloquea. En ese caso, ejecute:
Esto mostrará todas las reglas de firewall tal como están definidas en su sistema. Puede publicar eso, pero, en general, si no está permitiendo todo en la cadena INPUT, probablemente tendrá que permitir explícitamente el tráfico en el puerto en cuestión:
O algo por el estilo. No ejecute los comandos de su firewall a ciegas según lo que un 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 compañía de hosting puede estar ejecutando un firewall (por ejemplo, solo permiten SSH (22 / tcp), HTTP (80 / tcp) y HTTPS (443 / tcp) y negando todo otro 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.
fuente
Yo uso el combo de
netstat
ylsof
:Para ver si se está utilizando el puerto y qué lo está utilizando.
fuente
Si está conectado al sistema y puede ejecutar un comando como root, puede verificar la salida de iptables
esto enumerará las reglas del firewall y qué puertos son objetivo abierto
ACCEPT
y cualquier objetivo de puerto cerrado explícitamenteREJECT
.fuente
firewall-cmd --query-port=port/protocol
, por ejemplofirewall-cmd --query-port=80/tcp
.lsof -i :ssh
enumerará todos los procesos con el puerto ssh abierto, tanto las conexiones activas como las de escucha.fuente
sudo
si no devuelve ningún resultado.