Nmap ile Ağ Tarama ve Port Keşfi: Kapsamlı Rehber
Ağ güvenliği dünyasında “göremediğini koruyamazsın” sözü son derece yerinde bir özdeyiş. Altyapınızda hangi sistemlerin ayakta olduğunu, hangi portların açık beklediğini ve bu portların arkasında hangi servislerin çalıştığını bilmeden güvenlik açığı kapatmak, karanlıkta anahtar aramaya benziyor. İşte tam bu noktada Nmap devreye giriyor. 1997’den bu yana siber güvenlik dünyasının vazgeçilmezi olan bu araç, bugün hem basit ağ keşiflerinde hem de gelişmiş güvenlik denetimlerinde standart referans olmaya devam ediyor.
Nmap Nedir ve Neden Bu Kadar Önemli?
Nmap (Network Mapper), Gordon Lyon tarafından geliştirilen açık kaynaklı bir ağ keşif ve güvenlik denetim aracıdır. Temel işlevi host keşfi, port tarama, servis/versiyon tespiti ve işletim sistemi tanımlaması yapmaktır. Ancak bu tanım Nmap’in gerçek gücünü küçümsüyor.
Bir sysadmin olarak şunu söyleyebilirim: Nmap öğrenmek sadece “bir araç öğrenmek” değil, ağ protokollerini daha derinlemesine anlamak demek. Nmap kullandıkça TCP handshake mekanizmalarını, ICMP paketlerinin nasıl işlendiğini, firewall kurallarının nasıl çalıştığını çok daha somut biçimde kavramaya başlıyorsunuz.
Yasal uyarı: Nmap’i yalnızca kendi ağlarınızda veya açık yazılı izin aldığınız sistemlerde kullanın. İzinsiz port taraması birçok ülkede yasal suç kapsamına girer.
Kurulum
Çoğu Linux dağıtımında Nmap paket depolarında hazır gelir.
# Debian/Ubuntu
sudo apt update && sudo apt install nmap -y
# RHEL/CentOS/Rocky Linux
sudo dnf install nmap -y
# Arch Linux
sudo pacman -S nmap
# macOS (Homebrew)
brew install nmap
# Versiyon kontrolü
nmap --version
Nmap’in güncel sürümünü kullanmak önemli çünkü yeni NSE scriptleri ve servis imzaları düzenli olarak ekleniyor. Yazı yazılırken güncel versiyon 7.94 serisi üzerindeydi.
Temel Tarama Türleri
Host Keşfi (Ping Sweep)
Büyük bir ağda önce hangi hostların ayakta olduğunu bulmak istiyorsunuz. Tüm portları taramadan önce canlı sistemleri tespit etmek hem zaman kazandırır hem de ağı gereksiz yere yüklememizi önler.
# Belirtilen ağdaki canlı hostları bul
nmap -sn 192.168.1.0/24
# Birden fazla subnet'i tara
nmap -sn 192.168.1.0/24 192.168.2.0/24 10.0.0.0/24
# ICMP ping devre dışı olsa bile host keşfi yap
nmap -sn --send-ip 192.168.1.0/24
# Sonuçları dosyaya yaz
nmap -sn 192.168.1.0/24 -oN canli_hostlar.txt
-sn parametresi port taraması yapmadan sadece host keşfi gerçekleştirir. Eski sürümlerde bu parametre -sP olarak biliniyordu.
TCP SYN Tarama (Stealth Scan)
En yaygın kullanılan tarama türüdür. “Half-open” tarama da denir çünkü TCP bağlantısını tamamlamaz, SYN gönderdikten sonra SYN-ACK alınca RST paketi göndererek bağlantıyı keser. Bu sayede birçok uygulama logu bu bağlantıyı kayıt etmez (ancak modern IDS/IPS sistemleri yine de yakalar).
# Root yetkisi gerektirir
sudo nmap -sS 192.168.1.100
# Belirli portları tara
sudo nmap -sS -p 22,80,443,3306,5432 192.168.1.100
# Port aralığı belirt
sudo nmap -sS -p 1-1000 192.168.1.100
# Tüm portları tara (65535 port)
sudo nmap -sS -p- 192.168.1.100
TCP Connect Tarama
Root yetkisi gerektirmez ama daha gürültülüdür. Tam TCP bağlantısı kurduğu için hedef sistemin loglarına düşer.
# Root yetkisi olmadan çalışır
nmap -sT 192.168.1.100
# Belirli port aralığı
nmap -sT -p 1-10000 192.168.1.100
UDP Tarama
UDP portları sysadminler tarafından sıkça göz ardı edilir ama DNS (53), SNMP (161), NTP (123) gibi kritik servisler UDP üzerinde çalışır. UDP taraması yavaştır çünkü UDP’de bağlantı durumu kavramı yoktur, Nmap kapalı portlardan ICMP port unreachable mesajı beklemek zorundadır.
# UDP taraması (root gerektirir, yavaştır)
sudo nmap -sU 192.168.1.100
# En yaygın UDP portlarını tara
sudo nmap -sU --top-ports 100 192.168.1.100
# TCP ve UDP'yi birlikte tara
sudo nmap -sS -sU -p T:80,443,U:53,161 192.168.1.100
Servis ve Versiyon Tespiti
Port açık diye bir şey bilmiyoruz, asıl soru şu: bu portta ne çalışıyor ve hangi versiyon? Eski bir Apache versiyonu, yamalanmamış bir SSH daemon’ı ya da unutulmuş bir Tomcat instance’ı hayatınızı karartabilir.
# Servis ve versiyon tespiti
nmap -sV 192.168.1.100
# Daha agresif versiyon tespiti (0-9 arası, varsayılan 7)
nmap -sV --version-intensity 9 192.168.1.100
# Tüm portlarda versiyon tespiti
sudo nmap -sS -sV -p- 192.168.1.100
# İşletim sistemi tespiti ile birlikte
sudo nmap -sV -O 192.168.1.100
Gerçek dünya örneği: Bir müşteri firmanın iç ağını denetlerken nmap -sV ile tarama yaptığımızda DMZ’deki bir sunucuda port 8080’de Tomcat 7.0.47 çalıştığını gördük. Bu versiyon CVE-2017-12617’ye karşı savunmasızdı. Müşteri bu servisten tamamen habersizdi, 2 yıl önce bir geliştirici test için kurmuş ve unutmuştu.
İşletim Sistemi Tespiti
# OS tespiti (root gerektirir)
sudo nmap -O 192.168.1.100
# OS tespiti + servis versiyonları
sudo nmap -O -sV 192.168.1.100
# OS tespiti agresif modda
sudo nmap -O --osscan-guess 192.168.1.100
OS tespiti her zaman yüzde yüz doğru değil. Özellikle firewall arkasındaki sistemler veya özelleştirilmiş TCP/IP stack’leri kullanan cihazlar (bazı embedded sistemler, IoT cihazları) yanıltıcı sonuçlar verebilir. Ama genel tabloda oldukça başarılı.
Agresif Mod ve Kombinasyonlar
-A parametresi OS tespiti, versiyon tespiti, script taraması ve traceroute’u tek seferde çalıştırır. Kapsamlı bilgi toplar ama gürültülüdür.
# Agresif tarama
sudo nmap -A 192.168.1.100
# Agresif tarama + tüm portlar
sudo nmap -A -p- 192.168.1.100
# Birden fazla hedef
sudo nmap -A 192.168.1.100 192.168.1.101 192.168.1.102
# Hedef listesinden oku
sudo nmap -A -iL hedef_listesi.txt
Zamanlama ve Performans Ayarları
Nmap’in 6 farklı zamanlama şablonu var (T0’dan T5’e). Bunlar tarama hızını ve ağ yükünü doğrudan etkiler.
- T0 (Paranoid): IDS atlatmak için son derece yavaş, paketler arasında 5 dakika bekleme
- T1 (Sneaky): Yavaş, IDS atlatma odaklı
- T2 (Polite): Normal hızın altında, ağ bant genişliğini korur
- T3 (Normal): Varsayılan değer
- T4 (Aggressive): Hızlı, güvenilir ağlarda kullanın
- T5 (Insane): Çok hızlı, sonuçlar güvenilmez olabilir
# Hızlı tarama (T4)
sudo nmap -T4 -sS 192.168.1.0/24
# Gürültüsüz tarama (T2, IDS atlatma amacıyla değil, ağ yükünü azaltmak için)
sudo nmap -T2 -sS 192.168.1.100
# Paralel tarama sayısını ayarla
sudo nmap --min-parallelism 50 --max-parallelism 200 192.168.1.0/24
# Timeout değerlerini ayarla
sudo nmap --host-timeout 30s --max-rtt-timeout 500ms 192.168.1.0/24
Nmap Scripting Engine (NSE)
NSE, Nmap’i gerçekten güçlü kılan özellik. Lua dilinde yazılmış scriptler sayesinde Nmap basit bir port tarayıcının çok ötesine geçiyor. Vulnerability tarama, brute force saldırıları, backdoor tespiti ve çok daha fazlası NSE ile mümkün.
NSE scriptleri kategorilere ayrılmış:
- auth: Kimlik doğrulama testleri
- broadcast: Ağ yayın taramaları
- brute: Brute force saldırıları
- default: Güvenli ve hızlı scriptler
- discovery: Ağ bilgisi toplama
- dos: Denial of service testleri (dikkatli kullanın)
- exploit: Exploit denemeleri
- fuzzer: Fuzzing testleri
- intrusive: Agresif ve potansiyel olarak zararlı testler
- malware: Malware tespiti
- safe: Hedef sisteme zarar verme riski düşük scriptler
- version: Versiyon tespiti yardımcıları
- vuln: Güvenlik açığı tespiti
# Varsayılan scriptleri çalıştır
nmap -sC 192.168.1.100
# Belirli bir script çalıştır
nmap --script=http-title 192.168.1.100
# Birden fazla script
nmap --script=http-title,http-headers 192.168.1.100
# Kategori bazlı script çalıştırma
nmap --script=vuln 192.168.1.100
# Script argümanları ile
nmap --script=http-brute --script-args http-brute.path=/admin 192.168.1.100
# SMB güvenlik açıkları kontrolü
sudo nmap --script=smb-vuln-* -p 445 192.168.1.100
Pratik NSE Örnekleri
# HTTP servisi hakkında detaylı bilgi
nmap -p 80,443,8080,8443 --script=http-title,http-server-header,http-auth-finder 192.168.1.100
# SSL/TLS sertifika bilgisi ve zafiyet kontrolü
nmap -p 443 --script=ssl-cert,ssl-enum-ciphers,ssl-heartbleed 192.168.1.100
# SSH versiyon ve algoritma bilgisi
nmap -p 22 --script=ssh2-enum-algos,ssh-auth-methods 192.168.1.100
# DNS bilgisi
nmap -p 53 --script=dns-zone-transfer,dns-recursion 192.168.1.100
# MySQL güvenlik kontrolü
nmap -p 3306 --script=mysql-info,mysql-empty-password,mysql-databases 192.168.1.100
# Tüm zafiyet scriptlerini çalıştır (üretim ortamında dikkatli kullanın)
sudo nmap --script=vuln -sV 192.168.1.100
Firewall Atlatma Teknikleri
Bu bölümü eklemek istiyorum çünkü gerçek dünya denetimlerinde firewall arkasındaki sistemleri test etmeniz gerekebilir. Ancak tekrar vurgulayayım: sadece yetki verilen sistemlerde kullanın.
# Fragment paketler (bazı eski firewall'ları atlatır)
sudo nmap -f 192.168.1.100
# Decoy tarama (sahte kaynak IP'ler ile)
sudo nmap -D RND:10 192.168.1.100
# Kaynak port manipülasyonu (80 veya 443'ten geliyormuş gibi)
sudo nmap --source-port 80 192.168.1.100
# MTU boyutunu ayarla
sudo nmap --mtu 16 192.168.1.100
# Yavaş tarama ile IDS atlatma
sudo nmap -T1 --scan-delay 2s 192.168.1.100
# Idle/Zombie scan (tamamen gizli tarama)
sudo nmap -sI <zombie_host> 192.168.1.100
Çıktı Formatları
Tarama sonuçlarını kaydetmek ve raporlamak profesyonel bir denetimin vazgeçilmez parçası.
# Normal çıktı
nmap -sV 192.168.1.100 -oN tarama_sonucu.txt
# XML çıktı (diğer araçlarla entegrasyon için)
nmap -sV 192.168.1.100 -oX tarama_sonucu.xml
# Grepable format
nmap -sV 192.168.1.100 -oG tarama_sonucu.gnmap
# Tüm formatları aynı anda kaydet
nmap -sV 192.168.1.100 -oA tarama_sonuclari
# Verbose mod ile detaylı çıktı
nmap -sV -v 192.168.1.100
# Çok detaylı çıktı
nmap -sV -vv 192.168.1.100
XML çıktısını tercih ediyorum çünkü Metasploit, Faraday, DefectDojo gibi araçlarla doğrudan entegre olabiliyor. Ayrıca xsltproc ile HTML rapora çevirmeniz de mümkün.
# XML'den HTML rapor oluştur
xsltproc tarama_sonuclari.xml -o rapor.html
Gerçek Dünya Senaryoları
Senaryo 1: Yeni Sunucu Devreye Alma Öncesi Kontrol
Bir sunucuyu production’a almadan önce açık portları doğrulamak iyi bir pratik.
# Sunucunun sadece gerekli portları açık mı kontrol et
sudo nmap -sS -sV -p- --open 10.0.1.50
# Beklediğimiz: sadece 22 (SSH) ve 443 (HTTPS) açık olmalı
# Fazladan açık port varsa devreye almayı ertele
Senaryo 2: Periyodik Ağ Denetimi
Haftalık veya aylık ağ denetimi scriptine Nmap entegre edebilirsiniz.
#!/bin/bash
TARIH=$(date +%Y%m%d_%H%M%S)
HEDEF_AG="10.0.0.0/24"
RAPOR_DIZIN="/var/log/nmap_raporlar"
mkdir -p $RAPOR_DIZIN
sudo nmap -sS -sV -T4 --open
--script=default,vuln
-oA "${RAPOR_DIZIN}/tarama_${TARIH}"
$HEDEF_AG
echo "Tarama tamamlandi: ${RAPOR_DIZIN}/tarama_${TARIH}"
Senaryo 3: Belirli Bir Servisi Ağ Genelinde Bulmak
Örneğin ağınızdaki tüm SSH sunucularını bulmak ve versiyon bilgilerini çekmek istiyorsunuz.
# Tüm ağda port 22 tarama
sudo nmap -p 22 --open -sV 10.0.0.0/16
# Sonucu parse et
grep "22/tcp" tarama_sonucu.gnmap | grep open | awk '{print $2}'
Senaryo 4: Log4Shell Sonrası Acil Durum Taraması
CVE-2021-44228 (Log4Shell) açıklandığında binlerce sysadmin hangi sistemlerinde Java/Log4j çalıştığını bulmak zorunda kaldı.
# HTTP servisi çalıştıran tüm sistemleri bul
sudo nmap -p 80,443,8080,8443,8888,9000 --open -sV
--script=http-title
-oA log4shell_oncelik
10.0.0.0/24
# Java tabanlı olabilecek servisleri filtrele
grep -i "java|tomcat|jboss|spring|elastic" log4shell_oncelik.nmap
Nmap Çıktısını Analiz Etmek
Ham Nmap çıktısını işlemek için grep ve awk kombinasyonu çok işe yarar.
# Açık portları listele
grep "open" tarama_sonucu.nmap
# Belirli servisi çalıştıran hostları bul
grep -i "apache|nginx" tarama_sonucu.nmap
# Grepable formatından IP ve açık port çekme
awk '/open/{print $2, $5}' tarama_sonucu.gnmap
# Sadece IP adreslerini listele
grep "Host:" tarama_sonucu.nmap | awk '{print $2}'
Nmap ile Yapılan Yaygın Hatalar
Yıllar içinde gördüğüm ve kendimin de yaptığı bazı hatalar var.
- Hedef ağı yanlış belirtmek:
192.168.1.0/24yerine192.168.1.1/24yazmak aynı ağı tarar ama bu alışkanlık daha büyük ağlarda hatalara yol açar. Her zamanipcalcile doğrulayın. - UDP taramasını atlamak: UDP servisleri sıkça göz ardı edilir. SNMP community string’i “public” olan bir cihaz büyük risk barındırır.
- T5 kullanımı: Üretim ağında T5 kullanmak hem yanlış sonuçlar verir hem de ağ ekibini alarma geçirebilir.
- NSE script sonuçlarını kör güvenmek: Özellikle vuln scriptleri yanlış pozitif verebilir. Her bulguyu manuel doğrulayın.
- Sonuçları kaydetmemek: Tarama yaptıktan sonra sonuçları kaydetmemek, ileride karşılaştırma yapamamanıza yol açar.
Nmap Alternatifleri ve Tamamlayıcı Araçlar
Nmap harika ama tek başına yeterli değil.
- Masscan: Çok daha hızlı port taraması, tüm interneti 6 dakikada tarayabilir. Versiyon tespiti yok ama hız gereken durumlarda Masscan ile keşif, Nmap ile detay doldurma kombinasyonu mükemmel çalışır.
- Rustscan: Rust ile yazılmış, son derece hızlı. Açık portları bulup Nmap’e aktarır.
- Shodan: İnternet bağlantılı cihazların pasif taraması.
- Netdiscover: ARP tabanlı ağ keşfi, özellikle yerel ağlarda etkili.
- Zenmap: Nmap’in grafik arayüzü, raporlama için kullanışlı.
# Rustscan + Nmap kombinasyonu
rustscan -a 192.168.1.100 -- -sV -sC
# Masscan ile hızlı port keşfi sonra Nmap ile detay
masscan 10.0.0.0/24 -p1-65535 --rate=1000 -oL masscan_sonuc.txt
# Ardından bulunan portları Nmap ile detaylı tara
Güvenli ve Etik Nmap Kullanımı
Güvenlik denetimi yapıyorsanız birkaç temel kural:
- Her zaman yazılı izin alın ve izin belgesinde taranacak IP aralıklarını açıkça belirtin.
- Üretim sistemlerini düşük yoğunluklu saatlerde tarayın.
- Tarama parametrelerinizi ve zamanları log’layın.
- Bulguları güvenli biçimde raporlayın, açık bırakmayın.
- Bulduğunuz açıkları responsible disclosure prensipleriyle bildirin.
Sonuç
Nmap, sysadmin ve güvenlik profesyonellerinin en temel silahlarından biri. Temel port taramadan NSE scriptleriyle gelişmiş güvenlik analizine kadar geniş bir yelpazede kullanılabiliyor. Bu yazıda ele aldığımız konuları bir kenara bırakın: Nmap’i gerçekten öğrenmenin en iyi yolu kendi lab ortamınızda denemek. VirtualBox veya VMware üzerinde birkaç sanal makine kurun, Metasploitable veya DVWA gibi kasıtlı olarak savunmasız sistemleri ayağa kaldırın ve Nmap ile üzerlerine gidin.
Ağınızı düzenli olarak taramak, güvenlik postürünüzü sürekli güncel tutmanın en pratik yollarından biri. Saldırganlar ağınızı sizden önce keşfetmesin. Periyodik Nmap taramaları, beklenmedik açık portları, yetkisiz servisleri ve güvenlik açıklarını erkenden tespit etmenizi sağlar. Karanlıkta iş yapmak zorunda değilsiniz.
Bir sonraki yazıda Nmap NSE scriptlerini kendi ihtiyaçlarınıza göre yazmayı ele alacağız. Lua öğrenmek göründüğü kadar zor değil ve özelleştirilmiş tarama ihtiyaçlarınız için son derece güçlü bir yetenek.
