Pewaktuan dan Kinerja

Salah satu prioritas pengembangan tertinggi Nmap adalah kinerja. Scan baku (nmap <hostname>) sebuah host pada jaringan lokal saya membutuhkan seperlima detik. Hal tersebut cukup cepat, namun tambahkan bila anda memeriksa ratusan atau ribuan host. Terlebih lagi, beberapa opsi scan seperti pemeriksaan UDP dan deteksi versi dapat meningkatkan waktu pemeriksaan secara substansial. Begitu pula dengan beberapa konfigurasi firewall, terutama pembatasan rate respon. Meskipun Nmap menggunakan paralelisme dan algoritma canggih untuk mempercepat scan ini, user memiliki kendali penuh atas jalannya Nmap. User ahli secara cermat memberikan perintah Nmap yang hanya mengambil informasi yang dibutuhkan dengan batasan waktu yang sesuai.

Teknik-teknik untuk memperbaiki waktu pemeriksaan mencakup menghilangkan tes-tes yang tidak kritikal, dan mengupgrade ke versi terakhir Nmap (perbaikan kinerja dibuat secara rutin). Optimisasi parameter pewaktuan juga dapat memberikan perbedaan yang substansial. Opsi-opsi tersebut diberikan di bawah ini.

Beberapa opsi menerima sebuah parameter waktu. Ia dispesifikasikan secara baku dalam milidetik, meskipun anda dapat menambahkan ‘s’, ‘m’, atau ‘h’ ke nilai untuk menspesifikasikan detik, menit, atau jam. Sehingga argumen --host-timeout 900000, 900s, dan 15m semuanya melakukan hal yang sama.

--min-hostgroup <numhosts>; --max-hostgroup <numhosts> (Adjust parallel scan group sizes)

Nmap memiliki kemampuan untuk melakukan scan port atau versi ke banyak host secara paralel. Nmap melakukan hal ini dengan membagi ruang IP target ke dalam kelompok dan kemudian memeriksa satu kelompok pada satu waktu. Secara umum, kelompok yang lebih besar lebih efisien. Kelemahannya adalah hasilnya tidak dapat disediakan hingga seluruh kelompok selesai. Jadi bila Nmap dimulai dengan kelompok berukuran 50, user tidak akan menerima laporan (kecuali update yang diberikan dalam mode verbose) hingga seluruh 50 host pertama selesai.

Secara baku, Nmap menggunakan pendekatan kompromi untuk konflik in. Ia mulai dengan ukuran kelompok paling kecil lima sehingga dapat segera diperoleh hasil dan kemudian menaikkan ukuran kelompok hingga maksimum 1024. Angka baku tergantung pada opsi yang diberikan. Demi alasan efisiensi, Nmap menggunakan ukuran kelompok yang lebih besar untuk scan UDP atau sedikit-port TCP.

Ketika ukuran kelompok maksimum diberikan dengan --max-hostgroup, Nmap tidak akan melampaui ukuran tersebut. Berikan ukuran minimum dengan --min-hostgroup dan Nmap akan berusaha ukuran kelompok di atas angka tersebut. Nmap mungkin akan menggunakan kelompok lebih kecil daripada yang anda spesifikasikan jika tidak terdapat cukup target pada interface yang diberikan untuk memenuhi ukuran minimum. Kedua opsi dapat digunakan untuk menset ukuran kelompok dalam rentang tertentu, namun hal ini jarang diperlukan.

Opsi-opsi ini tidak memiliki efek ketika melalukan fase penemuan host dalam sebuah pemeriksaan. Ini mencakup scan ping biasa (-sP). Penemuan host selalu bekerja dalam kelompok host besar untuk meningkatkan kecepatan dan akurasi.

Penggunaan utama opsi ini adalah untuk menspesifikasikan ukuran kelompok minimum yang besar sehingga scan penuh dapat dilakukan lebih cepat. Pilihan umum adalah 256 untuk memeriksa jaringan dalam Kelas C. Untuk scan dengan banyak port, melampaui angka tersebut tidak berarti banyak. Untuk scan terhadap beberapa port saja, ukuran kelompok host 2048 atau lebih mungkin bermanfaat.

--min-parallelism <numprobes>; --max-parallelism <numprobes> (Adjust probe parallelization)

