Vrijeme odaziva i performanse

Jedan od najviših prioriteta tijekom razvijanja Nmap-a su performase. Defaultni scan (nmap<hostname>) nekog računala na lokalnoj mreži traje petinu sekunde. To je manje od vremena koje vam je potrebno za treptaj oka, ali naravno kad skenirate 10 ili 100 tisuća hostova postane osjetno. Uz to, neki tipovi skenova, poput UDP skeniranja i otkrivanja verzijemogu to vrijeme poprilično produžiti. Isto tako skeniranje mogu usporiti i neke konfiguracije vatrozida, pogptovo limitiranje količine odgovora u jedinici vremena.Iako Nmap koristi paralalno izvršavanje skenova kako bi ih dodatno ubrzao, sam korisnik ima potpunu kontrolu nad time. Napredni korisnici pažljivo kombiniraju Nmap naredbe kako bi dobili samo informacije koje im trebaju poštivajući vremenske termine koje su si zadali.

Tehnike za ubrzavanje skeniranja sastoje se od toga da izbacite nepotrebne testove i naravno da nadogradite Nmap na posljednju verziju (poboljšanja performansi se konstantno rade). Optimiziranje vremena odziva (engl. Timing) takođem može utjecati na brzinu skeniranja. Opcije slijede:

--min-hostgroup <numhosts>; --max-hostgroup <numhosts> (Podešava veličinu grupe paralelnih skenova)

Nmap ima mogućnost skeniranja više hostova paralelno. To radi na način da podijeli adresni prostor ciljanih računala u grupe i onda skenira grupu po grupu. U principu ispada da su veće grupe učinkovitije. Nedostatak je taj š to rezultati ne mogu biti prikazani dok cijela grupa nije odskenirana do kraja. Dakle, ako je Nmap krenuo skenirati grupu od 50 računala, korisnik nrćr vidjeti nikakve rezultate (osim onih koje ispisuje opcija -v) dok svih 50 hostova nije odskenirano.

Defaultno Nmap radi kompromis. Počinje s grupom od 5 hostova, tako da se prvi rezultati brzo pojave na ekranu, a nakon toga poveća veličinu grupe na 1024. Točan broj ovisi o uključenim opcijama. Zbog povećane efikasnosti Nmap koristi veće grupe za UDP skenove, a manje za TCP skenove.

Kad definirate maksimalnu veličinu grupe pomoću opcije --max-hostgroup, Nmap je neće nikad premašiti. Ukoliko pak specificirate minimalnu veličinu grupe s --min-hostgroup, Nmap će pokušati zadržati veličinu grupe iznad tog nivoa. Naravno, ukoliko broj hostova koji su ostali za skeniranje bude manji od minimalne grupa Nmap će normalno odraditi svoj posao. Obje opcije možete koristiti istovremeno kako bi veličinu grupe zadržali u željenim okvirima, ali to je rijetko potrebno.

Primarna upotrenba ovih opcija je navođenje što veće minimalne veličine grupe kako bi skenovi brže odradili svoj posao. Najčeđći odabir je 256, kako bi skeniranje mreže išlo u odsječcima C klase. Za skenove u kojima se skenira mnogo portova, povećanje tog broja iznad 256 će rijetko pomoći. Ukoliko pak skenirate samo nekoliko portova, veličina grupe od 2048 ili više, može biti od pomoći.

--min-parallelism <numprobes>; --max-parallelism <numprobes> (Podesi paralelizam)

Ove opcije upravljaju brojem sondi (engl. probe) koje mogu biti poslane po grupi hostova. Koriste se za skeniranje portova i otkrivanje hostova. Defaultno Nmap svaki put izračuna idealni paralelizam vezano uz mrežne performanse, a mijenja ga tijekom skena, ovisno o ujetima. Ukoliko dolazi do odbačenih paketa, Nmap uspori tj. šalje manje sondi. Broj sondi polako raste ako mreža daje naznaku da može prihvatiti više od trenutnog broja. Ove opcije postavljaju minimalnu i maksimalnu granicu. Defaultno paralelizam može pasti na 1 ako je mreža nepouzdana ili narasti na nekoliko stotina, ako imamo idealne uvjete.

