En muchas ocasiones necesitamos poder analizar el tráfico de una comunicación, bien en desarrollo o en producción. Existen casos en que bien por no poder controlar la infraestructura de red o para poder hacer depuraciones rápidas sin necesidad de reestructurar partes de la red, necesitamos poder tener una máquina "en medio" de la comunicación de otras dos máquinas con el fin de poder capturar y analizar tráfico de red.
En estas situaciones puede ser muy interesante ser capaz de instalar un
"Man in the middle" para poder capturar y análizar el tráfico con alguna de las clásicas herramientas
Tcpdump,
wireshark y tshark,...
En muchos de los casos queremos interceptar las comunicaciones de un host con su gateway de salida, así que ese es el escenario que voy a comentar...
Supongamos que tenemos:
- HostA en el que realizaremos la captura
- HostB del que queremos analizar las comunicaciones
- Gateway de Salida GW
Pasamos a la acción... Todas las operaciones a realizar las tenemos que ejecutar en el
hostA.
Instalamos la herramienta
arpspoof que se encuentra incluido en dentro de las utilidades
dsniff, así que:
sudo apt-get install dsniff
Como vamos a ponernos en el medio de las comunicaciones y debemos dejar pasar el tráfico, activamos el forwarding IPv4
echo 1 > /proc/sys/net/ipv4/ip_forward
Ahora tenemos que convencer al
HostB de que el gateway de salida
GW somos nosotros (
HostA) y al gateway de salida
GW le tenemos que convencer de que el
HostB somos nosotros (
HostA).
Así que ahora tenemos que dejar ejecutando de forma continua los siguientes comandos (podemos lanzar cada uno en un shell/session diferente):
arpspoof -i eth1 -t HostBIP GWIP
arpspoof -i eth1 -t GWIP HostBIP
Siendo HostBIP la ip del
HostB y GWIP la ip del gateway de salida
GW. El interface de red a usar, en este caso eth1, es el correspondiente al interface que este conectado a la misma red que el
GW y el
HostB.
Esperamos unos segundetes, medio minuto o así, a que todos los implicados actualicen sus tablas arp y finalmente ya podemos ponernos a capturar tráfico desde otro shell/sesión:
tcpdump -i eth1 host HostBIP and not arp