Opsi-opsi ini mengendalikan jumlah total probe yang dapat dilakukan untuk sekelompok host. Mereka digunakan untuk pemeriksaan port dan penemuan host. Secara baku, Nmap menghitung nilai paralel yang ideal berdasarkan kinerja jaringan. Jika paket di-drop, Nmap mengurangi dan membolehkan lebih sedikit probe yang tersisa. Angka probe ideal akan meningkat seiring dengan membaiknya jaringan. Opsi ini menempatkan batas minimum atau maksimum pada variabel tersebut. Secara baku, nilai idealnya dapat menurun ke angka satu bila jaringan ternyata tidak handal dan meningkat ke beberapa ratus dalam kondisi sempurna.

Penggunaan paling umum adalah menset --min-parallelism ke angka lebih tinggi daripada satu untuk mempercepat scan host atau jaringan yang lambat. Ini adalah opsi berisiko untuk dimainkan, karena bila mensetnya terlalu tinggi akan mempengaruhi akurasi. Dengan menset opsi ini juga akan mengurangi kemampuan Nmap untuk mengendalikan paralelisme secara dinamis berdasarkan kondisi jaringan. Nilai sepuluh adalah cukup, meskipun saya hanya menyesuaikan nilai ini sebagai usaha terakhir.

Opsi --max-parallelism seringkali diset ke satu untuk mencegah Nmap mengirimkan lebih dari satu probe di satu waktu ke host. Opsi ini dapat bermanfaat saat berkombinasi dengan --scan-delay (akan didiskusikan kemudian), meskipun yang terakhir biasanya dapat digunakan sendiri.

--min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time> (Adjust probe timeouts)

Nmap memelihara sebuah nilai timeout untuk menentukan berapa lama ia harus menunggu atas respon probe sebelum ia menyerah atau mentransmisi ulang probe. Nilai ini dihitung berdasarkan waktu respon probe sebelumnya. Jika latensi jaringan menunjukkan signifikan dan bervariasi, nilai timeout ini dapat meningkat ke beberapa detik. Ia juga dimulai dari nilai konservatif (tinggi) dan tetap untuk sementara waktu ketika Nmap memeriksa host yang tidak responsif.

Menspesifikasikan nilai --max-rtt-timeout dan --initial-rtt-timeout lebih kecil daripada nilai baku dapat mempercepat waktu pemeriksaan secara signifikan. Hal ini terutama benar untuk scan tanpa ping (-PN), dan terhadap jaringan yang disaring secara ketat. Meskipun jangan terlalu agresif. Pemeriksaan dapat lebih lama jika anda menspesifikasikan nilai rendah sehingga banyak probe timeout dan dilakukan transmisi ulang ketika respons sedang dalam transit.

Bila seluruh host berada pada jaringan lokal, 100 milidetik adalah nilai --max-rtt-timeout agresif yang wajar. Jika melibatkan routing, ping host pada jaringan terlebih dulu dengan utilitas ping ICMP, atau dengan pembuat paket kustom seperti hping2 yang lebih mungkin melewati firewall. Lihat maximum round trip time out dari sepuluh paket atau lebih. Anda mungkin ingin menggandakannya untuk --initial-rtt-timeout dan mengalikan tiga atau empat untuk --max-rtt-timeout. Umumnya saya tidak menset nilai maksimum RTT di bawah 100 ms, berapapun waktu ping. Ataupun melebihi 1000 ms.

--min-rtt-timeout merupakan opsi yang jarang digunakan yang berguna ketika jaringan tidak handal, yang bahkan nilai baku Nmap terlalu agresif. Karena Nmap hanya mengurangi timeout ke minimum ketika jaringan tampaknya handal, kebutuhan ini tidak umum dan seharusnya dilaporkan sebagai bug ke nmap-dev mailing list.

--max-retries <numtries> (Specify the maximum number of port scan probe retransmissions)