Najčešći način upotrebe je da se podesi --min-parallelism na broj veći od 1 kako bi se ubrzalo skeniranje sporijih hostova i mreža. To je ujedno i riskantna opcija, jer ako podesite prevelik broj, utjecat ćete na točnost skena. Isto tako, ukolik opodesite ovu opciju, sprječavate Nmap da dinamički upravlja paralelizmom vezano uz stvarne uvjete na mreži. Broj 10 ima smisla, ali osobno podešavam tu vrijednost kad nemam ništa drugo na rapolaganju.

Opcija --max-parallelism stavite na 1 ukoliko želite spriječiti Nmap da koristi paralelizam, tj. želite da šalje samo jednu po jednu sondu.To može biti korisno u kombinaciji s opcijom --scan-delay (objasnit ćemo je kasnije), mada ta opcija sama po sebi služi svrsi dovoljno dobro.

--min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time> (Podesi vrijeme trajanja sondi)

Nmap pazi na vrijeme isteka da bi mogao ustanoviti koliko dugo će čekati na odgovor sonde prije nego odustane ili ponovno pokuša poslati istu sondu. To se izračunava na osnovu prethodnih sondi i vremenskog odaziva koji su imale. Ukoliko se mrežno kašnjenje pokaže značajnim i promjenjivim, vrijeme isteka može narasti i na nekoliko sekundi. Također počinje na konzervativnom (visokom) nivou i takvo će ostati u slučaju da Nmap skenira hostove koji ne odgovaraju.

Ove opcije primaju vrijednost u milisekundama, ali vi možete navesti vrijeme u sekundama, minutama ili satima na način da stavite opciju s, m ili h. Navođenje nižeg --max-rtt-timeout i --initial-rtt-timeout od defaultnog može osjetno skratiti vrijeme potrebno za skeniranje. To je posebno vidljivo kod (-P0) skenova i skenova prema jako filtriranim mrežama. Ipak, nemojte biti preagresivni, jer vam u tom slučaju skeniranje može i dulje potrajati, jer će Nmap ponovno slati sonde, a odgovr na prethodne je možda na putu nazad.

Ukoliko su svi hostovi na lokalnoj mreži, 100ms je razumna vrijednost za --max-rtt-timeout _timeout. Ukoliko postoje ruteri između Nmapa i hostova, najprije pingajte hosta s ICMP ping alatom ili s naprednijim alatom poput Hping2 koji ima veće mogućnosti proći kroz vatrozid. Pogledajte koja je srednja vrijednost vremena portebnog da se paket vrati za 10-tak paketa. Tu vrijednost pomnožite s 2 za --initial-rtt-timeout i s 3 ili 4 za --max-rtt-timeout. Osobno ne postavljam maksimalni rtt ispod 100ms, bez obzira na vrijednosti koje dobijem pinganjem, niti stavljam više od 1000ms.

--min-rtt-timeout je rijetko korištena opcija koja može biti korisna kod jako nepouzdanih mrež a na kojima su čak i Nmap-ove defaultne postavke preagresivne. Kako Nmap spušta vrijeme isteka na minimum tek kad zaključi da je mreža pouzdana, ovo bi trebalo prijeviti kao bug na nmap-dev mailing listu.

--max-retries <numtries> (Navedi maksimalni broj ponovnih slanja sondi)

