Examinando las conexiones de red con el comando ss

La llegada de la suite de utilidades iproute2 a Linux, supuso que un buen número de herramientas diseñadas para el análisis de red quedaran obsoletas y otras tomaran su lugar.

Entre ellas ss, que no se refiere a las Schutzstaffel nazis, sino a un interesante comando (socket status), llamado a sustituir a netstat. Al igual que este, nos muestra las estadísticas de las conexiones actuales de red y puertos abiertos.

Si invocamos el comando en su forma más sencilla, nos muestra todas las direcciones y puertos (tanto en modo escucha, como no):

ss -a

Para mostrar únicamente las conexiones IPv4:

ss -4

De manera similar si hablamos de las IPv6:

ss -6

Las conexiones TCP:

ss -ta

O las del protocolo UDP:

ss -ua

Si queremos especificar y que nos muestre solo los sockets que tienen status “listen” (escucha). Para el protocolo TCP sería:

ss -ltn

Y en el caso de las conexiones UDP “listen”;

ss -lun

Para incrementar el nivel de detalle en las diferentes combinaciones de comandos tenemos el parámetro -e:

ss -ae

Vamos a hacer la cosa algo más interesante. Para empezar mostremos las aplicaciones que están conectadas a internet en este momento, incluyendo además su PID:

ss -p

Veamos el consumo de memoria de los diferentes sockets:

ss -m

Comprobemos ahora si hay alguna conexión SSH:

ss -o state established '( dport = :ssh or sport = :ssh )'

De tipo SMTP:

ss -o state established '( dport= :smtp or sport= :smtp )'

o las habituales HTTP:

ss -o state established '( dport = :http or sport = :http )'

A continuación examinemos las estadísticas generales:

ss -s

Filtremos lo que pasa en un puerto determinado:

ss -n dst :443

O varios de ellos:

ss -nt '( dst :443 or dst :80 )'

Examinemos ahora como estamos conectados a una dirección ip específica. Este comando nos muestra información sobre la cantidad de paquetes enviados/recibidos, el tipo de conexión o todos los puertos involucrados.

ss dst 216.58.214.174

Y por último vamos a ver las conexiones TCP activas en tiempo real. Para ello tiramos del siempre útil “watch” y lo combinamos tal que así:

watch ss -tp

Da bastante juego este comando ss, así que si os interesa el tema, os recomiendo que le echéis un vistazo al manual:

man ss

En el encontrareis muchas más opciones avanzadas de ejecución, incluyendo las que permiten filtrar por todo tipo de estados (closing, syn-sent, syn-recv, established, time-wait, etc) y conexiones.

17 thoughts on “Examinando las conexiones de red con el comando ss”

  1. BlueSkull says:

    Muy interesante.

    Gracias Tannhausser.

  2. tannhausser says:

    De nada @BlueSkull

    Gracias a ti por pasarte y comentar 🙂

  3. JVare says:

    De momento tenemos las dos alternativas pero mejor que nos vayamos acostumbrando a las nuevas herramientas.
    No sabemos cuando netstat y otras dejaran de ser incluidas en nuestras distribuciones gnu/linux.

    1. tannhausser says:

      Confieso que todavía sigo utilizando la mayoría de las antiguas, y se me escapa mas de un ifconfig o netstat.

    1. tannhausser says:

      Gracias Emanuel!

  4. x-man says:

    Definitivamente hay que hacer un “self update” o nos quedamos dormidos en el tiempo.

    Gracias Tannhausser.

    1. tannhausser says:

      Y en caso de dudas, siempre optar por el comando con menos letras.

      Ahí “ss” le gana a “netstat” 🙂

      Gracias a ti por pasarte!

  5. Pedro says:

    Buenas tardes, lo felicito por su artículo, me resultó muy útil. Quiero aprovechar para hacerle una consulta: hace una semana estoy probando Archlinux, instalé y configuré desde cero (después me enteré de la existencia de Arch Anywhere…). Estoy bastante conforme con el resultado, pero no estoy seguro del nivel de seguridad que posea mi sistema al ser yo (o cualquier usuario final) quien deba definir todo. A priori, instalé UFW como firewall, también instalé Rootkit Hunter, encripté /home, pero no sé si estoy pasando por alto algún itém importante, ¿debo realizar alguna clase de “blindaje” al kernel?. Saludos.

    1. tannhausser says:

      Hola Pedro, en mi opinión para un uso normal –algo difícil de definir en estos tiempos– estás mas que protegido. Adicionalmente también se podría instalar alguna suite de seguridad tipo selinux o apparmor, o utilizar sandboxing (firejail por ej) para la ejecución de determinadas aplicaciones . Pero quizás más importante que eso, sea echar un vistazo a los logs del sistema de vez en cuando.

      Los buscadores de rootkits están bien, aunque en mi experiencia suelen ofrecer falsos positivos (hace tiempo que no los uso, así que es posible que hayan mejorado ese aspecto). En cuanto a UFW me parece muy cómodo para configurar el cortafuegos, así que te alabo el gusto. Lo del cifrado del sistema es fundamental y con ello ya ganas mucho en tranquilidad.

      El blindaje adicional del kernel se podía hacer hasta hace poco con la versión grsecurity del mismo. Ahora ya no se ofrece de forma gratuita, pero existe una edición llamada “linux hardened” –por ahora no tan completa– que puedes instalar.

      A mi me gusta tener por lo menos un par de versiones del kernel instaladas. En distros rolling releases suele venir bien, por temas de estabilidad del sistema (a veces con determinados programas que exigen reconstruir módulos continuamente) y siempre tener otra opción a la que recurrir en caso de problemas en el arranque.

      En cualquier caso, aunque me interesa el tema de la seguridad informática, lo tengo en la misma estima que otros componentes del sistema. Y para mi es más hacker el que hace un bonito artwork o diseña un programa cualquiera con un código elegante, que aquel que aprovecha una debilidad del sistema utilizando una herramienta generalmente construida por otros.

      TL;DR resumiendo: cifrado de /home excelente, UFW en modo básico bien (deny incoming/allow outgoing) y con rkhunter tampoco te comas la cabeza demasiado. Opcionalmente le puedes meter linux_hardened al sistema.

      Un saludo!

      1. Pedro says:

        ¡Muchas gracias por su consejos! Voy a investigar lo más que pueda acerca de linux_hardened y seguiré metido de cabeza en la wiki de Arch.
        Le reitero mis felicitaciones por su blog, se ha ganado un nuevo seguidor 🙂

        1. tannhausser says:

          Genial! ;:-)

  6. nautilus says:

    Gracias por este tutorial, lo veo mas que completo y tendre que practicas mas con este programa para aprenderme algunas de sus tantas opciones

    1. tannhausser says:

      De nada amigo! A mi me pasa igual, muchos artículos los escribo para después no tener que andar buscando las diferentes opciones xD

  7. mantisfist says:

    A actualizarme que yo todavía ando con netstat. Ya me voy a practicar en Antergos.

  8. Javi Felices says:

    Para los que llevamos poco tiempo con Linux, lo “antiguo” lo conocemos de algún manual o vídeo, pero yo intento ya centrarme en todo lo que tenga que ver con iproute2 e ir cogiendo buenas prácticas, supongo que si están aquí es para quedarse, muchas gracias por otro magnífico articulo.

    Luego revisaré si tienes algún artículo un poco detallado sobre opciones de ip.

    Un saludo y como siempre gracias por tu tiempo y por compartir conocimientos 🙂

    1. tannhausser says:

      De nada Javi!.

      Un saludo 🙂

Deja un comentario