Ketika Nmap tidak menerima respon atas probe scan port, hal ini dapat berarti bahwa port disaring. Atau mungkin probe atau respon hilang dalam jaringan. Mungkin juga host target melakukan pembatasan sehingga memblokir respon sementara. Sehingga Nmap mencoba kembali mentransmisi probe awal. Jika Nmap mendeteksi kehandalan jaringan yang buruk, ia akan mencoba beberapa kali sebelum menyerah. Meskipun hal ini bermanfaat untuk akurasi, namun akan memperpanjang waktu pemeriksaan. Ketika kinerja lebih diutamakan, pemeriksaan dapat dipercepat dengan membatasi jumlah transmisi ulang yang dibolehkan. Anda bahkan dapat menspesifikasikan --max-retries 0 untuk mencegah terjadinya transmisi ulang, meskipun hanya direkomendasikan bagi situasi seperti survei informal ketika terjadi port dan host yang tidak didata tidak menjadi masalah.

Bakunya (dengan template tanpa -T) adalah membolehkan sepuluh transmisi ulang. Jika jaringan tampak handal dan host target tidak membatasi, Nmap biasanya melakukan hanya satu transmisi ulang. Sehingga kebanyakan pemeriksaan target tidak terpengaruh dengan mengurangi nilai --max-retries ke nilai yang rendah seperti tiga. Nilai tersebut dapat secara substansial mempercepat pemeriksaan host-host lambat (rate limited). Anda biasanya kehilangan beberapa informasi ketika Nmap menyerah dengan mudah, meskipun hal tersebut lebih disukai daripada membiarkan --host-timeout berakhir dan kehilangan seluruh informasi mengenai target.

--host-timeout <time> (Give up on slow target hosts)

Beberapa host membutuhkan banyak waktu untuk diperiksa. Hal ini mungkin disebabkan hardware atau software yang tidak berkinerja baik atau tidak handal, adanya pembatasan paket, atau firewall yang terlalu ketat. Beberapa persen host paling lambat yang diperiksa dapat menghabiskan sebagian besar waktu pemeriksaan. Terkadang adalah hal baik mengurangi kerugian dan melewati host-host tersebut. Berikan --host-timeout dengan waktu maksimum anda ingin menunggu. Sebagai contoh, berikan 30m untuk memastikan bahwa Nmap tidak menghabiskan lebih dari setengah jam pada satu host. Perhatikan bahwa Nmap mungkin memeriksa host lain pada waktu yang sama dalam waktu tersebut, sehingga itu bukan kerugian lengkap. Host yang timeout akan dilewati. Tidak ada hasil tabel port, deteksi SO, atau deteksi versi akan dicetak untuk host tersebut.

--scan-delay <time>; --max-scan-delay <time> (Adjust delay between probes)

Opsi ini menyebabkan Nmap menunggu selama waktu yang diberikan antara setiap probe yang dikirimkan ke host yang diberikan. Hal ini terutama bermanfaat dalam hal pembatasan. Mesin-mesin Solaris (di antara yang lainnya) akan menanggapi paket probe scan UDP dengan hanya satu pesan ICMP per detik. Bila dikirimkan oleh Nmap lebih dari itu akan percuma. Nilai --scan-delay 1s akan membuat Nmap tetap pada rate lambat tersebut. Nmap berusaha untuk mendeteksi pembatasan rate dan menyesuaikan delay scan, namun tidaklah rugi untuk menspesifikasikannya secara eksplisit bila anda telah tahu rate terbaik.

Ketika Nmap menyesuaikan delay scan lebih tinggi untuk menanggapi pembatasn rate, scan akan melambat secara dramatis. Opsi --max-scan-delay menspesifikasikan delay terbesar yang dibolehkan Nmap. Nilai --max-scan-delay rendah akan mempercepat Nmap, namun berisiko. Dengan menset nilai ini terlalu rendah dapat menyebabkan transmisi ulang paket yang tidak perlu dan mungkin port-port luput ketika target mengimplementasikan pembatasan rate ketat.

Penggunaan lain --scan-delay adalah untuk menghindari sistem deteksi dan pencegahan intrusi (IDS/IPS) yang berbasis pembatasan

--min-rate <number>; --max-rate <number> (Directly control the scanning rate)

Pewaktuan dinamis Nmap melakukan pekerjaan yang baik dalam menemukan kecepatan yagn tepat untuk melakukan pemeriksaan. Namun terkadang, anda mungkin mengetahui rate pemeriksaan jaringan yang tepat, atau anda harus memastikan bahwa pemeriksaan akan selesai pada waktu tertentu. Atau mungkin anda harus menjaga Nmap dari melakukan pemeriksaan terlalu cepat. Opsi --min-rate dan --max-rate dirancang untuk situasi ini.

