Una introducción al comando ss

Aprende a obtener información de red utilizando el comando ss en este tutorial de los archivos.

Linux incluye una gama bastante masiva de herramientas disponibles para satisfacer casi todas las necesidades. Desde el desarrollo hasta la seguridad, pasando por la productividad y la administración… si hay que hacerlo, Linux está ahí para servir. Una de las muchas herramientas a las que los administradores recurrían con frecuencia era netstat. Sin embargo, el comando netstat ha quedado obsoleto en favor del comando ss, más rápido y legible para los humanos.

El comando ss es una herramienta utilizada para volcar las estadísticas de los sockets y muestra la información de forma similar (aunque más simple y rápida) a netstat. El comando ss también puede mostrar incluso más información de TCP y de estado que la mayoría de las otras herramientas. Debido a que ss es el nuevo netstat, vamos a echar un vistazo a cómo hacer uso de esta herramienta para que pueda obtener más fácilmente información sobre su máquina Linux y lo que está pasando con las conexiones de red.

La utilidad de línea de comandos ss puede mostrar estadísticas para los tipos de PACKET, TCP, UDP, DCCP, RAW, y sockets de dominio Unix. El reemplazo de netstat es más fácil de usar (compare las páginas de manual para tener una idea inmediata de cuánto más fácil es ss). Con ss, obtienes información muy detallada sobre cómo tu máquina Linux se está comunicando con otras máquinas, redes y servicios; detalles sobre conexiones de red, estadísticas de protocolos de red y conexiones de sockets Linux. Con esta información en la mano, usted puede mucho más fácil de solucionar diversos problemas de red.

Vamos a poner al día con ss, por lo que se puede considerar una nueva herramienta en su kit de administrador.

Uso básico

El comando ss funciona como cualquier comando en la plataforma Linux: Emitir el comando ejecutable y seguirlo con cualquier combinación de las opciones disponibles. Si echa un vistazo a la página man de ss (emita el comando man ss), notará que no hay casi las opciones que se encuentran para el comando netstat; sin embargo, eso no equivale a una falta de funcionalidad. De hecho, ss es bastante potente.

Si emite el comando ss sin ningún argumento u opción, devolverá una lista completa de los sockets TCP con conexiones establecidas (Figura 1).

Figura 1: Una lista completa de todas las conexiones TCP establecidas.

Debido a que el comando ss (sin opciones) mostrará una cantidad significativa de información (todos los detalles de las conexiones tcp, udp y de los sockets unix), también se podría enviar la salida de ese comando a un archivo para su posterior visualización de esta manera:

ss > ss_output

Por supuesto, un comando muy básico no es tan útil para todas las situaciones. ¿Qué pasa si sólo queremos ver las tomas de corriente actuales? Sencillo, añada la opción -l de la siguiente manera:

ss -l

El comando anterior sólo mostrará una lista de los sockets que están escuchando actualmente.

Para hacerlo un poco más específico, piénselo de esta manera: ss puede ser usado para ver las conexiones TCP usando la opción -t, las conexiones UDP usando la opción -u, o las conexiones UNIX usando la opción -x; así que ss -t, ss -u, o ss -x. La ejecución de cualquiera de estos comandos mostrará una gran cantidad de información (Figura 2).

Figura 2: La ejecución de ss -u en Elementary OS ofrece una rápida visualización de las conexiones UDP.

Por defecto, el uso de las opciones -t, -u o -x sólo mostrará las conexiones establecidas (o conectadas). Si queremos recoger las conexiones que están escuchando, tenemos que añadir la opción -a como:

ss -t -a 

La salida del comando anterior incluirá todos los sockets TCP (Figura 3).

Figura 3: Observe que el último socket es ssh escuchando en el dispositivo.

En el ejemplo anterior, se puede ver que las conexiones UDP (en diferentes estados) se están realizando desde la dirección IP de mi máquina, desde varios puertos, a varias direcciones IP, a través de varios puertos. A diferencia de la versión netstat de este comando, ss no muestra el PID y el nombre del comando responsable de estas conexiones. Aun así, tiene mucha información para empezar a solucionar problemas. Si alguno de esos puertos o URLs es sospechoso, ahora sabe qué dirección IP/puerto está haciendo la conexión. Con esto, usted tiene ahora la información que puede ayudarle en las primeras etapas de la solución de un problema.

Filtrar ss con estados TCP

Una opción muy útil disponible para el comando ss es la capacidad de filtrar usando estados TCP (las «etapas de vida» de una conexión). Con los estados, puede filtrar más fácilmente los resultados del comando ss. La herramienta ss puede utilizarse junto con todos los estados TCP estándar:

  • establecido

  • syn-sent

  • syn-recv

  • fin-wait-1

  • fin-wait-2

  • time-wait

  • closed

  • close-wait

  • last-ack

  • listening

  • closing

Otros identificadores de estado disponibles s reconoce son:

  • all (todos los estados anteriores)

  • connected (todos los estados a excepción de listen y closed)

  • synchronized (todos los estados connected a excepción de syn-sent)

  • bucket (estados que se mantienen como minisockets, por ejemplo time-wait y

  • syn-recv)

  • big (opuesto al estado bucket)

La sintaxis para trabajar con estados es sencilla.

For tcp ipv4:ss -4 state FILTERFor tcp ipv6:ss -6 state FILTER

Donde FILTRO es el nombre del estado que quieres usar.

Supongamos que quieres ver todos los sockets IPv4 que están escuchando en tu máquina. Para ello, el comando sería:

ss -4 state listening

Los resultados de ese comando serían similares a los de la Figura 4.

Figura 4: Uso de ss con un filtro de estado de escucha.

Mostrar los sockets conectados desde una dirección específica

Una tarea útil que puede asignar a ss es hacer que informe de las conexiones realizadas por otra dirección IP. Digamos que quiere averiguar si una máquina con la dirección IP 192.168.1.139 se ha conectado a su servidor. Para ello, podría emitir el comando:

ss dst 192.168.1.139

La información resultante (Figura 5) le informará del Netid, el estado, la IP:puerto local, y la IP:puerto remoto del socket.

Figura 5: Una máquina remota ha establecido una conexión ssh con nuestra máquina local.

Haz que funcione para ti

El comando ss puede hacer bastante para ayudarte a solucionar problemas con tu servidor Linux o tu red. Sería conveniente que se tomara el tiempo de leer la página man de ss (ejecute el comando man ss). Pero, en este punto, usted debe tener al menos una comprensión fundamental de cómo hacer uso de este comando imprescindible.

Aprenda más sobre Linux a través del curso gratuito «Introducción a Linux» de la Fundación Linux y edX.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.