Nëse drejtoni një server, pa dyshim do të arrini në një pikë ku duhet të zgjidhni disa probleme të lidhura me rrjetin. Sigurisht që do të ishte e lehtë të shkrepje vetëm një postë në departamentin e mbështetjes, por ndonjëherë duhet të ndotni duart. Në këtë rast, tcpdumpështë mjeti për atë punë. Tcpdump është një analizues i paketave të rrjetit që funksionon nën vijën e komandës.
Ky artikull do të ndahet në tri pjesë:
- Karakteristikat themelore.
- Filtrim bazuar në karakteristika të caktuara të trafikut.
- Një fragment i shkurtër i veçorive më të avancuara (të tilla si shprehjet logjike, filtrimi sipas flamujve TCP).
Meqenëse tcpdump nuk përfshihet në shumicën e sistemeve bazë, do t'ju duhet ta instaloni atë. Sidoqoftë, pothuajse të gjitha shpërndarjet Linux kanë tcpdump në depot e tyre thelbësore. Për shpërndarjet e bazuara në Debian, komanda për të instaluar tcpdump është:
apt-get install tcpdump
Për CentOS/RedHat, përdorni komandën e mëposhtme:
yum install tcpdump
FreeBSD ofron një paketë të para-ndërtuar e cila mund të instalohet duke lëshuar:
pkg install tcpdump
Ekziston gjithashtu një port i disponueshëm, i net/tcpdumpcili mund të instalohet nëpërmjet:
cd /usr/ports/net/tcpdump
make install clean
Nëse vraponi tcpdumppa asnjë argument, do të goditeni me rezultate. Ekzekutimi i tij në një shembull të sapo rrotulluar këtu në Vultr për më pak se pesë sekonda jep rezultatet e mëposhtme:
2661 packets captured
2663 packets received by filter
0 packets dropped by kernel
Përpara se të hyni në më shumë detaje se si të filtroni hyrjen, duhet t'i hidhni një sy disa parametrave që mund t'i kalohen tcpdump:
-i- Përcakton ndërfaqen në të cilën dëshironi të dëgjoni, për shembull: tcpdump -i eth0.
-n- Mos u përpiqni të bëni kërkime të kundërta në adresat IP, për shembull: tcpdump -n(nëse shtoni një ntcpdump tjetër, do t'ju tregojë numrat e portave në vend të emrave).
-X- Trego përmbajtjen e paketave të mbledhura: tcpdump -X.
-c- Kapni vetëm xpaketa, xduke qenë një numër arbitrar, për shembull tcpdump -c 10kap saktësisht 10 pako.
-v- Rritni sasinë e informacionit të paketës që ju shfaqet, më shumë vs shtoni më shumë folje.
Secili prej këtyre parametrave të përmendur këtu mund të kombinohet së bashku. Nëse dëshironi të kapni 100 pako, por vetëm në ndërfaqen tuaj VPN tun0, atëherë komanda tcpdump do të dukej kështu:
tcpdump -i tun0 -c 100 -X
Ka dhjetëra (nëse jo qindra) opsione përveç atyre pak, por ato janë më të zakonshmet. Mos ngurroni të lexoni faqen e menaxhimit të tcpdump në sistemin tuaj.
Tani që keni një kuptim bazë të tcpdump, është koha të shikoni një nga veçoritë më të mrekullueshme të tcpdump: shprehjet. Shprehjet do ta bëjnë jetën tuaj shumë më të lehtë. Ata njihen gjithashtu si filtra të paketave BPF ose Berkeley. Përdorimi i shprehjeve ju lejon të shfaqni (ose injoroni) në mënyrë selektive paketat bazuar në karakteristika të caktuara - të tilla si origjina, destinacioni, madhësia, apo edhe numri i sekuencës TCP.
Deri më tani keni arritur të kufizoni kërkimin tuaj në një sasi të caktuar paketash në një ndërfaqe të caktuar, por le të jemi të sinqertë këtu: kjo ende lë shumë zhurmë në sfond për të punuar në mënyrë efektive me të dhënat e mbledhura. Këtu hyjnë në lojë shprehjet. Koncepti është mjaft i drejtpërdrejtë, kështu që ne do ta lëmë jashtë teorinë e thatë këtu dhe do ta mbështesim kuptimin me disa shembuj praktikë.
Shprehjet që ndoshta do të përdorni më shumë janë:
host - Kërkoni trafik bazuar në emrat e hosteve ose adresat IP.
srcose dst- Kërkoni trafik nga ose drejt një hosti specifik.
proto- Kërkoni trafikun e një protokolli të caktuar. Punon për tcp, udp, icmp dhe të tjerët. Heqja e protofjalës kyçe është gjithashtu e mundur.
net - Kërkoni për trafik në / nga një gamë e caktuar adresash IP.
port - Kërkoni trafik për / nga një port i caktuar.
greaterose less- Kërkoni për trafik më të madh ose më të vogël se një sasi e caktuar bajtësh.
Ndërsa faqja e menaxhimit për tcpdumppërmban vetëm disa shembuj, faqja e menaxhimit për pcap-filterka shpjegime shumë të hollësishme se si funksionon dhe mund të aplikohet secili filtër.
Nëse doni të shihni se si po shkon komunikimi juaj me një server të caktuar, atëherë mund të përdorni fjalën hostkyçe, për shembull (duke përfshirë disa nga parametrat nga lart):
tcpdump -i eth0 host vultr.com
Ndonjëherë ka kompjuterë në rrjet që nuk respektojnë MTU-në ose ju dërgojnë mesazhe të padëshiruara me pako të mëdha; filtrimi i tyre ndonjëherë mund të jetë i vështirë. Shprehjet ju lejojnë të filtroni paketat që janë më të mëdha ose më të vogla se një numër i caktuar bajtësh:
tcpdump -i eth0 -nn greater 128
or
tcpdump -i eth0 -nn less 32
Ndoshta vetëm një port i caktuar është me interes për ju. Në këtë rast, përdorni portshprehjen:
tcpdump -i eth0 -X port 21
Ju gjithashtu mund të shikoni për vargjet e porteve:
tcdump -i eth0 -X portrange 22-25
Meqenëse portat NAT janë mjaft të zakonshme, mund të kërkoni vetëm portet e destinacionit:
tcpdump dst port 80
Nëse jeni duke parë trafikun në serverin tuaj të internetit, mund të dëshironi të shikoni vetëm trafikun TCP në portin 80:
tcpdump tcp and dst port 80
Ju ndoshta po pyesni veten se çfarë andpo bën fjala kyçe atje. Pyetje e mirë. Kjo na çon në pjesën e fundit të këtij artikulli.
tcpdump ofron mbështetje bazë për shprehjet logjike, më konkretisht:
and/ &&- Logjike "dhe".
or/ ||- Logjike "ose".
not/ !- Logjike "jo".
Së bashku me aftësinë për të grupuar shprehjet së bashku, kjo ju lejon të krijoni kërkime shumë të fuqishme për trafikun në hyrje dhe në dalje. Pra, le të filtrojmë trafikun që vjen nga vultr.com në portin 22 ose 443:
tcpdump -i eth0 src host vultr.com and (dst port 22 or 443)
Ekzekutimi i kësaj në vijën e komandës do t'ju japë gabimin e mëposhtëm:
bash: syntax error near unexpected token `('
Kjo sepse ka një paralajmërim: bashpërpiqet të vlerësojë çdo personazh që mundet. Kjo përfshin (dhe )personazhet. Për të shmangur këtë gabim, duhet të përdorni thonjëza të vetme rreth shprehjes së kombinuar:
tcpdump -i eth0 'src host vultr.com and (dst port 22 or 443)'
Një shembull tjetër i dobishëm: Kur korrigjoni problemet e SSH me një nga përdoruesit tuaj, mund të dëshironi të injoroni gjithçka që lidhet me seancën tuaj SSH:
tcpdump '!(host $youripaddress) && port 22)'
Përsëri, rastet e përdorimit janë të pafundme, dhe ju mund të specifikoni në thellësi ekstreme se çfarë lloj trafiku dëshironi të shihni. Komanda e mëposhtme do t'ju tregojë vetëm paketat SYNACK të një shtrëngimi duarsh TCP:
tcpdump -i eth0 'tcp[13]=18'
Kjo funksionon duke parë kompensimin e trembëdhjetë të kokës TCP dhe bajtin e tetëmbëdhjetë brenda tij.
Nëse e keni arritur deri këtu, atëherë jeni gati për shumicën e rasteve të përdorimit që do të shfaqen. Mezi mund ta prek sipërfaqen pa hyrë në shumë detaje. Unë rekomandoj shumë që të eksperimentoni me opsionet dhe shprehjet e ndryshme pak më tej; dhe si zakonisht: referojuni faqes së menaxhimit kur humbisni.
E fundit por jo më pak e rëndësishme - një vështrim i shpejtë pas. E mbani mend fillimin e këtij artikulli? Me mijëra pako të kapur në pak sekonda? Fuqia e tcpdumpmund ta shkurtojë atë shumë:
tcpdump -i eth0 tcp port 22
Rezultati është tani:
81 packets captured
114 packets received by filter
0 packets dropped by kerne
Kjo është shumë më e arsyeshme dhe më e lehtë për tu korrigjuar. Gëzuar rrjetëzimin!