Capturar paquetes con Tcpdump y analizarlos con Wireshark en Ubuntu
En esta guía, te mostraré cómo analizar paquetes de red en Linux. Utilizaré las herramientas Tcpdump y Wireshark. Este tutorial utiliza Ubuntu como sistema operativo, pero también es aplicable a otras distribuciones de Linux.
¿Por qué necesitas Tcpdump?
Una pregunta obvia que puede venir a la mente es por qué preocuparse por Tcpdump cuando puedes hacer casi todo con Wireshark. Pues aquí está la respuesta a esto: A veces es más conveniente utilizar Tcpdump para la captura de paquetes que Wireshark. Por ejemplo, si la máquina de destino en la que estás capturando paquetes es una remota sin Wireshark instalado en ella o es simplemente una máquina remota sin cabeza, en ambos casos, Tcpdump es muy útil. Para ver las distintas opciones que se pueden utilizar con Tcpdump, busca las páginas man.
¿Qué es Tcpdump?
Tcpdump es una alternativa de línea de comandos a Wireshark. Sirve para el mismo propósito que Wireshark, que es capturar y analizar el tráfico. Tcpdump es una aplicación independiente y no debe considerarse como una interfaz de línea de comandos de Wireshark. Al estar basado en la interfaz de línea de comandos, no es tan sencillo de manejar como Wireshark. Los nuevos usuarios pueden encontrarlo desalentador al principio cuando empiezan a utilizarlo y pueden encontrar muchos comandos y sintaxis difíciles de recordar.
Esquema de este tutorial
Pasemos ahora al objetivo principal de esta guía. En esta guía, veremos cómo podemos interactuar Tcpdump con Wireshark. Aquí señalamos el trabajo que vamos a realizar en esta guía:
- Conectar con la máquina remota (Host 2) con SSH.
- Capturar el tráfico con Tcpdump y guardar la Captura.
- Enviar el archivo de Captura a la máquina local (Host 1) en la que está instalado Wireshark.
- Utilizar Wireshark para analizar la sesión de Tcpdump capturada.
Comprobación previa al vuelo
Para este tutorial, estamos utilizando dos máquinas Ubuntu 20.04. Tienes que configurarlas por tu cuenta. Nuestra configuración IP es la siguiente
Anfitrión 1 (máquina in situ): 192.168.186.150
Host 2(Máquina remota): 192.168.186.201
Se supone que los pasos mencionados en esta guía funcionan en cualquier sistema Linux que cumpla los siguientes requisitos
- Host local (Host 1) con Wireshark instalado y SSH configurado.
- Acceso SSH desde el host in situ (Host 1) al host remoto (Host 2).
- Tcpdump y SSH configurados en el host remoto (Host 2).
- Cuenta de usuario ‘sudo’ en el Host 2 para ejecutar Tcpdump y también en el Host 1 (depende de cómo esté configurado Wireshark).
Empecemos…
Para seguir adelante, conéctate desde tu máquina local (Host 1) a la máquina remota (Host 2) con el protocolo de acceso SSH. Ya hemos configurado la conexión SSH entre las dos máquinas. Así que utilizaremos el siguiente comando desde el terminal del Host 1 para conectarnos al Host 2:
$ ssh ‘nombre_de_usuario’@’IP_del_Host2’
Aquí sustituye «nombre_de_usuario» por el nombre de usuario del Anfitrión 2 al que nos estamos conectando y «IP_del_Anfitrión2» es la dirección IP del Anfitrión 2. Mira la siguiente imagen como referencia:
Ahora comprueba las interfaces disponibles en la máquina remota en las que Tcpdump puede capturar. Para ello utiliza el comando
$ tcpdump –list-interfaces
Ejemplo de salida:
1.enp0s3 [Up, Running]
2.lo [Up, Running, Loopback]
3.any (Pseudo-dispositivo que captura en todas las interfaces) [Up, Running]
4.eno1 [Up]
5.bluetooth-monitor (Monitor Linux de Bluetooth) [none]
6.nflog (Interfaz Linux netfilter log (NFLOG)) [none]
7.nfqueue (Interfaz Linux netfilter queue (NFQUEUE)) [none]
8.bluetooth0 (Adaptador Bluetooth número 0) [none].
Como puedes ver, la interfaz «enpos3» está en funcionamiento. Así que vamos a establecerla como interfaz de destino y a ejecutar aquí el comando tcpdump. Cuando creas que has capturado suficientes paquetes, sólo tienes que pulsar ‘Ctrl+c’ para finalizar la captura de paquetes. El comando es
$ sudo tcpdump -s 65535 -i enp0s3 -w mi_captura_remota.pcap
En el comando anterior, hemos utilizado las siguientes opciones con Tcpdump
- -s: Las versiones antiguas de Tcpdump cortan los paquetes a 68 o 96 bytes. La opción «-s» se utiliza para capturar paquetes con la longitud completa.
- -i: Selecciona la interfaz en la que escuchar.
- -w: Guarda los paquetes sin procesar capturados en un archivo en lugar de mostrarlos en el terminal.
El tráfico capturado se guarda en el archivo llamado ‘mi_captura_remota.pcap’. Ahora transferiremos este archivo al Host 1 para analizarlo con Wireshark. Para transferir el archivo, utilizaremos el comando ‘scp’. De nuevo, ya hemos configurado ‘scp’ para que funcione entre las dos máquinas. La sintaxis del comando es la siguiente
$ scp mi_captura_remota.pcap ‘nombre_de_usuario’@’IP_de_máquina_remota’:
Aquí ‘nombre de usuario’ es el nombre del usuario en el Host 1 y ‘IP_de_máquina_remota’ es también la IP del Host 1.
En la máquina local (Host 1) comprueba si has recibido el archivo. En nuestro caso, hemos recibido con éxito el archivo y lo abriremos utilizando el Wireshark como se muestra a continuación:
Esta es la captura de pantalla del archivo de captura del Host 1:
Analizar el archivo de captura
Apliquemos un filtro de visualización al archivo anterior. Como nos conectamos al Host 2 mediante SSH, debería haber algunos rastros del protocolo SSH. En el campo de texto correspondiente al filtro de visualización introduce «ssh»:
En la imagen anterior, podemos ver sólo los paquetes con el protocolo ‘SSH’.
Para terminar…
Enhorabuena, por fin hemos demostrado cómo podemos hacer una Captura remota en una máquina. Hemos visto cómo podemos combinar Tcpdump con Wireshark.