Zaťažuje vám niečo sieť, a vy neviete čo? Účtuje vám provider podozrivo veľa dát? Tu je zopár tipov, ako prísť veci na kĺb.
V prvom rade si treba uvedomiť kde môžeme sledovať prevádzku na sieti.
Pri sledovaní prevádzky na sieti sa využíva malý trik. Požiadame ovládač sieťovej karty, aby nám podával informácie aj o paketoch, ktoré nie sú určené pre náš počítač. Za normálnych okolností sieťová karta z paketu vyberie cieľovú IP adresu. Porovná ju so svojou a ak nesedí, tak paket ignoruje. Ak však kartu nastavíme do promiskuitného módu, odovzdá operačného systému aj pakety s IP adresou inou. K tomu je, ale potrebné aby paket vôbec prišiel po kábli k nám. To sa napr. nestane, ak je náš počítač pripojený nie na obyčajný HUB, ale na switch.
Situácia je naopak značne lepšia ak náš počítač robí router či gateway. V takom prípade budú cezeň prechádzať pakety celej vnútornej siete.
Sledovanie prevádzky na sieti znamená, že budeme vidieť informácie, ktoré možno pôvodne neboli určené nám. Ak chceme vidieť viac, musíme vstúpiť do role správcu systému a prihlásiť sa ako root.
Základom je program tcpdump
(1). Je možné ho pustiť aj bez
parametrov a vie na štanardný výstup vypisovať hlavičky analyzovaných paketov -
konkrétne IP adresu odosielateľa, IP adresu príjemcu, cieľový port, ktorý určuje
protokol, príznaky paketu a podobne:
# tcpdump -i lo tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes 22:09:52.044246 IP ras.rastos.org > ras.rastos.org: icmp 64: echo request seq 9 22:09:52.044348 IP ras.rastos.org > ras.rastos.org: icmp 64: echo reply seq 9 ...
Zopár užitočných prepínačov:
Okrem prepínačov je, ale dôležitou zbraňou tcpdump-u logický výraz, ktorý filtruje, ktoré pakety tcpdump vypíše a ktoré nie. Tento logický výraz môže obsahovať rôzne kľúčové slová. Tu sú najzaujímavjšie z nich (úplný zoznam nájdete v manuálovej stránke programu tcpdump):
No a po toľkej teórii trocha praxe:
# tcpdump -i eth1 src 192.168.1.100 and not dst net 192.168.1.015:27:05.818983 10.0.0.137.ardus-trns > baym-cs109.msgr.hotmail.com.msnp: P 1189387552:1189387557(5) ack 2410608561 win 16658 (DF)15:27:05.827722 10.0.0.137.34044 > ns.telecom.sk.domain: 60701+ [1au] PTR? 109.106.46.207.in-addr.arpa. (56) (DF)15:27:05.943265 ns.telecom.sk.domain > 10.0.0.137.34044: 60701 1/5/6 (275) (DF)15:27:06.043767 baym-cs109.msgr.hotmail.com.msnp > 10.0.0.137.ardus-trns: P 1:9(8) ack 5 win 1683415:27:06.194852 10.0.0.137.ardus-trns > baym-cs109.msgr.hotmail.com.msnp: . ack 9 win 16650 (DF)...
Výpis z tcpdump-u teda máme. Medzi najzaujímavejšie údaje, ktoré v ňom nájdeme
patrí cieľový port. Ten vlastne napovedá aký druh dát chodí daným sieťovým
spojením. Ak ste použili prepínač -n a port je vyjadrený číslom, môžete sa
pozrieť do suboru /etc/services
, v ktorom nájdete popísanú väčšinu
portov. Pozor na to, že tento prevod možno použiť len na cieľový port paketu.
Samozrejme nie každý má chuť si pamätať všetky parametre, ktoré možno použiť pri programe tcpdump. Preto existujú grafické programy, ktoré sú užívateľsky prívetivejšie. Najznámejší je program ethereal.
Na obrázku je ethereal v činnosti. Najprv zaznamenáva pakety to dočasného súboru a potom ho znova prečíta a zobrazí zachytené sieťové spojenia. Zobrazuje aj popis jednotlivých polí paketov v binárnej aj textovej forme. Dokáže tiež analyzovať a zobraziť informácie z dátovej časti paketov a tak napríklad pre HTTP protokol môžeme vidieť URL a podobne. Podrobnejší popis ethereal-u je mimo rozsah tohoto článku (a mojich vedomostí).
Keď už vieme, aký druh dát nám chodí po sieti, môžeme sa pozrieť, aký program
ich prenáša. Pomôže nám k tomu program netstat
(8) a konkrétne jeho
prepínač -p, ktorý spôsobí vypísanie PID čísla procesu a meno programu v
poslednom stĺpci:
# netstat -t -p Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 gw.example.org:ssh foo.example.org:36153 ESTABLISHED 30217/sshd tcp 0 0 gw.example.org:143 foo.example.org:54419 ESTABLISHED 7407/imapd
Prepínač -t som použil preto aby som dostal len výpis spojení používajúcich TCP
protokol. Inak by výpis mohol byť podstatne dlhší. Použiť môžeme tiež prepínač
-n, ktorý zariadi vypisovanie adries a portov v číselnej forme. Všimnite si tiež
stĺpec State - slovo ESTABLISHED
hovorí, že spojenie je vytvorené
a stabilné. Môžu sa tam tiež vyskytovať slová TIME_WAIT
, ak sa
čaká napr. na ukončenie spojenia, či slovo LISTEN
, ak nejaký
program počúva na danom porte - čaká na vytvorenie spojenia. Pozor tiež na to,
že ak tieto programy spúšťate ako obyčajný užívateľ a nie root, môžete dostať
len informácie o svojich vlastných spojeniach či procesoch. Ak sme už
identifikovali program, ktorý dáta prenáša môžeme využiť program
ps
(1), ktorý nám môže povedať komu patrí daný proces. V závislosti
od nastavení systému je možné, že ten program zaznamenáva svoju činnosť do logu.
Konkrétnejšie informácie v tomto smere si už musíte pohľadať sami.
Ďalším spôsobom sledovania prevádzky po sieti je použitie modulu jadra s menom
netfilter
, ktorý implementuje firewall a nastavuje sa pomocou
iptabels
(8). Aby to celé fungovalo musí byť jadro skompilované so
správnymi voľbami. Voľby pre netfilter (a podporu pre súborový systém v /proc)
nájdeme takto:
Pre jadro 2.6: | Pre jadro 2.4: |
Device Drivers --> Networking support --> Networking options --> Network packet filtering --> IP: Netfilter Configuration File systems --> Pseudo filesystems --> /proc file system support |
Networking options --> IP: Netfilter Configuration File systems --> /proc file system support |
Základom je voľba nazvaná Connection tracking
. Oplatí sa tiež
voľba LOG target support
. Ak ich máte zapnuté a zodpovedajúce
moduly (ip_conntrack, ipt_LOG) su nahrané, nájdeme v adresári
/proc/net/
súbor s menom ip_conntrack. V ňom sú zaznamenané
sieťové spojenia o ktorých systém vie:
# cat /proc/net/ip_conntracktcp 6 56 SYN_RECV src=192.168.1.203 dst=68.202.158.96 sport=2938 dport=443 src=68.202.158.96 dst=10.0.0.137 sport=443 dport=2938 use=1tcp 6 431998 ESTABLISHED src=192.168.1.203 dst=68.202.158.96 sport=2934 dport=16732 src=68.202.158.96 dst=10.0.0.137 sport=16732 dport=2934 [ASSURED] use=1tcp 6 50 SYN_RECV src=192.168.1.203 dst=68.202.158.96 sport=2936 dport=80 src=68.202.158.96 dst=10.0.0.137 sport=80 dport=2936 use=1udp 17 2 src=192.168.1.202 dst=192.168.1.255 sport=137 dport=137 [UNREPLIED] src=192.168.1.255 dst=192.168.1.202 sport=137 dport=137 use=1tcp 6 431996 ESTABLISHED src=192.168.1.202 dst=207.46.107.48 sport=36074 dport=1863 src=207.46.107.48 dst=10.0.0.137 sport=1863 dport=36074 [ASSURED] use=1udp 17 2 src=192.168.1.199 dst=192.168.1.202 sport=137 dport=137 [UNREPLIED] src=192.168.1.202 dst=192.168.1.199 sport=137 dport=137 use=1tcp 6 431999 ESTABLISHED src=192.168.1.202 dst=192.168.1.199 sport=36153 dport=22 src=192.168.1.199 dst=192.168.1.202 sport=22 dport=36153 [ASSURED] use=3udp 17 86 src=192.168.1.202 dst=195.146.128.60 sport=32769 dport=53 src=195.146.128.60 dst=10.0.0.137 sport=53 dport=32769 [ASSURED] use=1tcp 6 102 TIME_WAIT src=192.168.1.202 dst=212.123.6.48 sport=36130 dport=80 src=212.123.6.48 dst=10.0.0.137 sport=80 dport=36130 [ASSURED] use=1udp 17 20 src=192.168.1.203 dst=81.202.65.109 sport=39156 dport=31154 src=81.202.65.109 dst=10.0.0.137 sport=31154 dport=39156 use=1tcp 6 70 SYN_SENT src=192.168.1.203 dst=61.149.202.208 sport=2733 dport=18281 [UNREPLIED] src=61.149.202.208 dst=10.0.0.137 sport=18281 dport=2733 use=1udp 17 2 src=192.168.1.203 dst=68.202.158.96 sport=39156 dport=16732 src=68.202.158.96 dst=10.0.0.137 sport=16732 dport=39156 use=1udp 17 20 src=192.168.1.213 dst=68.202.158.96 sport=57220 dport=16732 src=68.202.158.96 dst=10.0.0.137 sport=16732 dport=57220 use=1tcp 6 431937 ESTABLISHED src=192.168.1.202 dst=195.146.134.62 sport=36071 dport=6667 src=195.146.134.62 dst=10.0.0.137 sport=6667 dport=36071 [ASSURED] use=1
Podrobný popis významu jednotlivých polí možno nájsť na
netfilter.org
Stručne sa dá povedať, že prvé dve IP adresy sú z hlavičky paketu, ktorý odišiel
a druhé dve paketu, ktorý očakávame ako odpoveď. Vo výpise možno tiež vidieť
pakety v rôznych stavoch (TIME_WAIT
- čakajúce napr. na zánik,
SYN_SENT
- nadväzujúce spojenie), najzaujímavejšie sú v tomto
momente tie, ktoré majú stav ESTABLISHED
. Sú to spojenia, na ktorých
práve v tomto momente prebieha prenos dát.
Iptables tiež môžu mať vo svojich pravidlách zaradené pravidlo, ktoré spôsobí zapísanie informácie o pakete do systémového logu. Sú to pravidlé, ktoré ako cieľ pravidla majú uvedené rezervované slovo LOG.
iptables -N syslog iptables -A syslog -j LOG --log-level alert --log-prefix "Zaznamenany paket "
Pakety, ktoré pri prechode cez
iptables narazia na takéto pravidlo pošle systém logovaciemo programu
syslogd
. V konfiguračnom súbore /etc/syslogd.conf
potom možno nadefinovať ako budú tieto informácie zaznamenané:
# cat /etc/syslogd.conf ... kern.alert -/var/log/firewall ...
Pri takomto nastavení môžeme potom sledovať zaznamenané pakety v súbore
/var/log/firewall
# tail /var/log/firewallJan 1 14:16:15 foo kernel: Zaznamenany paket IN=ppp0 OUT= MAC= SRC=213.81.194.240 DST=213.81.165.63 LEN=48 TOS=0x00 PREC=0x00 TTL=125 ID=19199 DF PROTO=TCP SPT=4456 DPT=135 WINDOW=8760 RES=0x00 SYN URGP=0Jan 1 14:16:17 foo kernel: Zaznamenany paket IN=ppp0 OUT= MAC= SRC=213.81.132.239 DST=213.81.165.63 LEN=48 TOS=0x00 PREC=0x00 TTL=125 ID=46827 DF PROTO=TCP SPT=2432 DPT=445 WINDOW=8760 RES=0x00 SYN URGP=0Jan 1 14:16:17 foo kernel: Zaznamenany paket IN=ppp0 OUT= MAC= SRC=68.54.40.14 DST=213.81.165.63 LEN=48 TOS=0x00 PREC=0x00 TTL=111 ID=48092 DF PROTO=TCP SPT=1130 DPT=4899 WINDOW=64240 RES=0x00 SYN URGP=0Jan 1 14:16:18 foo kernel: Zaznamenany paket IN=ppp0 OUT= MAC= SRC=213.81.128.90 DST=213.81.165.63 LEN=48 TOS=0x00 PREC=0x00 TTL=123 ID=15690 DF PROTO=TCP SPT=3531 DPT=135 WINDOW=8760 RES=0x00 SYN URGP=0
ntop je ďalší nástroj, ktorý zobrazuje dianie na sieti. Zo zozbieraných údajov vytvára webové stránky, ktoré si možno prezerať pomocou ľubovoľného web browsera. Dáta zbiera buď priamo, alebo ich číta zo súboru s bežne používaným formátom - napr. pomocou tcpdump. Browseru ich poskytuje pomocou malého web servera. Ten je schopný poskytovať údaje cez http, ale aj cez https. Najviac sa mi na ňom páčilo, že vedel namapovať IP adresy na krajinu, v ktorej sa nachádza. Nepoznám ho tak dobre ako ostatné nástroje, tak vás skúsim nalákať aspoň zopár screenshotmi:
No a to je snáď všetko o nástrojoch, ktoré môžete použiť na sledovanie prevádzky na sieti.