Captura todo el tráfico de red en tu servidor usando tcpdump

Si necesitas hacer un diagnóstico de todo el tráfico de red de tu conexión, ya sea local o de cara a Internet, es fundamental utilizar programas para capturar todo el tráfico y analizarlo posteriormente. Uno de los programas más populares es Wireshark, este programa es multiplataforma, compatible con Windows, Linux, macOS y muchos otros, sin embargo, necesitamos una interfaz gráfica de usuario para hacerlo funcionar. Hoy os vamos a enseñar a utilizar tcpdump, la mejor herramienta para capturar todo el tráfico a través de la línea de comandos en un terminal.

Qué es tcpdump y para qué sirve

tcpdump es una herramienta completamente gratuita que nos permitirá capturar todo el tráfico de red de una o varias interfaces, ya sean Ethernet, WiFi, interfaces PPPoE que hayamos levantado e incluso también interfaces virtuales como las que creamos al usar redes privadas virtuales. Este programa no solamente se encarga de capturar todo el tráfico, sino que también podemos analizarlo en tiempo real a medida que lo va capturando, todo ello a través de la línea de comandos.

tcpdump es compatible con todos los sistemas operativos basados en Unix, como Linux, BSD, macOS y muchos otros. Por supuesto, este programa hace uso de la biblioteca libpcap para capturar todos los paquetes que circulan a través de una interfaz en cuestión, ya sea física o virtual. Este programa para poder ejecutarlo en el sistema, es necesario tener permisos de superusuario, ya que estamos capturando y viendo tráfico de red que pudiese ser «sensible», por lo tanto, es necesario contar con privilegios de administrador.

Lo mejor que tiene tcpdump son los filtros, vamos a poder filtrar todo el tráfico para ver solamente lo que a nosotros nos interese. Los filtros son expresiones que van detrás de las opciones de captura, y nos permite mostrar solamente lo que estamos buscando y no todo. Si no ponemos ningún filtro, veremos todo el tráfico de red del adaptador de red seleccionado.

Los principales usos que le podemos dar a una herramienta como tcpdump son los siguientes:

  • Capturar toda la información y almacenarla para su posterior estudio.
  • Depurar aplicaciones en tiempo real que usan la red para comunicarse.
  • Comprobar que el tráfico de red es el esperado teniendo en cuenta su uso.
  • Capturar y leer los datos de otros equipos de la red, aunque en este caso tendríamos que hacer técnicas como el ARP Spoofing o similar si estamos en un entorno conmutado y no estamos usando tcpdump en el router.

Una vez que hemos visto qué es tcpdump y para qué nos puede servir, vamos a instalarlo en nuestro sistema operativo Linux para mostraros su funcionamiento.

Instalación en Debian y principales opciones

Este programa es muy utilizado en todos los sistemas operativos basados en Linux, por lo tanto, vamos a poder instalarlo directamente desde los repositorios oficiales de cada distribución. En el caso de Debian, tenemos que poner la siguiente orden en la terminal:

sudo apt install tcpdump

Nos saldrá algo así:

Una vez que lo tengamos instalado, podemos ejecutar la siguiente orden en la terminal para que nos muestre la ayuda:

tcpdump -h

En el caso de que necesites mucha más información sobre la herramienta, ver ejemplos de utilización y toda la documentación, entonces podrás acceder a las páginas man de la siguiente forma:

man tcpdump

En estas páginas man podrás ver una extensa descripción de la herramienta, qué sintaxis debemos utilizar, qué opciones tenemos disponibles para capturar todos los datos y también para filtrar la información que nosotros queramos.

Ejemplos de uso

Este programa tiene una gran cantidad de opciones para capturar los datos y también para visualizarlos, además, tenemos la posibilidad de añadir una gran cantidad de filtros avanzados para que nos muestre solamente lo que queramos. A continuación, os vamos a explicar algunos comandos básicos para que captures solamente lo que te interese.

Uso básico

El siguiente comando nos permite arrancar el programa, si no especificamos ninguna interfaz de red, la propia herramienta elegirá una de las que estén disponibles en el sistema operativo.