Kad Nmap ne dobije odgovor na sondu koja skenira port, to može značiti da je port filtriran ili to da je sonda ili odgovor na nju izgubljen na mreži. Isto tako je moguće da ciljani host ima podešenu granicu na količinu paketa na koje odgovara, pa je samo privremeno blokiran odgovor. Kako bi bio siuguran o čemiu je riječ, Nmap ponovno šalje sonde na koje nije dobio odgovor. Ukoliko ustanovi da je mreža nepouzdana, može se dogoditi da pošalje sondu još mnogo puta prije nego odustane. Ovo je opcija koja daje točnije rezultate, ali isto tako i usporava postupak skeniranja. Kad je brzina skeniranja ključna, možete koristiti ovu opciju kako bi ograničili broj ponovnih slanja sondi. Čak možete navesti i --max-retries 0 kako bi u potunosti spriječili ponovno slanje, makar je to rijetko preporučljivo.

Defaultna postavka (bez -T predloška) je 10 ponovnih slanja. Ukoliko se mreža pokaže pouzdanom i ciljani hostovi ne ograničavaju skeniranje, Nmap će napraviti samo jedno ponovno slanje. Gledano iz tog kuta, na većinu ciljanih računala ne utječe ako stavite --max-retries na nizak broj poput 3. To je vrijednost koja može mnogostruko ubrzati skeniranje sporih hostova (onih koji ne dozvoljavaju mnogo port skenova s jedne IP adrese, nego ih jednostavno blokiraju). Istina je da obično izgubite neke informacija ako Nmap prerano odustane od hosta, ali i to je bolje nego ostaviti --host-timeout da istekne i izgibiti sve informacije o ciljanom hostu.

--host-timeout <time> (odustani od skeniranja sporih hostova)

Skeniranje nekih hostova jednostavno traje jako dugo. To može biti zbog lošeg mrežnog hardvera ili softvera, ograničavanju količine paketa ili restriktivnih vatrozida. Nekoliko posto sporih hostova, mogu pojesti većinu vremena koje je potrebno za skeniranje. Ponekad je najbolje odustati od skeniranja takvih hostova kako bi stvar brže završila. To možete napraviti navođenjem parametra --host-timeout s brojem milisekundi koliko ste voljni čekati odgovor. Možete staviti i s, m ili h kako bi naveli sekunde, minute i sate. Osobno obično stavim 30m kako bih se osigurao da Nmap ne troši više od 30m vremena po hostu. Imajte na umu da će Nmap za to vrijeme skenirati i ostale hostove, tako da to nije u potpunosti izgubljeno vrijeme. Host koji je dosegao vrijeme isteka je preskočen i z anjega nije ispisan nikakav rezultat poput port tabele, OS detekcije ili detekcije verzija.

--scan-delay <time>; --max-scan-delay <time> (podesi stanke između sondi)

Ova opcija prisiljava Nmap da pričeka barem navedeno vrijeme u milisekundama prije nego pošalje iduću sondu prema tom hostu. Kao i kod većine drugih opcija koje imaju veze s vremenom, možete navesti s, m ili h da bi definirali kašnjenje u sekundama, minutama ili satima. To je itekako korisno kod računala koja imaju upaljen "rate limiting". Solaris računala (između ostalih) će na UDP sken sonde odgovarati samo s jednom ICMP porukom po sekundi. Ako Nmap šalje UDP pakete češće od 1 sekunde, ti su paketa jednostavno uludo bačeni. Opcija --scan-delay od 1s će zadržati Nmap u sporom tempu. Nmap pokušava ustanoviti koji je "rate limit" podešen na jostu i prilagođava sken ovisno o tome, ali neće škoditi ako ga unaprijed definirate za hostove za koje ste sigurni da će se tako ponašati.

Kad Nmap podesi sken shodno tome, dolazi do dramatičnog usporavanja. --max-scan-delay opcija definira najveće kašnjanje koje će Nmap dozvoliti. Ukoliko podesite ovu opciju na premalu vrijednost, doći će do uzaludnog (prečestog) slanja paketa i samim tim promašenih otvorenih portova ako ciljani host ima uključen rate limiting.

Još jedno način korištenja opcije --scan-delay je da se izbjegnu intrusion detection i intrusion prevention (IDS/IPS) sustavi, koji su bazirani na zadanoj vrijednosti (engl. treshold).

-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (Podesite predložak za vremenske postavke)

