Algunos comandos útiles con iproute2
04/04/2019Artículo original
El propósito de iproute2 es reemplazar el conjunto de herramientas que componen las net-tools y pasar a ser él quien se encargue de configurar las interfaces de red, la tabla de rutas y gestionar la tabla ARP.
Hace poco he escrito sobre el comando netstat. El artículo trataba de cómo es posible usar netstat para mostrar dintintos tipos de información sobre el estado de la red. Hoy voy a hablar de su sustituto ss, ya que netstat se dejó de desarrollar en 2001.
Para situarnos en contexto, netstat forma parte de las comúnmente llamadas net-tools o herramientas de red. Este conjunto de herramientas lo forman los comandos ifconfig, netstat y route. Dichas herramientas han quedado obsoletas en favor de iproute2 desde hace algunos años.
A día de hoy la mayoría de distribuciones traen iproute instalado por defecto.
Veamos algunos de los comandos más útiles que nos ofrece este relativamente “nuevo” conjunto de comandos:
Obtener información sobre TCP/UDP y Sockets
Aquí entra en acción el comando ss, sustituto de netstat. Este comando está incluido en el paquete iproute2.
La función de ss es mostrar estadísticas de los sockets, mostrar información similar a netstat. Además, revela más información sobre TCP que otras herramientas. Las opciones más usadas son:
-n, --numeric Do now try to resolve service names. -r, --resolve Try to resolve numeric address/ports. -a, --all Display all sockets. -l, --listening Display listening sockets. -o, --options Show timer information. -e, --extended Show detailed socket information -m, --memory Show socket memory usage. -p, --processes Show process using socket. -i, --info Show internal TCP information. -s, --summary Print summary statistics. This option does not parse socket lists obtaining summary from various sources. It is useful when amount of sockets is so huge that parsing /proc/net/tcp is painful.
Para ver la lista completa de opciones escribe ss --help.
Algunos ejemplos prácticos:
Mostrar todos los sockects a la escucha
$ ss -lState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0128 :::sunrpc :::*LISTEN 0128 *:sunrpc *:*LISTEN 020 ::1:smtp :::*LISTEN 020127.0.0.1:smtp *:*LISTEN 0128 *:17500 *:*LISTEN 0128 *:43076 *:*LISTEN 0128 :::50925 :::*
Para entender el significado de las columnas, puedes dirigirte al artículo de netstat.
Mostrar conexiones ssh establecidas
# ss -o state stablished '( dport = :ssh or sport = :ssh)'Recv-Q Send-Q Local Address:Port Peer Address:Port00192.168.1.36:60240 207.97.227.239:ssh
El parámetro -o permite establecer qué opciones mostrar, varios ejemplos son:
Mostrar conexiones SMTP establecidas
# ss -o state established '( dport = :smtp or sport = :smtp )'
Mostrar conexiones HTTP establecidas
# ss -o state established '( dport = :http or sport = :http )'
En los casos anteriores se ha filtrado únicamente los paquetes TCP con estado established. Para mostrar otros estados puedes escribir:
# ss -4 state NOMBRE-DEL-FILTRO
Donde -4 indica paquetes TCP IPv4 y NOMBRE-DEL-FILTRO puede tomar los siguientes valores:
- established
- syn-sent
- syn-recv
- fin-wait-1
- fin-wait-2
- time-wait
- closed
- close-wait
- last-ack
- listen
- closing
- all : Todos los estados de arriba
- connected : Todos los estados salvo listen y closed
- synchronized
- bucket : Mostrar estados mantenidos como minisockets, como time-wait and syn-recv.
- big : Lo contrario al estado bucket.
Por ejemplo:
# ss -4 state time-wait
Encontrar procesos locales conectados al servidor X (Servidor Gráfico)
# ss -x src /tmp/.X11-unix/*
Hacer coincidir direcciones remotas y puertos
ss dst ADDRESS_PATTERN## Mostrar todos los puertos conectados de forma remota desde 192.168.1.5##ss dst 192.168.1.5## Mostrar todos los puertos conectados de forma remota desde 192.168.1.5:http##ss dst 192.168.1.5:httpss dst 192.168.1.5:smtpss dst 192.168.1.5:443
Mostrar conexiones realizadas por una ip en el puerto http hacia nuestra máquina
ss dst 123.1.2.100:http
Es posible mostrar todas las conexiones realizadas por cualquier máquina, por el puerto http por ejemplo:
# ss dst *:http
Hacer coincidir direcciones locales y puertos
ss src ADDRESS_PATTERN# Encontrar todas las ips conectadas a elbauldelprogramador.com (5.39.89.44) ##### Mostrar todos los puertos conectados a la dirección local 5.39.89.44 ##ss src 5.39.89.44## http (80) port only ##ss src 5.39.89.44:httpss src 5.39.89.44:80## smtp (25) port only ##ss src 5.39.89.44:smtpss src 5.39.89.44:25
Mostrar el número y el tipo de conexiones activas
ss -ant | awk '{print $NF}'| grep -v '[a-z]'| sort | uniq -c
Mostrar un resumen del estado de los sockets
# ss -s
Listar todos los puertos a la escucha junto con el PID del programa
ss -tlnp
Configuración de la interfaz de red
Antiguamente se usaba el comando ifconfig:
# ifconfig eth0 up# ifconfig eth0 192.168.1.1 netmask 255.255.255.0
En iproute2 la configuración de interfaces de red se lleva a cabo con el subcomando link:
Activar interfaz
# ip link set eth0 up
Donde eth0 debe ser la interfaz de red a activar.
Establecer dirección ip a la interfaz
# ip addr add 192.168.1.33/24 dev eth0
Para comprobar la correcta configuración de la interfaz, muestra la información de dicha interfaz:
# ip addr ls# ip addr show# ip addr ls eth0
Enrutamiento
La versión moderna del comando route -n o netstat -r es:
# ip ro
Para añádir o eliminar reglas de enrutamiento se usa ip ro add|del destino via gateway. Para añadir una nueva ruta a 10.0.0.0/16:
# ip ro add 10.0.0.0/16 via 192.168.0.1# ip ro del 10.0.0.0/16 via 192.168.0.1
Encontrar la ruta hacia una dirección IP
Para averiguar qué interfaz está usando tu pc, puedes usar el comando ip route get IP. Así:
# ip route get 5.39.89.445.39.89.44 via 10.61.29.89 dev eth1 src 192.168.1.36
está usando la interfaz eth1, gateway 10.61.29.89 y la interfaz tiene la ip privada 192.168.1.36
Conclusión
Aunque este artículo ha sido una remezcla de comandos, espero que haya quedado claro para qué sirve cada uno, y a partir de ahora podrás sacarle partido.