2010-05-18

Análisis de Redes con TCPDUMP

En muchas ocasiones es complicado determinar algo que nos afecta la red sin revisar exactamente que esta pasando en está y al mismo tiempo aprender a leer el trafico capturado por una herramienta como tcpdump no es muy simple, acá pretendo explicar lo básico para que puedan aprovecharlo y empezar a usar esta poderosa herramienta de diagnostico.

Lo primero es explicar que es tcpdump, este es un comando que nos permite ver en tiempo real el contenido de los paquetes que pasan por una interfaz del sistema de forma boleana. Teniendo claro esto su uso habitual es de la siguiente forma:

root@localhost:~# tcpdump -i eth0

Lo que nos genera una serie de lineas que contienen la siguiente estructura
tiempo protocolo  origen > destino : información del paquete
Como se ve en la siguiente imagen de una salida tradicional



yo uso el -nnnnn al final por que prefiero que todo salga en numeros y no por ejemplo el nombre que resuelve dicha IP o el puerto y demás.

Como en cualquier analizador de trafico uno puede colocar filtro, obviamente unos mucho mas complejos que otros y algunos mas efectivos que otros, lo filtros que mas se usan (que yo mas uso) son los siguientes

host -> Te permite colocar la IP de la que deseas ver el trafico
proto -> Te permite ver el trafico de un protocolo determinado, para esto debes colocar el nombre del protocolo en mayúsculas, así UDP, TCP, ICMP .....
port -> Te permite seleccionar un puerto especifico

también existen conectores lógicos como and y como or y negación para eliminar algo especifico que acá se coloca con el símbolo de admiración (!), un posible ejemplo seria el siguiente

root@localhost:~# tcpdump -i eth0 host 74.58.69.32 and (proto TCP or proto UDP) and ! port 22 -nnnn

esto nos mostrara el trafico de la IP 74.58.69.32 en TCP o UDP excepto por el puerto 22. Les voy a mostrar unos ejemplos de capturas que permiten ver como esta herramienta nos permite revisar 

empezaremos con el trafico generado por un ping, aunque acá el filtro lo coloque con host si se hubiera colocado proto ICMP el resultado es el mismo



Acá veremos como es el trafico de UDP, donde se ven conexiones al puerto 53 que es de DNS y otras conexiones que se establecen en el sistema



Para filtrar el trafico de DNS hay que realizar el siguiente filtro


La primera linea es la solicitud de resolución con código 8250 el símbolo (+) es que esta es recursiva, en la segunda linea esta la respuesta del servidor donde se ve un segmento 1/1/0 que quieren decir el primero es que el tiene la respuesta, el segundo que se ha encontrado un servidor autorizado para responder y el último que no existen otros servidores registrados que tengan esta información.

Otro filtro útil para los administradores de red, es saber quien esta en MSN, eso se conecta por el puerto 1863, entonces es así

Los últimos filtro que les voy a mostrar es sobre el trafico TCP, en la siguiente imagen se ve una comunicación de principio a fin de TCP en el puerto 80 (HTTP), donde se ve desde el Syn hasta el Fin.


Como todos saben la comunicación de TCP tiene unas banderas en el Byte numero 13, con los siguientes datos


URG - Urgente         RST - Reset
ACK - Acknowleg     SYN - Sincronizar
PSH - Push               FIN -  Finalizar


Es así que para ver paquetes que solo contengan el SYN activo se debe colocar tcp[13] = 2, esto es 13 por el numero del Byte en la cabecera y el 2 por que es el decimal que significa ese bit activo. Para ver SYN-ACK seria tcp [13] == 18, que es por que le bit de ACK es 2^4 mas el de SYN que es 2^1 eso da 18. Bueno veremos un ejemplo aplicado pero les dejo que analicen por que ese filtro