Ketika opsi --min-rate diberikan Nmap akan melakukan yang terbaik untuk mengirim paket secepat atau lebih cepat daripada rate yang diberikan. Argumen merupakan angka real positif mewakili rate paket per detik. Sebagai contoh, dengan menspesifikasikan --min-rate 300 berarti bahwa Nmap akan berusaha menjaga rate pengiriman pada atau di atas 300 paket per detik. Penspesifikasian rate minimum tidak mencegah Nmap mengirimkan lebih cepat bila kondisi memungkinkan.

Demikian pula, --max-rate membatasi rate pengiriman ke nilai maksimum yang diberikan. Gunakan --max-rate 100, misalnya, untuk membatasi pengiriman 100 paket per detik pada jaringan yang cepat. Gunakan --max-rate 0.1 untuk scan lambat satu paket setiap sepuluh detik. Gunakan --min-rate dan --max-rate bersama untuk menjaga rate pada rentang tertentu.

Kedua opsi ini bersifat global, mempengaruhi seluruh pemeriksaan, bukan host individual. Mereka hanya mempengaruhi scan port dan pencarian host Fitur lain seperti deteksi SO mengimplementasikan pewaktuan mereka sendiri.

Terdapat dua kondisi ketika rate pemeriksaan aktual kurang dari nilai minimum yang diminta. Pertama adalah bila nilai minimum lebih cepat daripada rate tercepat pengiriman Nmap, yang tergantung pada hardware. Dalam kasus ini Nmap akan mengirim paket secepat mungkin, namun waspadai bahwa rate tinggi tersebut kemungkinan akan menyebabkan kehilangan akurasi. Kasus kedua adalah ketika Nmap tidak memiliki sesuatu untuk dikirim, sebagai contoh di akhir pemeriksaan ketika probe terakhir telah dikirim dan Nmap menunggu mereka time out atau mendapat respon. Adalah normal melihat rate pemeriksaan menurun pada akhir pemeriksaan atau di antara kelompok host. Rate pengiriman mungkin melebihi nilai maksimum untuk sementara waktu untuk mengimbangi delay yang tak terduga, namun secara rata-rata rate akan tetap pada atau di bawah nilai maksimum.

Menspesifikasikan nilai rate minimum harus dilakukan dengan hati-hati. Pemeriksaan yang lebih cepat daripada yang dapat didukung oleh jaringan akan menyebabkan hilangnya akurasi. Dalam beberapa kasus, dengan menggunakan rate yang lebih cepat dapat membuat pemeriksaan menjadi lebih lama daripada bila menggunakan rate yang lebih lambat. Hal ini karena algoritma adaptive retransmission Nmap akan mendeteksi kepadatan jaringan yang disebabkan oleh rate pemeriksaan yang berlebihan dan meningkatkan angka transmisi ulang untuk memperbaiki akurasi. Jadi meskipun paket dikirim pada rate yang lebih tinggi, namun secara keseluruhan lebih banyak paket yang dikirimkan. Batasi angka transmisi ulang dengan opsi --max-retries jika anda ingin menset batas atas waktu scan total.

--defeat-rst-ratelimit

Banyak host telah lama menggunakan pembatasan rate untuk mengurangi jumlah pesan kesalahan ICMP (seperti kesalahan port-unreachable) yang mereka kirim. Saat ini beberapa sistem menggunakan pembatasan limit ke paket RST (reset) yang mereka hasilkan. Hal ini akan memperlambat Nmap secara dramatis karena ia akan menyesuaikan pewaktuannya untuk mencerminkan batas rate tersebut. Anda dapat memberitahu Nmap untuk mengabaikan limit rate tersebut (untuk scan port seperti SYN scan yang tidak memperlakukan port non-responsiv sebagai open) dengan menspesifikasikan --defeat-rst-ratelimit.

Dengan menggunakan opsi ini akan mengurangi akurasi, karena beberapa port akan tampak non-responsiv karena Nmap tidak menunggu cukup lama untuk respon RST yang rate-limited. Dengan SYN scan, hasil non-respon dalam port akan ditandai dengan status filtered alih-alih closed ketika menerima paket RST. Tambahan ini berguna ketika anda hanya perlu port terbuka, dan beda antara port closed dan filtered tidak cukup berharga.

