GNU/Linux >> Tutoriales Linux >  >> Linux

Filtrando tcpdump:creando orden a partir del caos

En mi último artículo, Solución de problemas con tcpdump, miré el tcpdump herramienta, algunos casos de uso básicos y recorrí una maqueta de un escenario del mundo real. Ahora, quiero profundizar un poco más. Todos los que usan esta herramienta en una situación real notan inmediatamente cuánta información (creo que llaman a esto "detallado"...) se le presenta al usuario. Una de las mejores cosas que puede hacer por sí mismo es descubrir una forma práctica de filtrar la información que necesita. Veamos algunas formas en las que puedes hacer esto.

Opciones de filtrado comunes

El tcpdump La herramienta tiene varias formas integradas diferentes para filtrar la captura en sí. Esto significa que puede reducir la información que recibe incluso antes de que comience la captura. Esto es muy preferible y hace que el filtrado posterior a la captura sea un proceso mucho menos tedioso. Algunos de los filtros de captura previa que puede utilizar son los siguientes:

Para filtrar por dirección IP:

$ sudo tcpdump host x.x.x.x

Para filtrar por interfaz:

$ sudo tcpdump -i eth0

Para filtrar por fuente:

$ sudo tcpdump src x.x.x.x

Para filtrar por destino:

$ sudo tcpdump dst x.x.x.x

Para filtrar por protocolo:

$ sudo tcpdump icmp

Esta lista no cubre todas las opciones disponibles, pero le brinda un buen punto de partida. A continuación, veamos algunas de las otras formas en que podemos manipular la captura.

Escribir capturas en un archivo (pcap)

Debido a la naturaleza de la resolución de problemas, me resulta útil documentar lo que veo al capturar con tcpdump . Afortunadamente, tcpdump tiene un formato de archivo de salida que captura todos los datos que vemos. Este formato se denomina captura de paquetes archivo, también conocido como PCAP, y se usa en varias utilidades, incluidos analizadores de red y tcpdump . Aquí, estamos escribiendo en un archivo PACAP llamado output_file usando el -w cambiar.

[root@server ~]# tcpdump -i enp0s8 -c100 -nn -w output_file
tcpdump: listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
102 packets received by filter
0 packets dropped by kernel

Lectura de archivos pcap

Puede leer archivos PCAP usando -r cambiar. Solo un aviso:si intenta leer un archivo PCAP a través de medios convencionales (cat , Vim, etc.), recibirá un galimatías ilegible. Si desea utilizar esos programas para ver su salida, siga leyendo.

$ tcpdump -r output_file

Escribir tcpdump en .txt

Si desea utilizar medios convencionales para leer su archivo de salida, debe volver a ejecutar tcpdump , excluyendo -w bandera. Puede ver a continuación que usamos el formato de archivo de salida estándar con el nombre de archivo output.txt .

[root@server ~]# tcpdump -i enp0s8 -c100 -nn > output.txt
  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
  100 packets captured
  102 packets received by filter
  0 packets dropped by kernel

Ejemplo

Antes de continuar, quiero explicar el escenario que he establecido para el resto de este artículo. Tenemos tres máquinas virtuales ejecutándose en la misma red. Tanto el Cliente 1 como el Cliente 2 harán ping al servidor sin parar. Capturaremos el tráfico ICMP en la interfaz enp0s8 en la máquina virtual del servidor y luego filtre los paquetes de cada máquina cliente. Me doy cuenta de que este es un ejercicio bastante simple, pero los principios se pueden aplicar a entornos más complejos del mundo real.

  • Servidor - 172.25.1.5
  • Cliente 1 - 172.25.1.4
  • Cliente 2 - 172.25.1.7

A continuación, observamos los dos comandos utilizados para generar nuestras capturas:

  1. Escribir en archivo PCAP - tcpdump -i enp0s8 -c100 -nn -w output_file
  2. Escribir en archivo TXT - tcpdump -i enp0s8 -c100 -nn > output.txt

La única diferencia notable aquí es el formato de salida. Verá que capturamos el tráfico en la interfaz enp0s8 y que limitamos la captura a 100 paquetes sin nombre ni resolución de puerto. Ahora, filtremos nuestro archivo solo para el tráfico del Cliente 1.

Para hacer esto, usamos una de dos cadenas de comando (dependiendo del formato de archivo de nuestra captura):

Filtrar salida PCAP - tcpdump -r output_file | grep -i 172.25.1.4

