ss es una utilidad para inspeccionar sockets en Linux. Recuerda que un socket es la combinación IP:puerto. Entre otros muchos estados, un socket en nuestra máquina puede estar en estado listening, es decir, abierto a la espera de que alguien (otro socket) se conecte con él, o established, es decir, conectado a otro socket (ip:puerto), que puede ser local o remoto.
ss es un comando complejo y con muchísima funcionalidad. Lo que aquí se recoge es una guía muy rápida (quizás demasiado ...), para servir como primer contacto.
En primer lugar, veremos las principales opciones, y luego pondremos ejemplos concretos de uso.
La sintaxis del comando es:
ss [opciones] [filtros]
Lo dicho, opciones hay millones, y por eso se recomienda consultar la documentación oficial. Sin embargo, aquí tenemos algunos de los más comunes:
-l
: muestra sólo las conexiones que estén en estado listening, a la escucha. Es decir, te lista los server sockets que por defecto, no se muestran.-a
: Muestra todos los sockets: los listenings y los non-listenings.-n
: no resolver nombres de dominio ni puerto.-p
: muestra el pid del proceso asociado al socket.-u
: muestra sólo sockets udp.-t
: muestra sólo sockets tcp.-4
: muestra sólo sockets ipv4.-6
: muestra sólo sockets ipv6.
NOTA: Todas estas opciones se pueden combinar. Por ejemplo:
ss -punta
Es decir, muestra sockets:
- junto con la información del pid del proceso asociado (p)
- udp (u)
- sin resolver ips ni puertos (n)
- tcp (t)
- listening y no-listening (a)
-
Listar todas las conexiones:
ss
-
Listar sockets que están a la escucha y los que se conectan a sockets en escucha:
ss -a
-
Listar sólo sockets que están a la escucha (servidores):
ss -l
-
Mostrar las conexiones tcp:
ss -t
-
Mostar conexiones tcp a la escucha:
ss -tl
-
Mostar todas las conexiones udp:
ss -ua
-
Mostrar el PID (id del proceso), del proceso asociado a las conexiones TCP:
ss -tp
A lo anterior, podemos añadir filtros adicionales. Por ejemplo, si queremos consultar sockets en ciertos estados, podemos usar el modificador state. Aunque un socket puede estar en muchos estados distintos, por simplificar, vamos a considerar que hay 2:
- established: conectado con otro socket (local o remoto)
- listening: a la escucha
- Conexiones TCP a la escucha:
o también:
ss -t state listening
ss -tl
- Conexiones TCP establecidas:
o también:
ss -t state established
ss -t
-
Filtrar tráfico http saliente de nuestra máquina:
ss '( dport = :80 )'
-
Filtrar tráfico http entrante o saliente de nuestra máquina:
ss '( dport = :80 or sport = :80 )'
-
Conexiones http establecidas:
ss state established '( dport = :80 or sport = :80 )'
-
Conexiones establecidas a servidores http y https:
ss state established '( dport = :80 or dport = :443 )'
-
Servidores ssh a la escucha en nuestra máquina
ss state listening '( sport = :22 )'
En este caso, podemos usar dst ip:puerto o src ip:puerto.
- Conexiones tcp dirigidas al puerto 443.
ss -nt dst :443
- Conexiones dirigidas a puertos https y ssh:
ss -nt dst :443 or dst :22
- Conexiones de mi máquina al servidor web de todofp.es:
ss -tn dst 212.128.114.103:80