Iako su do sad navedene opcije snažne i efikasne, većini ljudi su nerazumljive i zbunjujuće. Uz to, odabrati prave vrijednosti ponekad može potrajati duže od skena koji želite optimizirati. Zbog toga Vam Nmap nudi jednostavniji pristup, korištenjem 6 preddefiniranih predložaka. Možete ih navesti korištenjem -T opcije s brojevima od 0-5 ili njihovim imenima.Nazivi predložaka su: paranoidno (engl. paranoid) (0), skriven (engl. sneaky) (1), pristojan (eng. polite) (2), normalan (engl. normal) (3), agresivan (engl. aggressive) (4) i lud (engl. insane) (5). Prva dva su za obilaženje IDS sustava. Predložak pristojan usporava skeniranje kako bi što je moguće manje opteretio mrežne resurse i računalo koje skenirate. Normalni mod je defaultna postavka i postavljanje opcije -T3 zapravo ne uvodi nikakve promjene. Agresivni mod ubrzava skeniranje pod pretpostavkom da ste na poprilično brzoj i pouzdanoj mreži. Na kraju "ludi" mod pretpostavlja da ste na posebno brzoj mreži i da ste spremni žrtvovati točnost rezultata kako bi dobili na brzini.

Navedeni predlošci omogućavaju korisnicima da navedu koliko agresivni žele biti, ostavljajući Nmap-u da odabere točne vrijednosti. Predlošci također rade neka manja podešavanja brzine za koja trenutno ne postoje drugi načini. Npr. -T4 sprječava da dinamičko kašnjenje skeniranja prijeđe 10ms za TCP portove, dok -T5 drži tu vrijednost na 5ms. Predlođke možete kombinirati s finijim kontrolama, sve dok je template naveden prvi inače će vrijednosti iz predloška nadjačati one koje ste naveli. Predlažem korisštenje opcije -T4 kod skeniranja modernih i pouzdanih mreža. Ostavite tu opciju na početku komandne linije čak i kad koristite neke finije naredbe kako bi imali koristi od dodatnih optimizacija koje predložak donosi.

Ukoliko ste na pristojnoj broadband ili eternet konekciji, predlažem korištenje opcije -T4. Neki ljudi vole -T5, mada je preagresoivan za moj ukus. Isto tako ljudi ponekad stave -T2 misleći da je manja vjerovatnost da će tako srušiti host ili se inače smatraju pristojnima. No oni u stvari ne razumiju koliko je opcije -T pristojno u stvari spora. Ovaj način skeniranja može potrajati i do 10 puta duže nego defaultni.Padovi računala i problemi s bandwithom su rijetki s korištenjem defaultne opcije -T3, pa je normalno preporučam opreznim skenerima.Izbjegavanje otkrivanja verzije je u svakom slučaju efikasnije u pokušaju rješevanja tih problema nego igranje s vremenima odaziva.

Iako su opcije -T0 i -T1 korisne u izbjegavanju otkrivanja od strane IDS sustava, skeniranje tisuću portova će trajati jaaaako dugo. Kod takcih skenova je možda bolje direktno navesti vremena odaziva nego se pouzdati u preddefinirane vrijednosti opcija -T0 i -T1.

Glavni efekt korištenja opcije T0 je taj da su skenovi serijski (skenira se port po port) i nakon odskeniranog porta čeka 5 minuta prije nego će poslati iduću sondu.T1 i T2 su slični s tim da T1 čeka 15 sekundi između sondi, dok T2 čeka 0.4 sekunde između sondi. T3 je defaultna postavka koja uključuje paralilizam (skenirano je više portova istovremeno). Opcije T3 je isto kao i --max-rtt-timeout 1250 --initial-rtt-timeout 500 --max-retries 6, te podešava maksimalno TCP kašnjenje na 10ms. Opcija T5 je isto kao i --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --max-retries 2 --host-timeout 900000 kao i postavljanje maksimalnog TCP sken kaš njenja na 5ms.