En muchas ocasiones cuando trabajamos en ambientes Linux, nos puede pasar que necesitamos saber los servicios que se encuentran utilizando puertos del sistema operativo, los puertos abiertos, las conexiones tcp o udp que hayan, tipos de servicios en ejecución, entre otros.

Algunas veces cuando iniciamos muchos servicios en un mismo servidor y no tenemos documentado los puertos utilizados, podemos presentar conflictos para iniciarlos y con el tiempo es posible que esto se vuelva un dolor de cabeza para controlar los servicios iniciados y los puertos ocupados.

Adicionalmente, para tener mayor control de nuestro servidor, necesitamos saber cuales conexiones se encuentran activas hacia el servidor y se mantienen vivas, es por ello que hoy les vengo a mostrar un comando muy potente que nos brinda una respuesta a este tipo de problemáticas:

netstat -putona

Primero veamos que significa cada letra del comando:

  • p – muestra los PID y el nombre del programa en ejecución
  • u – muestra las conexiones UDP activas
  • t – muestra las conexiones TCP activas
  • o – muestra una columna timer, el cual indica el tiempo de la conexión
  • n – resuelve los nombres de las conexiones, así que muestra las ips y puertos, en lugar de los nombres, ejemplo: localhost dirá 127.0.0.1
  • a – muestra todos los sockets que por default estén conectados

Nota: Si desea saber más información acerca de este comando puede ejecutar netstat /help

Todo el comando imprimirá lo siguiente:

Podemos ver que se nos despliegan 8 columnas, les explico que es cada una:

Proto: Muestra el protocolo utilizado ya sea TCP, TCP6, UDP o UDP6.

Recv-0: Muestra el número de bytes recibidos.

Send-0: Muestra el número de bytes enviados.

Local-Address: Muestra los servicios en ejecución con la ip de ese servicio y el puerto por el que se ejecuta, además cuando veamos 0.0.0.0:puerto son los servicios con los puertos que se encuentran abiertos en el servidor.

Foreign Address: Muestra las conexiones establecidas o abiertas e indica cual servicio esta conectado, ejemplo: yo estoy conectado por SSH a una maquina virtual, mi máquina virtual tiene la ip 192.168.1.15 y la ip de la máquina donde uso el cliente SSH es 192.168.1.3 por lo que puedo ver mi conexión, el puerto al cual me conecto que es el 22 de la conexión SSH, el estado de la conexión, el usuario conectado:

State: Muestra el estado de la conexión los cuales pueden ser varios:

  • LISTEN son puertos en estado abierto y a los cuales se les pueden enviar peticiones.
  • TIME_WAIT este estado significa que la conexión espera una respuesta o conexión, esto sucede cuando un servicio activo espera crear una conexión.
  • ESTABLISHED son las conexiones establecidas.

PID/Program name: Indica el PID del servicio y el nombre del servicio en ejecución, esto nos ayudaría ya que si queremos matar ese servicio, podemos ejecutar kill-9 PID aveces dependiendo la conexión o el programa nos muestra algo más de información

Timer: Usa una sintaxis de 2 subcolumnas, la primer columna muestra los siguientes estados:

  • keepalive – indica cuando el temporizador keepalive está activado para el socket
  • ON – indica cuando el temporizador de retransmisión está activado para el socket
  • OFF – indica que ninguno de los estados anteriores está ENCENDIDO

La segunda columna de Timer, muestra lo siguiente:

(3160.34/0/0) -> (a/b/c)
  • a – valor del temporizador (a=temporizador de keep alive, cuando el primer campo es «keepalive» a=temporizador de retransmisión, cuando el primer campo es «ON»)
  • b=número de retransmisiones que han ocurrido
  • c=número de sondas keepalive que se han enviado
192.168.122.1:5901  192.168.122.1:51466  ESTABLISHED 2306/java   keepalive(3160.34/0/0)

Así que si vemos la fila que muestra mi conexión SSH hacia la máquina virtual, puedo ver que la conexión se mantiene viva y al ser una conexión viva, se envían constantemente paquetes, en caso de que haya perdidad de paquetes, la conexión se cerrará.

Si la conexión fuera algo como esto:

on (0.68/3/2)

Lo interpretaremos de otra forma:

  • 0.68 se enviarán paquetes cada 0.68 segundos
  • 3 se enviarán 3 pruebas de conexión
  • 2 en caso de perdidas de conexión, el servicio intentará 2 veces volver a conectar y sino se cerrará la conexión

Y para el caso de off, veremos todo siempre en 0. Ejemplo: off (0.00/0/0)

De esta manera podemos tener mucho mayor control sobre cuáles servicios y puertos se encuentran en ejecución en nuestro servidor, además de los puertos abiertos y las conexiones establecidas o en espera que tengamos, así ante alguna conexión no deseada, podemos cerrar puertos o matar servicios.

Nota: Si van a usar el comando en algún entorno profesional o con muchas personas, mejor escribanlo así: netstat -tonapu el orden de las letras no infiere en la presentación del resultado, pero suena mejor.

2 respuestas a ««netstat -putona» el comando salvavidas en Oracle Linux!»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *