Võrgudiagnostika
Sisukord
Sissejuhatus
Käesolev tekst on esitatud oma võrgu ja tulemüüride ning tcp/ip protokolli paremaks tundmaõppimiseks. Ühtlasi tutvustatakse programme, millega saab uurida, kas võrk töötab ning kui, siis kuidas see töötab. Näiteks hinnata andmevahetuskiirusi, kuulata Ethernetti pealt ja uurida millised pordid on serveritel lahti.
Ilmselt saab allpool esitatud õpetusi kasutada nii hea-kui kuritahtlikul eesmärgil, manitseme seda tegema mitte kuritahtlikult. Tavaliselt on tuvastatav, kust tehakse ping floodi või nmapiga masinad skanneeritakse.
Reeglina tuleb esitatud programme kasutada juurkasutajana. Näiteks toodud viiba järgi saab teada, kas programm on kasutatav ka tavakasutaja (bash$) või ainult juurkasutaja (bash#) õigustes.
tcpdump
Programm tcpdump (kuulub paljude operatsioonisüsteemide tarkvara põhiosa koosseisu) abil saab nö kuulata võrguseadmel pealt liiklust. Tulemust võib salvestada fail täies mahus või esitada ip paketti puudutavaid huvipakkuvaid andmeid programmi standardväljundisse. Oluline on tähele panna, et tcpdump kuulab liiklust seadel, st sisenevad paketid paistavad nii nagu nad olid enne RDR-teisendust ning väljuvad paketid on sellised nagu nad on peale NAT-teisendust.
tcpdump programmiga saab filtreerida liiklust selliste standardsete tunnuste järgi
- protokoll (nt icmp, tcp, udp, arp)
- andmevahetuse lähte ja sihtpunkti ip aadress
- andmevahetuse lähte ja sihtpunkti port
- ip paketi lippude järgi (nt salvestada vaid SYN pakette)
- paketi suurus
OpenBSD puhul lisanduvad järgmised võimalused
- paketifiltri reegli number,
- paketifiltri reegline määratud tegevus (pass, block, nat, rdr jt ning logitud liiklus)
ICMP
Kui näiteks on kahtlusi kas kaks arvutit, 192.168.10.210 ja 192.168.10.11 (vastav võrguseade olgu em0) näevad üksteist, siis tuleks arvutis 192.168.10.210 öelda
# ping 192.168.10.11 PING 192.168.10.11 (192.168.10.11): 56 data bytes 64 bytes from 192.168.10.11: icmp_seq=0 ttl=64 time=0.422 ms 64 bytes from 192.168.10.11: icmp_seq=1 ttl=64 time=0.306 ms
ning teises arvutis võrguseadmel em0 ICMP protokolli filtreerimiseks tuleb öelda
# tcpdump -nettti em0 icmp tcpdump: listening on em0, link-type EN10MB May 19 16:23:10.480585 00:0e:0c:ba:4b:3e 00:16:3e:6a:0c:4b 0800 98: 192.168.10.210 > 192.168.10.11: icmp: echo request May 19 16:23:10.480829 00:16:3e:6a:0c:4b 00:0e:0c:ba:4b:3e 0800 98: 192.168.10.11 > 192.168.10.210: icmp: echo reply May 19 16:23:11.490525 00:0e:0c:ba:4b:3e 00:16:3e:6a:0c:4b 0800 98: 192.168.10.210 > 192.168.10.11: icmp: echo request May 19 16:23:11.490639 00:16:3e:6a:0c:4b 00:0e:0c:ba:4b:3e 0800 98: 192.168.10.11 > 192.168.10.210: icmp: echo reply
Väljundina esitatakse
- paketi jälgimise aeg
- kummagi poole MAC aadressid
- paketi ethertype (0800 on ipv4 protokoll)
- paketi suurus baitides
- osaliste ip aadresid
- paketi sisulisemad andmed, antud juhul on tegu icmp echo pärginute ja vastustega
Antud juhul saab järeldada, et võrguühendus arvutite vahel on olemas. St kuigi ping ise näitab väljundit annab teises arvutis võrgu pealtkuulamine täieliku kinnituse, et paketid just sinna välja jõuavad.
TCP
tcpdump võimaldab kasutada avaldisi, millega peab pakett klappima, nt SYN pakettide jälgmiseks
# tcpdump -n -i em0 'tcp[13] & 2 != 0' and dst 10.0.6.180 and port 80
TCP liikluse tõlgendamine
22:05:25.828149 10.50.96.138.50215 > 10.184.32.82.80: S 1263958777:1263958777(0) win 5840 \ <mss 1460,sackOK,timestamp 787576523 0,nop,wscale 6> (DF) 22:05:25.845445 10.184.32.82.80 > 10.50.96.138.50215: S 1989118317:1989118317(0) ack 1263958778 win 5792 \ <mss 1460,sackOK,timestamp 539529245 787576523,nop,wscale 6> (DF) 22:05:25.845896 10.50.96.138.50215 > 10.184.32.82.80: . ack 1 win 92 <nop,nop,timestamp 787576527 539529245> (DF) 22:05:25.845908 10.50.96.138.50215 > 10.184.32.82.80: P 1:134(133) ack 1 win 92 <nop,nop,timestamp 787576527 539529245> (DF) 22:05:25.856417 10.184.32.82.80 > 10.50.96.138.50215: . ack 134 win 108 <nop,nop,timestamp 539529249 787576527> (DF) 22:05:25.862904 10.184.32.82.80 > 10.50.96.138.50215: . 1:1449(1448) ack 134 win 108 <nop,nop,timestamp 539529249 787576527> (DF) 22:05:25.863286 10.50.96.138.50215 > 10.184.32.82.80: . ack 1449 win 137 <nop,nop,timestamp 787576532 539529249> (DF) 22:05:25.868800 10.184.32.82.80 > 10.50.96.138.50215: . 1449:2897(1448) ack 134 win 108 <nop,nop,timestamp 539529249 787576527> (DF) 22:05:25.869206 10.50.96.138.50215 > 10.184.32.82.80: . ack 2897 win 182 <nop,nop,timestamp 787576533 539529249> (DF) 22:05:25.878659 10.184.32.82.80 > 10.50.96.138.50215: . 2897:4345(1448) ack 134 win 108 <nop,nop,timestamp 539529253 787576532> (DF) 22:05:25.879036 10.50.96.138.50215 > 10.184.32.82.80: . ack 4345 win 227 <nop,nop,timestamp 787576536 539529253> (DF) ...
kus
- esimene rida vastab ühenduse algatamise SYN paketile
- teine rida ...
- win 5840 - paketi saatja teatab paketi vastuvõtjale, et tal on puhvrit võtta ise pakette vastu 5840 baiti
ARP
Huvitav on tähele panna, et tcpdump tegeleb mitme protokolliga, nt ip (0800) ja arp (0806) protokolli pakettidega, mis on saadetud arp broadcast aadressile
# tcpdump -nei re0 ether host ff:ff:ff:ff:ff:ff tcpdump: listening on re0, link-type EN10MB 11:00:49.928582 00:0e:0c:b0:96:b6 ff:ff:ff:ff:ff:ff 0800 210: 192.168.10.10.631 > 192.168.10.255.631: udp 168 (DF) 11:01:08.024422 00:16:3e:00:00:01 ff:ff:ff:ff:ff:ff 0800 249: 192.168.10.41.138 > 192.168.10.255.138: udp 207 11:01:26.338380 00:1b:21:1d:f6:06 ff:ff:ff:ff:ff:ff 0806 60: arp who-has 192.168.10.254 tell 192.168.10.250
Kui tcpdump väljundit on vaja saata toru kaudu mõne teksti töötlevale programmile edasi on asjakohane kasutada lisaks -l võtit, mis puhverdab rea kaupa, nt
# tcpdump -nlei re0 ether host ff:ff:ff:ff:ff:ff | grep 0806
Liikluse salvestamine faili
Liikluse faili salvestamiseks sobib öelda nö tavalise MTU'ga (1,5 kBaiti) võrgus nt
# tcpdump -s 1600 -w /tmp/liilus.log -i em0 host 10.0.6.180 and port 80
Selliselt salvestatud liikluse analüüsimiseks sobib öelda nt
# tcpdump -r /tmp/liiklus.log
ping
Kuulub enamuse operatsioonisüsteemide pakettide hulka
Ping utiliidi abil saab hõlpasti veenduda, et kahe punkti vahel on füüsiliselt võrguühendus olemas. Ping kasutab andmevahetuseks ICMP (Internet Control Message Protocol) protokolli ja arusaadavalt ei tohi sellise kontrolli õnnestumiseks kahe punkti vahel olla ICMP protokolli kasutamine takistatud, täpsemini ICMP echo request ja ICMP echo reply sõnumite vahetamine.
Kasutamiseks tuleb ühes punktis öelda
# ping 192.168.10.11 PING 192.168.10.11 (192.168.10.11): 56 data bytes 64 bytes from 192.168.10.11: icmp_seq=0 ttl=64 time=3.922 ms 64 bytes from 192.168.10.11: icmp_seq=1 ttl=64 time=0.286 ms 64 bytes from 192.168.10.11: icmp_seq=2 ttl=64 time=0.274 ms 64 bytes from 192.168.10.11: icmp_seq=3 ttl=64 time=0.193 ms
Väljundist on näha, et pöördutud aadress vastab, vastused on järjekorras ja kadudeta saabunud ning vastuse saamise aeg on suhteliselt stabiilne. Võib järeldada, et võrk toimib.
Kasutades võtit -n ei püüa Ping lahendada nimesid, tihti seisneb võrgu nö mittetöötamine valesti konfigureeritud nimeserveris või nimeserveri mittekasutamises.
traceroute
Samuti enamuse operatsioonisüsteemides leiduv programm
Traceroute utiliidi abil saab jälgida, millistest võrgusõlmedest käib kahe punkti vahel toimuv liiklus läbi. Traceroute kasutab andmevahetuseks vaikimisi UDP protokolli ning asjaolu, et kui IP pakett läbib võrgusõlme, siis vähendatakse päises olevat TTL väärtust ühe võrra kusjuures kui võrgusõlme jõuab pakett, mille TTL väärtus on üks, siis saadetakse tagasi ICMP vastus
icmp: time exceeded in-transit
UDP pakett saadetakse vaikimisi porti 33434 (eeldades, et sihtpunktiks olevas arvutis ei kuula seal teenust). Esimese paketi TTL on väärtusega 1 ning 'icmp: time exceeded in-transit' saadakse vaikelüüsilt. Järgmise paketi TTL seatakse 2 ning 'icmp: time exceeded in-transit' saadakse järgmises võrgu sõlmpunktis asuvalt ruuterilt jne kuni lõpuks UDP puhul saadakse sihtpunktilt vastuseks
icmp: 172.168.1.1 udp port 33443 unreachable
UDP asemel on võimalik kasutada ka ICMP või TCP protokolli, aga UDP annab praktikas kõige paremaid tulemusi. Toome näite kasutades ICMP protokolli kuna liiklust sisaldavas võrgus on tulemust nii parem näha ja esitada. Ütleme arvuti ühes promptis
# traceroute -n -q 1 -I cache.eenet.ee traceroute to cache.eenet.ee (193.40.133.134), 64 hops max, 40 byte packets 1 195.80.102.33 0.494 ms 2 213.184.51.121 0.418 ms 3 194.116.188.19 0.524 ms 4 193.40.133.187 4.724 ms 5 193.40.133.134 3.760 ms
kus
- väljundis esitatakse järjekorras kõigi võrgusõlmede aadressid, mida pakett läbib sihtpunkti jõudmiseks; täpsemalt, need on võrgusõlmpunktide traceroute kasutaja poolsete võrguseadmede aadressid
- iga aadressi järel esitatakse vastuse tagasijõudmiseks kulunud aeg, kusjuures aeg esitatakse iga rea kohta eraldi st viimase rea aeg ei ole kõige aegade summa (antud juhul on see ka selgesti näha, et mingil põhjusel jõudis viimase hosti juurest vastus kiiremini tagasi kui eelviimasest)
Kuulates samas arvutis liiklust pealt teises promptis näeme
# tcpdump -nttti em3 icmp tcpdump: listening on em3, link-type EN10MB May 19 18:12:08.419036 195.80.102.35 > 193.40.133.134: icmp: echo request [ttl 1] May 19 18:12:08.419459 195.80.102.33 > 195.80.102.35: icmp: time exceeded in-transit [tos 0xc0] May 19 18:12:08.419659 195.80.102.35 > 193.40.133.134: icmp: echo request May 19 18:12:08.419957 213.184.51.121 > 195.80.102.35: icmp: time exceeded in-transit [tos 0xc0] May 19 18:12:08.420152 195.80.102.35 > 193.40.133.134: icmp: echo request May 19 18:12:08.420582 194.116.188.19 > 195.80.102.35: icmp: time exceeded in-transit May 19 18:12:08.420760 195.80.102.35 > 193.40.133.134: icmp: echo request May 19 18:12:08.424455 193.40.133.187 > 195.80.102.35: icmp: time exceeded in-transit May 19 18:12:08.424638 195.80.102.35 > 193.40.133.134: icmp: echo request May 19 18:12:08.428660 193.40.133.134 > 195.80.102.35: icmp: echo reply
Vahel esineb traceroute väljundis real * märk, mis tähendab, et vaatlusalune võrgusõlm ei vastanud 'icmp: time exceeded in-transit' teatega või see teade ei jõudnud kohale
# traceroute -n -q 1 -I www.eenet.ee traceroute to www.eenet.ee (193.40.0.131), 64 hops max, 60 byte packets 1 84.50.96.137 58.500 ms 2 88.196.144.137 5.230 ms 3 90.190.153.17 4.325 ms 4 195.250.191.17 8.805 ms 5 * 6 194.116.188.19 9.124 ms 7 193.40.133.187 11.953 ms 8 193.40.0.131 11.744 ms
tracepath
tracepath programmi abil saab teha kindlaks MTU väärtusi, paigaldamiseks tuleb Debian Lenny keskkonnas öelda
# apt-get install iputils-tracepath
Kasutamisene toimub selliselt
$ tracepath -n 192.168.1.4 1: 192.168.10.10 0.062ms pmtu 1500 1: 192.168.10.210 0.444ms 1: 192.168.10.210 0.220ms 2: 192.168.1.4 0.835ms reached Resume: pmtu 1500 hops 2 back 63
nmap
Programm nmap on populaarne võrgu kaardistamise vahend, mida võrguadministraatorid ja süsteemiadministraatorid armastavad kasutada teenuste kontrollimiseks, samuti diagnostikavahendina probleemide või kahtluste olemasolul. Lisaks tundub, et pahalased kasutavad sarnast võrgu kaardistamise vahendit ründe sihtmärkide kindlakstegemiseks. Nmap töö põhineb erinevate omadustega pakettide väljasaatmisel ning vastuste (sh saamatajätmise) analüüsil. Üldiselt võiks eristada kahte taset nmapi kasutamisel
- võrgus arvutite leidmine (ingl. k. host discovery)
- üksikute arvutite omaduste kindlakstegemine (nt millistel portidel pakutakse teenust) (ingl. k. port scanning)
Nmap ei kuulu enamuse operatsioonisüsteemi baaskonfiguratsiooni ning tuleb eelnevalt paketihalduse vahenditega paigaldada
võrgust arvutite leidmine
Võrgus arvutite kindlakstegemiseks on nmap'il kaks võtitit, -sL ja -sP
Selleks, et lihtsalt kuvada subnetis olevad ip aadressid koos pöördteisendustega, mingit skaneerimist ei toimu
# nmap -sL 192.168.1.0/24 Starting Nmap 4.53 ( http://insecure.org ) at 2008-06-23 22:30 EEST Host 192.168.1.0 not scanned Host sipsik.loomaaed.tartu.ee (192.168.1.1) not scanned Host www.loomaaed.tartu.ee (192.168.1.2) not scanned Host vaktsiin.loomaaed.tartu.ee (192.168.1.3) not scanned Host loomaaed.tartu.ee (192.168.1.4) not scanned Host 192.168.1.5 not scanned Host hilja.loomaaed.tartu.ee (192.168.1.6) not scanned .. Nmap done: 256 IP addresses (0 hosts up) scanned in 0.142 seconds
Selleks, et saada subnetis olevate arvutite mac aadresside nimekirja sobib öelda
# nmap -sP 192.168.1.0/24 -n Starting Nmap 4.53 ( http://insecure.org ) at 2008-06-23 23:03 EEST Host 192.168.1.1 appears to be up. MAC Address: 00:16:3E:1C:3C:B3 (Xensource) Host 192.168.1.2 appears to be up. MAC Address: 00:16:3E:2C:7E:DD (Xensource) Host 192.168.1.3 appears to be up. MAC Address: 00:18:F8:E5:F8:F2 (Cisco-Linksys) Host 192.168.1.4 appears to be up. MAC Address: 00:0C:42:07:1A:46 (Routerboard.com) Nmap done: 256 IP addresses (5 hosts up) scanned in 6.054 seconds
Kui nö teises aknas võrku kuulata, näeb, et nmap teeb subneti iga ip aadressi kohta arp päringu, väga efektiivne moodus arvuti olemasolu kindlakstegemiseks
# tcpdump -nettti fxp1 arp Jun 23 22:49:26.743432 00:02:55:ee:42:72 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.1.1 (ff:ff:ff:ff:ff:ff) tell 192.168.1.254 Jun 23 22:49:26.743466 00:02:55:ee:42:72 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.1.2 (ff:ff:ff:ff:ff:ff) tell 192.168.1.254 Jun 23 22:49:26.943286 00:02:55:ee:42:72 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.1.3 (ff:ff:ff:ff:ff:ff) tell 192.168.1.254 Jun 23 22:49:26.943339 00:02:55:ee:42:72 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.1.4 (ff:ff:ff:ff:ff:ff) tell 192.168.1.254 ..
Kui sedasi pöörduda mittelokaalse võrgu poole, siis nmap saadab icmp echo requesti ning tcp ack paketi porti 80 (mis tavaliselt ei saa tulemüüridest edasi, kuna ei kuulu ühenduse hulka) ning näitab samuti tulemust.
Lisaks saab -sP võtmega koos kasutada nn probe'isid (-PS, -PA jt) võtmeid, et vaikimisi käitumist muuta.
Nmap programmi võrgust arvutite leidmise protseduuri väljundi saab salvestada faili, et seda seejärel üksikute arvutite omaduste kindlakstegemiseks kasutada, näiteks selliselt, -oG võtme kasutamisel salvestatakse väljund võimalikult nö grep'itavas formaadis
# nmap -sP 192.168.1.0/24 -oG /tmp/nmap-192.168.1.0-24.log
Üksikute arvutite omaduste kindlakstegemine
Üksikute arvutite omaduste all mõeldaks seda, millises olekus on tema erinevad pordid, näiteks
- open - pordil töötab rakendus
- closed - pordile ei ole ligipääs takistatud, aga rakendust ei tööta (tavaliselt saadab arvuti nmapile vastuseks RST paketi)
- filtered - nmap ei saa kindlaks teha pordi olekut (kas open või closed) kuna vaatlusaluses endas või tema eest töötab paketifilter
Tegemaks kindlaks, kas failis /tmp/192.168.1.0-24.log sisalduvatel ip aadressidel vastab SYN paketile 22 port tuleb näiteks öelda
# nmap -p T:22 -sS -iL /tmp/nmap.log -PN -oG -
- -oG - tundub, et väljund on sedasi pisut paremini loetav kui vaikimisi
- -PN - nmap ei soorita taustal nn host discovery't, kui tcpflow abil liiklust jälgida, on pilt selgem
Sedasi on näiteks ka hea kontrollida, kas oma synproxy režiimis käivitatud tulemüür ikka toimib nõuetekohaselt.
Nmap võimaldab vaatlusaluse arvuti tcp/ip stackiga suhtlemisel saadud info põhjal kaudselt ennustada selle arvuti operatsioonisüsteemi ning portidel kuulavate tarkvarade versioonid
# nmap -A 192.168.0.239 Starting Nmap 4.53 ( http://insecure.org ) at 2008-04-10 23:12 EEST Interesting ports on 192.168.0.239: Not shown: 1711 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 4.7p1 Debian 2 (protocol 2.0) MAC Address: 00:11:25:85:64:34 (IBM) Device type: general purpose Running: Linux 2.6.X OS details: Linux 2.6.17 - 2.6.20 Uptime: 0.640 days (since Thu Apr 10 07:51:45 2008) Network Distance: 1 hop Service Info: OSs: Unix, Linux OS and Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ . Nmap done: 1 IP address (1 host up) scanned in 20.592 seconds
TCP handshake'i tegemiseks sobib kasutada, nn connect scan
# nmap -p T:443 -sT -PN 192.168.0.239
Turvavigade kontroll
Tööks vajalikud huvitavad failid asuvad kaustas nmap/scripts/smb-check-vulns.nse nt FreeBSD's /usr/local/share/nmap/scripts/
Ideepoolest peaks töötama ka käsk
# nmap --script-updatedb Starting Nmap 4.85BETA7 ( http://nmap.org ) at 2009-09-15 00:33 EEST NSE script database updated successfully. Nmap done: 0 IP addresses (0 hosts up) scanned in 0.23 seconds
Salvestame nmapi töö faili mis meie subneti nimeline ning viime läbi SYN skänni pordile 445 ning käivitame SMB vigade kontrollimiseks mõeldud NSE skripti ja teeme seda kõigile arvutitele 192.168.1.0/24 võrgus.
nmap -oA 192168-filename -sS -p445 --script smb-check-vulns.nse 192.168.1.0/24
Tulemused võivad välja näha näiteks järgnevad
Interesting ports on kasutaja.zoo.tartu.ee (192.168.1.5): PORT STATE SERVICE 445/tcp open microsoft-ds MAC Address: 00:03:0D:51:E5:CA (Uniwill Computer) Host script results: |_ smb-check-vulns: This host is likely vulnerable to MS08-067 (it stopped responding during the test)
arping
Erinevalt programmist ping, mis saadab võrku ip pakette (ethertype 0x0800) tekitab arping arp pakette (ethertype 0x0806). Kui ühes aknas pingida/arpingida ja teises jälgida liiklust, siis paistavad erinevused sellised
Tuleb eelnevalt paigaldada operatsioonisüsteemi pakihalduse vahendite abil
# ping 192.168.10.251
# tcpdump -nettti em0 arp or icmp Jun 24 13:27:08.032376 00:0e:0c:ba:4b:3e 00:0c:42:07:1a:45 0800 98: 192.168.10.210 > 192.168.10.251: icmp: echo request Jun 24 13:27:08.032511 00:0c:42:07:1a:45 00:0e:0c:ba:4b:3e 0800 98: 192.168.10.251 > 192.168.10.210: icmp: echo reply
# arping 192.168.10.251
# tcpdump -nettti em0 arp or icmp Jun 24 13:27:10.069533 0c:80:18:03:00:00 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.10.251 tell 192.168.10.210 Jun 24 13:27:10.069644 00:0c:42:07:1a:45 0c:80:18:03:00:00 0806 60: arp reply 192.168.10.251 is-at 00:0c:42:07:1a:45
tcpflow
Programm tcpflow abil on hea uurida rakenduskihile vastavate andmete liikumist võrgus, nt jälgida http päringud ja vastuseid. tcpflow salvestab käesolevasse kataloogi (ingl. k. current directory) tabatud liikluse automaatselt moodustatud failinimesid kasutades
Tuleb eelnevalt paigaldada operatsioonisüsteemi vahendite abil
# mkdir /tmp/ftp.aso.ee # cd /tmp/ftp.aso.ee # tcpflow -i rl0 host ftp.aso.ee # ls -l total 8 -rw-r--r-- 1 root wheel 104 Jun 13 10:22 084.050.096.138.50120-213.184.032.082.00080 -rw-r--r-- 1 root wheel 847 Jun 13 10:22 213.184.032.082.00080-084.050.096.138.50120
Failinimedes kasutatakse kasutatud pordinumbreid, päring
# cat 084.050.096.138.50120-213.184.032.082.00080 GET /README HTTP/1.0 User-Agent: Wget/1.11.2 Accept: */* Host: ftp.aso.ee Connection: Keep-Alive
ning vastus
# cat 213.184.032.082.00080-084.050.096.138.50 HTTP/1.1 200 OK Date: Fri, 13 Jun 2008 07:22:50 GMT Server: Apache Last-Modified: Mon, 05 Nov 2007 19:14:36 GMT ETag: "1c980fa-22e-53bd1f00" Accept-Ranges: bytes Content-Length: 558 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/plain; charset=UTF-8 Welcome to the Estonian Informatics Center's FTP server! On this server are hosted following software distributions Debian GNU/Linux - /debian Ubuntu Linux - /pub/ubuntu Mandriva Linux - /pub/Mandrake X-Road System - /pub/x-tee Solaris CSW - /pub/csw OpenBSD - /pub/OpenBSD You can access data anonymously using http, ftp or rsync protocol and one of these domainnames: ftp.aso.ee ftp.ria.ee ftp.ee.debian.org If you have any comments or encounter problems using this archive, please send them via e-mail to ftpmaster_at_aso.ee.
hping
Programm hping võimaldab konstrueerida ja võrku saata igasuguseid pakette ja sobib seetõttu hästi nt võrgusõlmede testimiseks. Tarkvarast on kolm populaarset versiooni, hping, hping2 ja hping3. Näiteks SYN paketi tekitamiseks tuleb öelda
Tuleb eelnevalt paigaldada operatsioonisüsteemi vahendite abil
# hping -S -c 4 -p 80 192.168.10.12 HPING farm.loomaaed.tartu.ee (em0 192.168.10.12): S set, 40 headers + 0 data bytes len=46 ip=192.168.10.12 ttl=56 DF id=60008 sport=80 flags=SA seq=0 win=5840 rtt=9.4 ms len=46 ip=192.168.10.12 ttl=56 DF id=53433 sport=80 flags=SA seq=1 win=5840 rtt=9.8 ms len=46 ip=192.168.10.12 ttl=56 DF id=39504 sport=80 flags=SA seq=2 win=5840 rtt=9.5 ms len=46 ip=192.168.10.12 ttl=56 DF id=54821 sport=80 flags=SA seq=3 win=5840 rtt=9.5 ms
kus võtmed
- -S - konstrueerida SYN pakett
- -c 4 - saata viis paketti
- -i arv - saata intervalliga arv sekundit, vaikimisi ühe sekundise intervalliga
- -p - pordile 80
Näiteks nii saab nö tavalist ICMP pingi sooritada öeldes paketi src aadressiks 192.168.12.144
# hping3 -1 -a 192.168.12.144 192.168.11.145
Fragmenteeritud IP pakettide genereerimiseks sobib öelda
# hping3 -d 5400 -E /tmp/50M -S -c 3 -p 80 192.168.10.12 -m 200
kus
- -d paketi andmeosa suurus
- -E - mida kasutada andmeosa täitmiseks
- -m - mtu suurus
netcat
Programm netcat võimaldab hõlpsasti testida võrku, või vahetda arvutite ning programmide vahel infot. Sarnane tuntub programmile socket. Ühes arvutis tuleb ta käivitada porti kuulama öeldes, näiteks faili /tmp/filename.out kopeerimiseks
Tuleb osades operatsioonisüsteemides paigaldada, nt OpenBSD's on ta olemas
# nc -l -p 1010 > /tmp/filename.out
ja teisest pöörduda
# nc teise.arvuti.ip.aadress 1010 < /tmp/filename.out
Linuxi peal töötab sedasi lihtne server
# while true ; do cat /tmp/http.txt | nc -l -p 1500 head --bytes 2000 >>/tmp/requests ; date >>/tmp/requests ; done
Hädapärast saab netcati vahendusel vahendada ka arvutite vahel ja skriptide vahel infot näiteks kuulame 1001 porti ühes masinas
abiks käsk testimisel ka
nc -l -p 1001 | awk -F"," '{print $2}'
Syslogiga suhtlemine
$ echo '<0>message' | nc -w 1 -u 192.168.102.114 514
Whois teenuse kasutamine
$ echo "loomaaed.tartu.ee" | netcat 193.40.0.12 43 The registry database contains only .EE, .COM.EE, .PRI.EE, .FIE.EE, .ORG.EE and .MED.EE domains. Registrant: Tartu Loomaaed Looma tee 1 TEL 1234 5678 FAX 8765 4321 Domain Name: loomaaed.tartu.ee Contacts: Priit Kask priit@loomaaed.tartu.ee ..
netstrain
Programm netstrain paigaldamine toimub paketist
võimaldab tekitada ja jälgida võrgus tcp koormust. Ühes arvutis tuleb netstraind käivitada
# netstraind -4 1010 NetStrain 3.0 (c) 2002 Christoph Pfisterer <cp@chrisp.de> Listening on 0.0.0.0 port 1010 using IPv4... One-shot server waiting for connection Incoming connection from 172.16.3.254 port 5606
ning teisest pöörduda
# netstrain -4 172.16.3.251 1010 both NetStrain 3.0 (c) 2002 Christoph Pfisterer <cp@chrisp.de> Looking up hostname 172.16.3.251... Connecting to 172.16.3.251 port 1010 using IPv4... Connected sent: 6450M, 10589.2K/s total, 10586.8K/s current recv'd: 6252M, 10264.4K/s total, 10286.5K/s current
ipcalc
ipcalc on paketist paigaldatav pisike utiliit, millega saab nö võrke arvutada. Näiteks küsida milline on kaheksane subnet kuhu kuulub ip aadress 192.168.2.201
# ipcalc 192.168.2.201/29 address : 192.168.2.201 netmask : 255.255.255.248 (0xfffffff8) network : 192.168.2.200 /29 broadcast : 192.168.2.207 host min : 192.168.2.201 host max : 192.168.2.206 hosts/net : 6
httping
httping programmiga saab esitada http päringuid eesmärgiga jälgida veebiserveri vastuste andmist, kusjuures nt on võimalik täpsustades, kas esitatakse GET või HEAD päringuid või millise sagedusega päringuid esitatakse. Nt võiks toimuda programmi kasutamine selliselt
$ httping -s -S -i 2 -r -g http://www.loomaaed.tartu.ee/loomafail.cgi PING www.loomaaed.tartu.ee:80 (http://www.loomaaed.tartu.ee/loomafail.cgi): connected to www.loomaaed.tartu.ee:80, seq=0 time=11.99+501.00=512.99 ms 200 OK connected to www.loomaaed.tartu.ee:80, seq=1 time=10.20+475.94=486.14 ms 200 OK connected to www.loomaaed.tartu.ee:80, seq=2 time=9.71+471.03=480.74 ms 200 OK connected to www.loomaaed.tartu.ee:80, seq=3 time=10.88+420.74=431.62 ms 200 OK connected to www.loomaaed.tartu.ee:80, seq=4 time=9.99+336.93=346.92 ms 200 OK
kus on kasutatud võtmeid
- -s - esitab http päringu vastuse nn http koodi, st 200, 403, 404, 500 jne
- -S - esitab vastuses eraldi tcp ühenduse moodustamiseks ja vastuse saamiseks kulunud aja
- -i - päringuid esitamise intervall sekundites
- -r - nimelahendus sooritatakse vaid üks kord
- -g - esitatakse GET päringuid, vaikimisi esitatakse HEAD päringuid
Üks abiks httping programmi kasutusjuht võiks olla näiteks veebikoha koormustesti ajal jälgida milline nö tavakasutaja jaoks võiks kõnealuse veebikoha kättesaadavus.
https teenuse jälgimiseks sobib öelda
$ httping -G -l -g "/index.html" -h 192.168.10.12
- -l - pöörduda https abil
tcpstat
Vahel on selle programmi kasutamine muutnud süsteemi ebastabiilseks, tõenäoliselt on seoses konkreetselt kasutuses oleva riistvaraga. Muidu aga võimaldab ta jälgida tingimustele vastava andmevahetuse kiirust
# tcpstat -i vlan13 -o "Time:%S\tn=%n\tavg=%a\tstddev=%d\tBaitspersecond=%B\n" 1
tcptrace
tcptrace on üks paljudest programmidest, millega esitada salvetatud võrguliikluse kohta ülevaatlikke andmeid, võimalik, et programmi kõige olulisem väärtus on pedagoogiline väärtus
$ tcptrace -l tt.log 1 arg remaining, starting with 'tt.log' Ostermann's tcptrace -- version 6.6.1 -- Wed Nov 19, 2003 54 packets seen, 54 TCP packets traced elapsed wallclock time: 0:00:00.007053, 7656 pkts/sec analyzed trace file elapsed time: 0:00:02.787589 TCP connection info: 1 TCP connection traced: TCP connection 1: host a: moraal.auul:52081 host b: ftp.loomaaed.tartu.ee:22 complete conn: yes first packet: Sat Oct 10 12:56:15.713740 2009 last packet: Sat Oct 10 12:56:18.501330 2009 elapsed time: 0:00:02.787589 total packets: 54 filename: tt.log a->b: b->a: total packets: 30 total packets: 24 ack pkts sent: 29 ack pkts sent: 24 pure acks sent: 14 pure acks sent: 7 sack pkts sent: 0 sack pkts sent: 0 dsack pkts sent: 0 dsack pkts sent: 0 max sack blks/ack: 0 max sack blks/ack: 0 .. data xmit time: 2.547 secs data xmit time: 2.547 secs idletime max: 1141.1 ms idletime max: 1151.3 ms throughput: 1291 Bps throughput: 1072 Bps
Wireshark
Tarkvara Wireshark eelised avalduvad tema ülevaatlikkust võimaldavas graafilises kasutajaliideses, kus on võimalus
- liiklust filtreerida nt otspunktide ip aadresside, protokolli vms parameetrite alusel
- saab hõlpsasti eristada liiklusest tcp sessioone
- saab ülevaatlikult näha paketi kapseldust OSI kihtide mõttes
Wireshark kasutamist on mõistlik korraldada nii, et tulemüüris salvestatakse liiklus tcpdump abil faili ning see fail kopeeritakse töökohaarvutisse kuhu on paigaldatud Wireshark. Wireshark kasutajaliides näeb välja selline, antud juhul on kuulatud pealt liiklust tulemüürist ftp.aso.ee arvutiga
# tcpdump -n -i eth0 -s 1600 -w /tmp/ftp.aso.ee.log host ftp.aso.ee
Seejärel on käivitatud wireshark
linux$ wireshark ftp.aso.ee.log
Wiresharkis on filtreeritud välja ainult liiklus ftp.aso.ee arvutiga (kui seda praktiliselt pole ka vaja filtreerida, kuna ainult seda kuulatigi tcpflow'ga). Allolevalt pildilt on näha kuidas Wireshark esitab väljundit kolmas üksteise kohal paiknevas raamis
- ülemises raamis on esitatud filtreeritud 10 paketti, järjekorranumber, aeg, lähte ja siht aadress, protokoll ja muu info
- keskmises raamis esitatakse ülemises raamis ära märgitud paketi kapseldatud koosseis, on näha ISO kihid kusjuures wireshark interpreteerib lisaks paketi nn payloadis olevaid andmeid
- alumises raamis on esitatud paketi sisu kõrvuti kahes tulbas, 16nd süsteemis ning võimalusel vastavad ascii sümbolid, kusjuures keskmises raamis märgitule on ära vastav osa ära tähistatud
Näiteks võib antud juhul jälgida kuidas ühenduse loomiseks ja lõpetamiseks on vahetatud vastavalt kolm ja kolm paketti, ning sisuliste andmete vahetamiseks on kokku saadetud neli paketti. Välja arvatud erijuhud üldiselt ongi nii, et andmevahetusel osapooled saadavad üksteisele samas suurusjärgus pakette, isegi kui tegu on sisuliselt ühesuunalise andmevahetusega. Ja eriliselt võiks antud juhul tähele panna, et tcp ühenduse sees saadetakse andmeid mõlemas suunas.
Antud juhul kuuluvad juba tcpdump abil salvestatud ühte tcp sessiooni, kuid wiresharkil on võimalus suuremat hulgast pakettidest välja filtreerida ka ühe tcp sessiooni. Selleks tuleb ülemises raamis valida mingi paketi peal olles hiire parema nupuga avanevast hüpikmenüüst 'Follow TCP Stream' ning esitakse sessioonis toimunud http get päringu sisu ja vastuse sisu
tcpbench
OpenBSD nn baas sisaldab tcpbench utiliiti, mille abil saab otsekoheselt testida kahe OpenBSD arvuti vahelist võrguühendust. Utiliidi kasutamisel hakkab klient serverisse kopeerima maksimaalse võimaliku suurusega tcp pakette, tegevuse käigus esitavad klient ja server programmi väljundis toimuvat andmevahetust iseloomustavat infot
server# tcpbench -s pid elapsed_ms bytes Mbps 25537 1009 20811800 165.009 25537 2009 20610544 165.049 25537 3013 20230168 161.197 25537 closed by remote end
klient# tcpbench 192.168.10.8 pid elapsed_ms bytes Mbps 2628 1026 20990016 163.665 2628 2008 20460296 166.683 2628 3037 20230168 157.433 ^Ctcpbench: Terminated by signal 2
ssldump
ssldump võimaldab SSL/TLS liiklust analüüsida, tarkvara paigaldamiseks tuleb öelda Debian keskkonnas
# apt-get install ssldump
FreeBSD's asub pakett net/ssldump
ja kasutamiseks nt
# ssldump -i eth0 -d port 993 New TCP connection #1: moraal.auul(49305) <-> smtp.loomaaed.tartu.ee(993) 1 1 0.0100 (0.0100) C>S Handshake ClientHello Version 3.1 resume [32]= 9c 5e 98 a5 0c 7a e1 f6 59 70 cb 42 ff 7e d0 2c 0c d6 03 57 34 e5 01 74 4e 4f fb 70 3b a5 61 02 cipher suites Unknown value 0xc00a TLS_RSA_WITH_RC4_128_MD5 TLS_RSA_WITH_RC4_128_SHA TLS_RSA_WITH_3DES_EDE_CBC_SHA ... compression methods NULL 1 2 0.0342 (0.0242) S>C Handshake ServerHello Version 3.1 session_id[32]= 9c 5e 98 a5 0c 7a e1 f6 59 70 cb 42 ff 7e d0 2c 0c d6 03 57 34 e5 01 74 4e 4f fb 70 3b a5 61 02 cipherSuite Unknown value 0x35 compressionMethod NULL 1 3 0.0342 (0.0000) S>C ChangeCipherSpec 1 4 0.0342 (0.0000) S>C Handshake 1 5 0.0349 (0.0006) C>S ChangeCipherSpec 1 6 0.0349 (0.0000) C>S Handshake 1 7 0.0443 (0.0094) S>C application_data 1 8 0.0450 (0.0006) C>S application_data 1 9 0.0546 (0.0095) S>C application_data ..
kust on näha
- C>S, S>C - vastavalt kliendilt serveri ja serverilt kliendi suunal toimuv liiklus
- ClientHallo, ServerHallo, jt - kliendi ja serveri vahel toimub SSL ühenduse parameetrite kokkuleppimine
- application_data - antud juhul jääb ssldump jaoks sisuline andmevahetus ligipääsemata
Kui lisaks on kasutada ssl võtmed, siis saab teatud juhtumitel ka liikluse sisu debugida, nt https puhul
# cat www.loomaaed.tartu.ee.key www.loomaaed.tartu.ee.crt > www.pem # ssldump -i eth0 -d -k www.pem port 443 .. 1 10 0.0849 (0.0341) C>S application_data --------------------------------------------------------------- GET /text.html HTTP/1.1 Host: 192.168.10.53 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) \ Gecko/2009091010 Iceweasel/3.0.6 (Debian-3.0.6-3) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache --------------------------------------------------------------- 1 11 0.0857 (0.0007) S>C application_data --------------------------------------------------------------- HTTP/1.1 200 OK Date: Fri, 23 Oct 2009 06:32:59 GMT Server: Apache/2.2.9 (Debian) mod_jk/1.2.26 mod_ssl/2.2.9 OpenSSL/0.9.8g Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 266 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1
Seejuures tuleb veebiserveris kasutada sobivat SSLCipherSuite väärtust, nt selline töötab nö natuke
SSLCipherSuite RSA:-HIGH:MEDIUM:-EXP:-DH
Kasutatud järgnevusele 'RSA:-HIGH:MEDIUM:-EXP:-DH' vastavaid väärtusi näeb
# openssl ciphers -v 'RSA:-HIGH:MEDIUM:-EXP:-DH' DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1 RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 NULL-SHA SSLv3 Kx=RSA Au=RSA Enc=None Mac=SHA1 NULL-MD5 SSLv3 Kx=RSA Au=RSA Enc=None Mac=MD5 DES-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=DES(56) Mac=MD5 RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5 RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
ICMP redirect
Olgu selliste ruutingutega olukord
.... | _|_ | | vaikelüüs |___| staatiline ruuting 192.168.201.0/24 -> 192.168.2.201 192.168.2.0/24 | --|--------------|--------------|-- _|_ _|_ | | host-1 | | 192.168.2.201 |___| |___| ruuter-2 | | 192.168.201.0/24 -----|-------------------------|--- _|_ | | host-2 |___|
Lingid
Soovides muide teada mis ISP omandusse mingi ip kuulub tasub kasutada aadress http://www.ip-adress.com/ip_tracer/<IP>