TCPflow - Analizirajte in odpravite napake v omrežnem prometu v Linuxu


TCPflow je brezplačno odprtokodno orodje za analizo omrežnega prometa v sistemih, podobnih Unixu, kot je Linux, ki temelji na ukazni vrstici. Zajema podatke, prejete ali prenesene prek povezav TCP, in jih shrani v datoteko za kasnejšo analizo v uporabni obliki, ki omogoča analizo protokola in odpravljanje napak.

Pravzaprav je orodje, podobno tcpdumpu, saj obdeluje pakete iz žice ali iz shranjene datoteke. Podpira iste zmogljive izraze filtriranja, ki jih podpira njegov kolega. Edina razlika je v tem, da tcpflow razporedi vse pakete TCP in vsak tok sestavi v ločeno datoteko (datoteko za vsako smer toka) za kasnejšo analizo.

Njegov nabor funkcij vključuje napredni vtični sistem za dekompresijo stisnjenih povezav HTTP, razveljavitev kodiranja MIME ali priklic programov drugih proizvajalcev za naknadno obdelavo in še veliko več.

Obstaja veliko primerov uporabe tcpflow, ki vključujejo razumevanje tokov omrežnih paketov ter podporo za izvajanje forenzike omrežja in razkrivanje vsebine sej HTTP.

Kako namestiti TCPflow v sisteme Linux

TCPflow je na voljo v uradnih skladiščih običajnih distribucij GNU/Linux, lahko ga namestite z upraviteljem paketov, kot je prikazano.

$ sudo apt install tcpflow	#Debian/Ubuntu
$ sudo yum install tcpflow	#CentOS/RHEL
$ sudo dnf install tcpflow	#Fedora 22+

Po namestitvi tcpflow ga lahko zaženete s pravicami superpotrošnika, sicer uporabite ukaz sudo. Upoštevajte, da posluša na aktivnem omrežnem vmesniku (na primer enp0s3).

$ sudo tcpflow

tcpflow: listening on enp0s3

Privzeto tcpflow shrani vse zajete podatke v datoteke z imeni v obliki (to je lahko drugače, če uporabljate določene možnosti, na primer časovni žig).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Zdaj naredimo seznam imenikov, da vidimo, ali je bil tok tcp zajet v kateri koli datoteki.

$ ls -1

total 20
-rw-r--r--. 1 root    root     808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root    root      59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920

Kot smo že omenili, je vsak tok TCP shranjen v svoji datoteki. Iz zgornjega izhoda lahko vidite, da obstajajo tri datoteke prepisa, ki označujejo tcpflow v dveh nasprotnih smereh, kjer sta izvorni IP v prvi datoteki in ciljni IP v drugi datoteki in obratno.

Prva datoteka 192.168.043.031.52920-216.058.210.034.00443 vsebuje podatke, prenesene iz gostitelja 192.168.043.031 (lokalnega gostitelja, na katerem je bil zagnan tcpflow) prek vrat 52920, do gostitelja 216.058.210.034 (oddaljenega gostitelja) prek vrat 443.

Druga datoteka 216.058.210.034.00443-192.168.043.031.52920 vsebuje podatke, poslane z gostitelja 216.058.210.034 (oddaljenega gostitelja) prek vrat 443 na gostitelja 192.168.043.031 (lokalnega gostitelja, na katerem je bil zagnan tcpflow) prek vrat 52920.

Ustvarjeno je tudi poročilo XML, ki vsebuje informacije o programu, na primer o tem, kako je bil sestavljen, računalniku, na katerem je bil zagnan, in zapis o vsaki povezavi tcp.

Kot ste morda opazili, tcpflow datoteke pripisov privzeto shrani v trenutni imenik. Možnost -o vam lahko pomaga določiti izhodni imenik, kamor bodo zapisane datoteke prepisov.

$ sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files

total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root   45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root   68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root  573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root   38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml

Vsebino paketov lahko tudi natisnete v stdout, ko jih prejmete, ne da bi shranili zajete podatke v datoteke, tako da uporabite zastavico -c , kot sledi.

Če želite to učinkovito preveriti, odprite drugi terminal in zaženite ping ali brskajte po internetu. Videti bi morali podatke o pingu ali podrobnosti brskanja, ki jih zajame tcpflow.

$ sudo tcpflow -c

Možno je zajeti ves promet na določenih vratih, na primer vrata 80 (HTTP). V primeru prometa HTTP boste lahko videli glave HTTP, ki jim sledi vsebina na izhodu ali v eni datoteki, če je stikalo -c odstranjeno.

$ sudo tcpflow port 80

Če želite zajeti pakete iz določenega omrežnega vmesnika, uporabite zastavico -i , da določite ime vmesnika.

$ sudo tcpflow -i eth0 port 80

Določite lahko tudi ciljnega gostitelja (sprejete vrednosti so naslov IP, ime gostitelja ali domene), kot je prikazano.

$ sudo tcpflow -c host 192.68.43.1
OR
$ sudo tcpflow -c host www.google.com 

Vso obdelavo lahko omogočite z vsemi skenerji z zastavico -a , kar je enako stikalu -e all.

$ sudo tcpflow -a  
OR
$ sudo tcpflow -e all

Lahko se aktivira tudi poseben skener; razpoložljivi optični bralniki vključujejo md5, http, netviz, tcpdemux in wifiviz (za ogled podrobnih informacij o vsakem skenerju zaženite tcpflow -H).

$ sudo tcpflow -e http
OR
$ sudo tcpflow -e md5
OR
$ sudo tcpflow -e netviz
OR
$ sudo tcpflow -e tcpdemux
OR
$ sudo tcpflow -e wifiviz

Naslednji primer prikazuje, kako omogočiti vse optične bralnike, razen tcpdemuxa.

$ sudo tcpflow -a -x tcpdemux 

TCPflow običajno poskuša preusmeriti omrežni vmesnik v promiskuiteten način, preden zajame pakete. To lahko preprečite z zastavico -p , kot je prikazano.

$ sudo tcpflow -p -i eth0

Za branje paketov iz pcap datoteke tcpdump uporabite zastavico -r .

$ sudo tcpflow -f file.pcap

Natančen način lahko omogočite z možnostmi -v ali -d 10 .

$ sudo tcpflow -v
OR
$ sudo tcpflow -d 10

Pomembno: Ena omejitev tcpflow je, da trenutno ne razume fragmentov IP, zato podatki, poslani kot del povezav TCP, ki vsebujejo fragmente IP, ne bodo pravilno zajeti.

Za več informacij in možnosti uporabe si oglejte man stran tcpflow.

$ man tcpflow 

Skladišče TCPflow Github: https://github.com/simsong/tcpflow

To je vse za zdaj! TCPflow je zmogljiv zapisovalnik toka TCP, ki je uporaben za razumevanje tokov omrežnih paketov in opravljanje omrežne forenzike in še veliko več. Preizkusite in v komentarjih delite z nami svoje mnenje o tem.