Ha kiszolgálót futtat, kétségtelenül eljut arra a pontra, ahol meg kell szögezni néhány hálózattal kapcsolatos problémát. Természetesen könnyű lenne levelet küldeni a támogatási osztálynak, de néha be kell piszkolni a kezét. Ebben az esetben tcpdumpaz eszköz az adott feladathoz. A Tcpdump egy hálózati csomagelemző, amely a parancssor alatt fut.
Ez a cikk három részre oszlik:
- Alapvető funkciók.
- Szűrés bizonyos forgalmi jellemzők alapján.
- Egy rövid részlet a fejlettebb szolgáltatásokból (például logikai kifejezések, szűrés TCP-jelzők alapján).
Mivel a tcpdump nem szerepel a legtöbb alaprendszerben, telepítenie kell. Azonban szinte minden Linux-disztribúciónak van tcpdump az alapvető tárolójában. Debian alapú disztribúciók esetén a tcpdump telepítésének parancsa a következő:
apt-get install tcpdump
CentOS/RedHat esetén használja a következő parancsot:
yum install tcpdump
A FreeBSD egy előre elkészített csomagot kínál, amely a következő kiadással telepíthető:
pkg install tcpdump
Rendelkezésre áll egy port is, net/tcpdumpamely a következőn keresztül telepíthető:
cd /usr/ports/net/tcpdump
make install clean
Ha tcpdumpminden érvek nélkül futsz , akkor megtépáznak az eredmények. Ha öt másodpercnél rövidebb ideig fut egy frissen felpörgetett példányon a Vultr-on, a következő eredményeket kapja:
2661 packets captured
2663 packets received by filter
0 packets dropped by kernel
Mielőtt további részletekbe menne a bemenet szűrésével kapcsolatban, nézzen meg néhány paramétert, amelyek átadhatók a tcpdumpnak:
-i- Meghatározza a hallgatni kívánt felületet, például: tcpdump -i eth0.
-n- Ne próbáljon fordított keresést végezni az IP-címeken, például: tcpdump -n(ha hozzáad egy másikat, a ntcpdump portszámokat fog mutatni nevek helyett).
-X- Mutassa meg az összegyűjtött csomagok tartalmát: tcpdump -X.
-c- Csak a xcsomagok rögzítése , xmivel tetszőleges szám, például tcpdump -c 10pontosan 10 csomagot rögzít.
-v- Növelje a megjelenített csomaginformációk mennyiségét, több vs adjon több szóhasználatot.
Az itt említett paraméterek mindegyike kombinálható. Ha 100 csomagot szeretne rögzíteni, de csak a tun0 VPN-interfészen, akkor a tcpdump parancs így néz ki:
tcpdump -i tun0 -c 100 -X
Ezen a néhányon kívül több tucat (ha nem több száz) lehetőség létezik, de ezek a leggyakoribbak. Nyugodtan olvassa el a tcpdump kézikönyvét a rendszerén.
Most, hogy már rendelkezik a tcpdump alapvető ismereteivel, ideje megvizsgálni a tcpdump egyik legfantasztikusabb funkcióját: a kifejezéseket. A kifejezések sokkal könnyebbé teszik az életét. BPF vagy Berkeley csomagszűrőként is ismertek. A kifejezések használata lehetővé teszi a csomagok szelektív megjelenítését (vagy figyelmen kívül hagyását) bizonyos jellemzők – például eredet, cél, méret vagy akár TCP sorozatszám – alapján.
Eddig sikerült korlátoznia a keresést egy bizonyos mennyiségű csomagra egy bizonyos felületen, de legyünk őszinték: ez még mindig túl sok háttérzajt hagy az összegyűjtött adatok hatékony kezeléséhez. Itt jönnek képbe a kifejezések. A koncepció meglehetősen egyszerű, ezért itt hagyjuk ki a száraz elméletet, és néhány gyakorlati példával támogassuk a megértést.
A leggyakrabban használt kifejezések a következők:
host - Keresse a forgalmat gazdagépnevek vagy IP-címek alapján.
srcvagy dst- Keresse meg a forgalmat egy adott gazdagépről vagy egy adott gazdagépről.
proto- Keressen egy bizonyos protokoll forgalmát. Működik a tcp, udp, icmp és mások számára. A protokulcsszó elhagyása is lehetséges.
net - Keresse meg az IP-címek bizonyos tartományára irányuló/irányuló forgalmat.
port - Keresse meg a forgalmat egy adott kikötőbe/kikötőből.
greatervagy less- Keressen egy bizonyos bájtnál nagyobb vagy kisebb forgalmat.
Míg a manoldal tcpdumpcsak néhány példát tartalmaz, a manoldal pcap-filternagyon részletes magyarázatokat tartalmaz az egyes szűrők működéséről és alkalmazásáról.
Ha látni szeretné, hogyan zajlik a kommunikáció egy bizonyos szerverrel, akkor használhatja hostpéldául a kulcsszót (beleértve néhány fenti paramétert):
tcpdump -i eth0 host vultr.com
Néha vannak olyan számítógépek a hálózaton, amelyek nem tartják tiszteletben az MTU-t, vagy nagy csomagokkal küldenek spamet; kiszűrésük néha nehéz lehet. A kifejezések lehetővé teszik bizonyos számú bájtnál nagyobb vagy kisebb csomagok kiszűrését:
tcpdump -i eth0 -nn greater 128
or
tcpdump -i eth0 -nn less 32
Talán csak egy bizonyos kikötő érdekli Önt. Ebben az esetben használja a következő portkifejezést:
tcpdump -i eth0 -X port 21
A porttartományokra is figyelhet:
tcdump -i eth0 -X portrange 22-25
Mivel a NAT-átjárók meglehetősen gyakoriak, csak célportokat kereshet:
tcpdump dst port 80
Ha a webszerverre irányuló forgalmat figyeli, csak a 80-as port TCP-forgalmát érdemes megnéznie:
tcpdump tcp and dst port 80
Valószínűleg felteszi magának a kérdést, hogy mit andcsinál ott a kulcsszó . Jó kérdés. Ezzel el is érkeztünk a cikk utolsó részéhez.
tcpdump alapvető támogatást nyújt a logikai kifejezésekhez, pontosabban:
and/ &&- Logikai "és".
or/ ||- Logikai "vagy".
not/ !- Logikus "nem".
A kifejezések csoportosításának lehetőségével együtt ez nagyon hatékony keresést tesz lehetővé a bejövő és kimenő forgalom számára. Tehát szűrjük ki a vultr.com webhelyről érkező forgalmat a 22-es vagy 443-as porton:
tcpdump -i eth0 src host vultr.com and (dst port 22 or 443)
Ha ezt a parancssorban futtatja, a következő hibaüzenet jelenik meg:
bash: syntax error near unexpected token `('
Ez azért van, mert van egy figyelmeztetés: bashmegpróbál minden karaktert értékelni, amit csak tud. Ez magában foglalja a (és )karaktereket. A hiba elkerülése érdekében egyetlen idézőjeleket kell használnia a kombinált kifejezés körül:
tcpdump -i eth0 'src host vultr.com and (dst port 22 or 443)'
Egy másik hasznos példa: Amikor SSH-problémákat keres az egyik felhasználónál, érdemes figyelmen kívül hagynia mindent, ami az SSH-munkamenettel kapcsolatos:
tcpdump '!(host $youripaddress) && port 22)'
A felhasználási esetek ismételten végtelenek, és extrém mélységig megadhatja, hogy milyen forgalmat szeretne látni. A következő parancs csak a TCP kézfogás SYNACK csomagjait jeleníti meg:
tcpdump -i eth0 'tcp[13]=18'
Ez úgy működik, hogy a TCP fejléc tizenharmadik eltolását és a benne lévő tizennyolcadik bájtot nézzük.
Ha egészen idáig eljutott, készen áll a legtöbb felmerülő felhasználási esetre. Alig tudom megérinteni a felületet anélkül, hogy túl sok részletbe belemennék. Erősen ajánlom, hogy kísérletezzen kicsit tovább a különböző opciókkal és kifejezésekkel; és szokás szerint: hivatkozzon a manoldalra, ha eltéved.
Végül, de nem utolsósorban – egy gyors visszatekintés. Emlékszel a cikk elejére? A pillanatok alatt rögzített több ezer csomaggal? Az ereje tcpdumpnagyon lecsökkentheti ezt:
tcpdump -i eth0 tcp port 22
Az eredmény most:
81 packets captured
114 packets received by filter
0 packets dropped by kerne
Ez sokkal értelmesebb és könnyebben hibakereshető. Boldog hálózatépítést!