-T paranoid|sneaky|polite|normal|aggressive|insane (Set a timing template)

Meski kendali waktu fine-grained yang didiskusikan dalam bagian sebelumnya adalah powerful dan efektif, beberapa orang menganggapnya membingungkan. Terlebih lagi, memilih nilai yang tepat terkadang membutuhkan waktu lebih lama daripada pemeriksaan yang ingin dioptimisasi. Sehingga Nmap menawarkan pendekatan yang lebih mudah, dengan enam template waktu. Anda dapat menspesifikasikannya dengan opsi -T dan angkanya (0–5) atau namanya. Nama templatenya adalah paranoid (0), sneaky (1), polite (2), normal (3), aggressive (4), dan insane (5). Dua yang pertama adalah untuk menghindari IDS. Mode Polite memperlambat scan untuk menggunakan lebih sedikit bandwidth dan sumber daya mesin target. Mode Normal adalah bakunya sehingga -T3 tidak melakukan apapun. Mode Aggressive mempercepat scan dengan membuat asumsi bahwa anda berada pada jaringan yang cepat dan handal. Akhirnya, mode insane mengasumsikan bahwa anda berada pada jaringan yang sangat cepat atau rela mengorbankan akurasi demi kecepatan.

Kesemua template ini memungkinkan user menspesifikasikan seberapa mereka ingin agresif, dan membiarkan Nmap memilih nilai pewaktuan yang tepat. Template juga membuat beberapa penyesuaian kecepatan minor yang tidak dimiliki oleh kendali fine-grained saat ini. Sebagai contoh, -T4 melarang delay scan dinamis melebihi 10 ms untuk port TCP dan -T5 membatasi nilai tersebut di 5 ms. Template dapat digunakan dalam kombinasi dengan kendali fine-grained, dan kendali fine-grained yang anda berikan akan mengambil alih template pewaktuan baku untuk parameter tersebut. Saya merekomendasikan penggunaan -T4 ketika memeriksa jaringan modern dan handal. Pertahankan opsi tersebut bahkan ketika anda menambah kendali fine-grained sehingga anda memperoleh manfaat dari optimisasi minor yang diberikan.

Bila anda berada pada koneksi broadband atau ethernet yang memadai, saya akan merekomendasikan untuk selalu menggunakan -T4. Beberapa orang mencintai -T5 meskipun itu terlalu agresif untuk selera saya. Orang terkadang memberikan -T2 karena mereka pikir ia lebih tidak mungkin akan menyebabkan host crash atau karena mereka mengganggap dirinya secara umum sopan. Mereka terkadang tidak menyadari betapa lambatnya -T polite. Scan mereka akan membutuhkan waktu sepuluh kali lebih lama daripada scan baku. Mesin crash dan masalah bandwidth adalah jarang dengan opsi pewaktuan baku (-T3) sehingga normalnya saya merekomendasikan untuk pemeriksa yang berhati-hati. Menghilangkan deteksi versi lebih efektif daripada bermain dengan nilai pewaktuan dalam mengurangi masalah ini.

Meski -T0 dan -T1 mungkin berguna untuk menghindari alert IDS, mereka akan membutuhkan waktu yang sangat lama untuk memeriksa ribuan mesin atau port. Untuk scan yang demikian lama, anda mungkin lebih menyukai menset nilai pewaktuan secara tepat anda butuhkan alih-alih bergantung pada nilai template -T0 and -T1.

Efek utama T0 adalah serialisasi scan sehingga hanya satu port yang diperiksa pada satu waktu, dan menunggu lima menit antara pengiriman setiap probe. T1 dan T2 adalah serupa namun mereka hanya menunggu 15 detik dan 0.4 detik, antar probe. T3 merupakan perilaku baku Nmap, yang mencakup paralelisasi. -T4 ekivalen dengan --max-rtt-timeout 1250 --initial-rtt-timeout 500 --max-retries 6 dan menset delay scan TCP maksimum ke 10 milidetik. T5 ekivalen dengan --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --max-retries 2 --host-timeout 15m dan juga menset delay scan TCP maksimum ke 5 md.