[root@server ~]# tcpdump -r output_file | grep -i 172.25.1.4
reading from file output_file, link-type EN10MB (Ethernet)
22:01:14.947643 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 109, length 64
22:01:14.947704 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 109, length 64
22:01:16.023097 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 110, length 64
22:01:16.023153 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 110, length 64
22:01:17.081338 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 111, length 64
22:01:17.081386 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 111, length 64
22:01:18.103740 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 112, length 64
22:01:18.103784 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 112, length 64
22:01:19.128568 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 113, length 64
22:01:19.128646 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 113, length 64
22:01:20.129531 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 114, length 64
22:01:20.129577 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 114, length 64
22:01:21.175573 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 115, length 64
22:01:21.175631 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 115, length 64
22:01:22.199852 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 116, length 64
22:01:22.199899 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 116, length 64
22:01:23.231032 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 117, length 64
22:01:23.231083 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 117, length 64
22:01:24.247585 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 118, length 64
22:01:24.247660 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 118, length 64
22:01:25.248875 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 119, length 64
22:01:25.248937 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 119, length 64
22:01:26.295889 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 120, length 64
22:01:26.295946 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 120, length 64
22:01:27.255274 ARP, Request who-has server.example.com tell 172.25.1.4, length 46

*Edited for length*

o

Filtrar salida TXT - cat output.txt | grep -i 172.25.1.4

[root@server ~]# cat output.txt | grep -i 172.25.1.4
12:03:56.653494 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 342, length 64
12:03:56.653534 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 342, length 64
12:03:57.674036 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 343, length 64
12:03:57.674089 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 343, length 64
12:03:58.701049 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 344, length 64
12:03:58.701107 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 344, length 64
12:03:59.721996 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 345, length 64
12:03:59.722134 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 345, length 64
12:04:00.746748 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 346, length 64
12:04:00.746805 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 346, length 64
12:04:01.774055 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 347, length 64
12:04:01.774130 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 347, length 64
12:04:02.793968 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 348, length 64
12:04:02.794012 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 348, length 64
12:04:03.846026 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 349, length 64
12:04:03.846082 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 349, length 64
12:04:04.918800 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 350, length 64
12:04:04.918850 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 350, length 64
12:04:05.930499 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 351, length 64
12:04:05.930543 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 351, length 64
12:04:06.954222 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 352, length 64
12:04:06.954269 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 352, length 64
12:04:07.990890 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 353, length 64
12:04:07.990937 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 353, length 64
12:04:09.002781 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 354, length 64
12:04:09.002842 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 354, length 64
12:04:10.032385 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 355, length 64
12:04:10.032451 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 355, length 64
12:04:11.055533 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 356, length 64
12:04:11.055583 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 356, length 64
12:04:12.074288 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 357, length 64

*Edited for length*

Para verificar el tráfico hacia/desde el Cliente 2, solo necesitamos cambiar la dirección IP en el grep consulta. Este método funciona para nombres de host, números de puerto y cualquier otra palabra clave que encuentre en el archivo de captura. Este ejemplo en particular muestra el poder del filtrado previo y posterior. El filtrado previo ocurre cuando solo capturamos sobre una interfaz específica, y el filtrado posterior ocurre cuando aplicamos un grep consulta al archivo de captura.

La comida para llevar

Lo que espero comunicar es que tcpdump es una herramienta increíblemente poderosa. Aún así, las tecnologías poderosas a menudo están plagadas de información que podría no aplicarse a su necesidad específica. Con un poco de reflexión y planificación, puede prefiltrar su captura para reducir la cantidad de tráfico capturado y luego usar un grep inteligente. o awk Consulta en el archivo de salida para encontrar rápidamente las interacciones de tráfico que estás buscando. Estas estrategias, cuando se aplican correctamente, pueden acelerar exponencialmente los esfuerzos de resolución de problemas. Ahora, espero que no tengas que poner esto en práctica pronto.

[ Aprenda a agregar automatización a su conjunto de herramientas de red con este libro electrónico gratuito. ]


Linux
  1. Creación de un archivo CSR de certificado web.

  2. ¿Reemplazar líneas que coinciden con un patrón con líneas de otro archivo en orden?

  3. ¿Cómo catear un archivo de Awk?

  4. Awk de diferentes líneas?

  5. Recuperar nombre de archivo del descriptor de archivo en C

Cómo quitar (^M) caracteres de un archivo en Linux

¿Leyendo patrones Grep de un archivo?

Creación de un servidor en la nube a partir de una ISO

Cómo bloquear a un usuario no root para que no cree una entrada crontab en Linux

copiar archivo de windows a linux

xauth no crea el archivo .Xauthority