2 votos

¿Qué significa la salida de netstat?

Cuando escribo "sudo netstat -an", esto es parte de la salida que obtengo:

Proto Recv-Q Send-Q Dirección Local Dirección Externa Estado      
tcp        0      0 192.99.202.17:39922        23.82.16.66:29842           TIME_WAIT  

Estoy confundido acerca de lo que está diciendo la primera línea.

¿Está diciendo que un servidor desde 23.82.16.66 se está conectando a este servidor a través del puerto 29842, o del puerto 39922?

¿Cómo sé que es una conexión entrante desde esa IP, en lugar de una conexión saliente desde mi servidor a esa IP?

Estoy corriendo CENTOS 6.7, por si eso importa.

3voto

PJ Mahoney Puntos 889

¿Cómo sé si es una conexión entrante desde esa IP, en lugar de una conexión saliente desde mi servidor hacia esa IP?

La Dirección Local es la dirección de la máquina desde la cual estás ejecutando los comandos de NETSTAT, por lo que entender el estado de las conexiones TCP te ayudará a saber si es entrante o saliente desde una perspectiva de dirección local.

La Máquina de Estados Finitos TCP Simplificada

Estado: TIME-WAIT

Descripción del Estado: El dispositivo ha recibido un FIN del otro dispositivo y lo ha reconocido, y ha enviado su propio FIN y recibido un ACK por ello. Ya hemos terminado, excepto por esperar para asegurarnos de que el ACK sea recibido y prevenir posibles superposiciones con nuevas conexiones. (Ver el tema que describe la terminación de la conexión para más detalles sobre este estado.)

Evento y Transición: Expiración del Temporizador: Después de un período de espera designado, el dispositivo hace la transición al estado CERRADO.

<a href="http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm" rel="nofollow noreferrer">fuente</a>


TIME-WAIT

(ya sea servidor o cliente) representa la espera suficiente tiempo para asegurarse de que el TCP remoto ha recibido el acuse de recibo de su solicitud de terminación de conexión. [Según el RFC 793 una conexión puede permanecer en TIME-WAIT por un máximo de cuatro minutos conocidos como dos MSL (máximo tiempo de vida del segmento).]

<a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol" rel="nofollow noreferrer">fuente</a>


Otra Buena Explicación

Debido a la forma en que funciona TCP/IP, las conexiones no pueden cerrarse inmediatamente. Los paquetes pueden llegar desordenados o ser retransmitidos después de que la conexión haya sido cerrada. CLOSE_WAIT indica que el extremo remoto (otro lado de la conexión) ha cerrado la conexión. TIME_WAIT indica que el extremo local (este lado) ha cerrado la conexión. La conexión se mantiene para que cualquier paquete retrasado pueda ser emparejado con la conexión y manejado adecuadamente. Las conexiones se eliminarán cuando caduquen dentro de cuatro minutos.

<a href="https://superuser.com/questions/173535/what-are-close-wait-and-time-wait-states/173542#173542">fuente</a>


<a href="https://www.rfc-editor.org/rfc/rfc793" rel="nofollow noreferrer">rfc793: fuente de la imagen</a>

enter image description here <a href="https://www.rfc-editor.org/rfc/rfc793" rel="nofollow noreferrer">fuente de la imagen</a>


Recursos Adicionales

1voto

Zina Puntos 381

Puedes saber si compruebas si tu servidor escucha en el puerto 39922, entonces la conexión fue establecida desde el lado remoto.

Por ejemplo: Tu servidor acepta conexiones ssh en el puerto estándar 22. Con netstat -anutp | grep :22 podrás ver si está escuchando, si está conectado o si tienes una conexión. Si abres dos sesiones de terminal en tu servidor y luego desde una te conectas por ssh a un tercer servidor, la salida del comando anterior mostrará que tu servidor está escuchando en el puerto 22, que tiene el puerto 22 en el lado local para la conexión al servidor y el puerto 22 listado en el lado remoto con la IP del tercer servidor y un puerto aleatorio en el lado local en esta línea.

No creo que puedas saber desde la salida del comando netstat si la conexión fue iniciada desde local o remoto.

0voto

MariusMatutiae Puntos 20077

Ya has recibido dos buenas respuestas a tu pregunta, así que pido disculpas por añadir una nueva que aborda algo que he leído entre líneas de tu publicación. Mi respuesta está destinada a complementar las otras dos respuestas, no a sustituirlas.

A partir de la salida de netstat no es posible determinar si la conexión fue iniciada por tu propia máquina o por la máquina remota. El simple hecho de que estés haciendo esta pregunta me preocupa, y lo que me preocupa aún más es otro hecho extraño en esa salida: el uso de puertos altos (lo que significa > 10,000) para ambos lados de la conexión.

Déjame explicarte. Las PCs proporcionan servicios a otras PCs, en un modelo cliente/servidor: por ejemplo, el servidor web escucha solicitudes de páginas web en un puerto específico (en realidad, dos: 80 y 443) de un cliente remoto. Lo mismo ocurre con ssh, ftp, dns, y así sucesivamente. Todos los servicios esenciales escuchan en puertos conocidos (consulta en Wikipedia por ejemplo) algunos de los cuales son tan importantes que están establecidos en piedra: su asignación está regulada nada menos que por IANA. Muchos otros puertos, aunque su uso no está regulado por IANA, se han vuelto tradicionales para ciertas aplicaciones. Lo que todos los puertos escuchando tienen en común es que están por debajo de 10000. Los puertos altos (los que están por encima de 10,000) tradicionalmente se reservan para conexiones salientes, no para escuchar.

Entonces, ¿cómo se explica una conexión entre los puertos 39922 y 29842? Porque alguien ha configurado un servicio en un puerto muy no estándar, ya sea en tu máquina o en la máquina remota. ¿Tu máquina es el servidor escuchando? El comando

sudo ss -lntp

te dirá eso: lista todos los puertos en los que tu máquina escucha conexiones entrantes (TCP, la opción -t), y los procesos asociados. Así que ahora puedes ver qué proceso, si lo hay, está escuchando en el puerto 39922.

Ahora vamos a suponer que eso resulta ser cierto, es decir, que hay un servicio que no configuraste escuchando en el puerto 39922. ¿Quién hace eso? Los hackers, que utilizan una herramienta (netcat o nc, la navaja suiza de las conexiones TCP) que les permite conectar fácilmente sobre puertos altos entre su PC y una PC p0wned. Por eso estoy preocupado.

Tampoco me tranquiliza saber que 23.82.16.66 pertenece a Nobis Technology, una empresa que posee varios centros de datos que proporcionan soluciones de servidores en la nube. Y, para colmo, mientras consultaba en Google la información anterior, me encontré con esta Publicación de un sysadmin que relata cómo Nobis Technology es un conocido remitente de spam, y descubrí que la dirección mencionada, 23.82.16.66, cae claramente dentro de uno de los rangos que el pobre tipo está tratando de bloquear; y, sorpresa, tu dirección IP local, 192.99.202.17, es reportada por whatismyipaddress.com como tu servidor de correo.

En última instancia, ¿qué conclusiones saco de esto? Una conexión de un remitente de spam conocido a tu servidor de correo, solo a través de puertos altos, de los cuales no sabes nada. Parece probable que tu sistema haya sido violado de alguna manera. Por eso estoy escribiendo esta publicación.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X