GNU/Linux >> Linux Esercitazione >  >> Linux

Filtraggio di tcpdump:creare ordine dal caos

Nel mio ultimo articolo, Risoluzione dei problemi con tcpdump, ho esaminato tcpdump strumento, alcuni casi d'uso di base e ho esaminato un modello di uno scenario del mondo reale. Ora, voglio scavare un po' più in là. Tutti coloro che utilizzano questo strumento in una situazione reale notano immediatamente quante informazioni (credo che lo chiamino "prolisso"...) vengono presentate all'utente. Una delle cose migliori che puoi fare per te stesso è trovare un modo pratico per filtrare le informazioni di cui hai bisogno. Diamo un'occhiata ad alcuni modi in cui puoi farlo.

Opzioni di filtro comuni

Il tcpdump lo strumento ha diversi modi integrati per filtrare l'acquisizione stessa. Ciò significa che puoi restringere le informazioni che ricevi prima ancora che inizi l'acquisizione. Questo è altamente preferibile e rende il filtraggio post-acquisizione un processo molto meno noioso. Alcuni dei filtri di pre-acquisizione che puoi utilizzare sono i seguenti:

Per filtrare per indirizzo IP:

$ sudo tcpdump host x.x.x.x

Per filtrare per interfaccia:

$ sudo tcpdump -i eth0

Per filtrare per fonte:

$ sudo tcpdump src x.x.x.x

Per filtrare per destinazione:

$ sudo tcpdump dst x.x.x.x

Per filtrare per protocollo:

$ sudo tcpdump icmp

Questo elenco non copre tutte le opzioni disponibili, ma fornisce un buon punto di partenza. Successivamente, esaminiamo alcuni degli altri modi in cui possiamo manipolare l'acquisizione.

Scrittura delle acquisizioni in un file (pcap)

A causa della natura della risoluzione dei problemi, trovo utile documentare ciò che vedo durante l'acquisizione con tcpdump . Fortunatamente, tcpdump ha un formato di file di output che cattura tutti i dati che vediamo. Questo formato è chiamato acquisizione di pacchetti file, noto anche come PCAP, e viene utilizzato in varie utilità, inclusi analizzatori di rete e tcpdump . Qui, stiamo scrivendo in un file PACAP chiamato file_output usando il -w interruttore.

[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

Lettura dei file pcap

Puoi leggere i file PCAP usando il -r interruttore. Solo un avvertimento:se provi a leggere un file PCAP con mezzi convenzionali (cat , Vim, ecc.), riceverai parole senza senso non leggibili. Se vuoi usare quei programmi per visualizzare il tuo output, continua a leggere.

$ tcpdump -r output_file

Scrittura di tcpdump in .txt

Se vuoi usare i mezzi convenzionali per leggere il tuo file di output, devi rieseguire tcpdump , escluso il -w bandiera. Di seguito puoi vedere che utilizziamo l'output standard in formato file con il nome del file 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

Esempio

Prima di andare oltre, voglio spiegare lo scenario che ho impostato per il resto di questo articolo. Abbiamo tre macchine virtuali in esecuzione sulla stessa rete. Sia il client 1 che il client 2 eseguiranno il ping del server senza interruzioni. Cattureremo il traffico ICMP sull'interfaccia enp0s8 sulla macchina virtuale server e quindi filtrare i pacchetti da ogni macchina client. Mi rendo conto che questo è un esercizio piuttosto semplice, ma i principi possono essere applicati ad ambienti del mondo reale più complessi.

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

Successivamente, esaminiamo i due comandi utilizzati per generare le nostre acquisizioni:

  1. Scrivi su file PCAP - tcpdump -i enp0s8 -c100 -nn -w output_file
  2. Scrivi su file TXT - tcpdump -i enp0s8 -c100 -nn > output.txt

L'unica differenza notevole qui è il formato di output. Vedete che abbiamo catturato il traffico sull'interfaccia enp0s8 e che abbiamo limitato l'acquisizione a 100 pacchetti senza nome o risoluzione della porta. Ora, filtriamo il nostro file solo in base al traffico dal Cliente 1.

Per fare ciò, utilizziamo una delle due stringhe di comando (a seconda del formato del file della nostra acquisizione):

Filtra output 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

Filtra output 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*

Per controllare il traffico da/verso il Client 2, dobbiamo solo cambiare l'indirizzo IP nel grep interrogazione. Questo metodo funziona per nomi host, numeri di porta e qualsiasi altra parola chiave che trovi nel file di acquisizione. Questo particolare esempio mostra la potenza del pre e post-filtraggio. Il prefiltro si verifica quando acquisiamo solo su un'interfaccia specifica e il postfiltro si verifica quando applichiamo un grep interrogare il file di acquisizione.

L'asporto

Quello che spero di comunicare è che tcpdump è uno strumento incredibilmente potente. Tuttavia, le potenti tecnologie sono spesso piene di informazioni che potrebbero non essere applicabili alle tue esigenze specifiche. Con un po' di riflessione e pianificazione, puoi prefiltrare l'acquisizione per restringere la quantità di traffico catturato, quindi utilizzare un grep intelligente o awk query sul file di output per trovare rapidamente le interazioni di traffico che stai cercando. Queste strategie, se applicate correttamente, possono accelerare esponenzialmente gli sforzi per la risoluzione dei problemi. Ora, spero che tu non debba metterlo in pratica in qualunque momento presto.

[ Scopri come aggiungere l'automazione al tuo toolkit di rete con questo ebook gratuito. ]


Linux
  1. Una guida per principianti alla creazione di reindirizzamenti in un file .htaccess

  2. Creazione di un file CSR del certificato Web.

  3. Ordine di reindirizzamento?

  4. Sostituire le righe che corrispondono a un motivo con le righe di un altro file in ordine?

  5. Come catturare un file da Awk?

Come rimuovere (^M) caratteri da un file in Linux

Leggere i modelli Grep da un file?

Creazione di un Cloud Server da una ISO

Come impedire a utenti non root di creare voci crontab in Linux

copiare il file da Windows a Linux

xauth non crea il file .Xauthority