tcpdump

Si queremos especificar una interfaz de red, debes poner la siguiente orden:

tcpdump -i NOMBRE_INTERFAZ

Si queremos especificar todas las interfaces de red, para capturar todo el tráfico de todas ellas a la vez, entonces tienes que poner la siguiente orden:

tcpdump -i any

Cuando capturamos tráfico de red con tcpdump, es posible que no nos interese resolver los nombres de los hosts, sino que directamente nos muestre las direcciones IP. Para hacer esto, podemos poner:

tcpdump -n

Si quieres capturar solamente un cierto número de paquetes, entonces deberás poner la siguiente orden:

tcpdump -c NUMERO_PAQUETES

Si queremos aumentar la información que nos muestra a través de la línea de comandos, debemos aumentar el «verbose» de la siguiente forma:

tcpdump -i NOMBRE_INTERFAZ -v

Si queremos aumentarlo más, añadiremos más «v» detrás, de la siguiente forma:

tcpdump -i NOMBRE_INTERFAZ -vvv

Este último comando nos permite ver el máximo verbose posible.

Si queremos guardar la captura en un archivo, para posteriormente abrirlo con un analizador de paquetes como WireShark, o para su posterior análisis, debemos poner la siguiente orden:

tcpdump -i NOMBRE_INTERFAZ -w NOMBRE_ARCHIVO

Por supuesto, si queremos guardar todo con el máximo verbose, pondremos:

tcpdump -i NOMBRE_INTERFAZ -w NOMBRE_ARCHIVO -vvv

Capturando tráfico por IP o subred

tcpdump nos permite filtrar por direcciones IP e incluso subredes, para ello, podemos poner la siguiente orden:

tcpdump -i NOMBRE_INTERFAZ host IP

Por ejemplo, podríamos ver el tráfico de la IP de localhost:

tcpdump -i NOMBRE_INTERFAZ host 127.0.0.1

También podemos filtrar por subredes de la siguiente forma:

tcpdump -i NOMBRE_INTERFAZ net SUBRED/X

A continuación, puedes ver un ejemplo de subred:

tcpdump -i NOMBRE_INTERFAZ net 192.168.1.0/24

También podríamos filtrar por origen y por destino, a continuación, puedes ver dos ejemplos:

tcpdump -i NOMBRE_INTERFAZ src IP tcpdump -i NOMBRE_INTERFAZ dst IP

Con estas opciones, podremos filtrar fácilmente el tráfico que solamente queramos capturar y mostrar.

Capturando tráfico por puerto y rangos

En el caso de que quieras filtrar por puertos, ya sea un puerto únicamente o un rango de puertos, puedes hacerlo de la siguiente forma:

tcpdump -i NOMBRE_INTERFAZ port NUMERO_PUERTO tcpdump -i NOMBRE_INTERFAZ portrange PUERTOINICIO PUERTOFIN

Todos estos comandos también se pueden añadir a tcpdump para filtrar por IP y puertos, e incluso también para guardar en un archivo pcap toda la captura de tráfico. De esta forma, podemos ir concatenando las diferentes opciones disponibles con los filtros que hayamos definido.

Conclusiones

tcpdump es la herramienta por excelencia para capturar paquetes de la red local con las interfaces que nosotros queramos, gracias a este programa, vamos a poder visualizar todo el tráfico de red a bajo nivel a través de la consola, y también podemos guardar las capturas de tráfico en nuestro disco duro o SSD siempre que queramos. Gracias a la gran cantidad de opciones de configuración y filtros, vamos a poder capturar solamente lo que nos interese, para su posterior análisis con programas como Wireshark o directamente a bajo nivel con tshark o similares.

Si tienes problemas a nivel de red en tu red local o servidor, tcpdump te ayudará a saber qué tráfico está pasando por toda la red o el servidor en cuestión, y posteriormente estudiar en detalle qué está ocurriendo y cómo lo podemos solucionar. Capturar tráfico de red es el primer paso para poder arreglar un problema a nivel de red, y en este caso, tcpdump será tu mejor aliado para solucionar todos los problemas.

¡Sé el primero en comentar!