Ağ yönetiminde en çok ihtiyaç duyduğun anlardan biri şudur: “Bu sunucuda hangi portlar açık?” ya da “Ağımda beklenmedik bir cihaz var mı?” İşte tam bu noktada nmap devreye giriyor. Network Mapper yani nmap, 1997’den beri sysadmin’lerin vazgeçilmezi olan, açık kaynaklı ve inanılmaz derecede güçlü bir ağ keşif aracı. Pentest uzmanlarından sistem yöneticilerine kadar herkes kullanıyor, ama çoğu kişi yüzeysel birkaç komutun ötesine geçemiyor. Bu yazıda nmap’i gerçekten verimli kullanmayı, günlük operasyonlarda nasıl işe yaradığını ve bazı ileri seviye teknikleri ele alacağız.
Nmap Kurulumu
Hemen hemen tüm Linux dağıtımlarında nmap paket depolarında mevcut. Kurulum oldukça basit:
# Debian/Ubuntu
sudo apt install nmap
# RHEL/CentOS/Rocky Linux
sudo dnf install nmap
# Arch Linux
sudo pacman -S nmap
# Windows için Nmap.org'dan installer indirilebilir
# ya da WSL üzerinden kullanılabilir
Kurulumdan sonra versiyonu kontrol etmek iyi bir alışkanlık. Özellikle eski sürümlerde bazı NSE scriptleri çalışmayabiliyor:
nmap --version
Temel Sözdizimi ve İlk Taramalar
Nmap’in temel kullanımı oldukça sezgisel. Bir IP, bir hostname ya da bir ağ bloğu veriyorsun, gerisini nmap hallediyor.
# Tek bir host tarama
nmap 192.168.1.1
# Hostname ile tarama
nmap sunucu.sirket.com
# Bir ağ bloğunu tarama (CIDR notasyonu)
nmap 192.168.1.0/24
# IP aralığı ile tarama
nmap 192.168.1.1-50
# Birden fazla hedef
nmap 192.168.1.1 192.168.1.5 192.168.1.10
Varsayılan nmap taraması TCP SYN taraması yapar ve en yaygın 1000 portu kontrol eder. Bu çoğu durum için yeterli, ama gerçek dünyada bunun sınırlarına hızlıca ulaşıyorsun.
Yaygın Parametreler
Nmap parametrelerini iyi bilmek, işini çok kolaylaştırıyor. İşte günlük kullanımda en sık karşılaşacakların:
-sS: TCP SYN taraması (yarı açık tarama, en yaygın yöntem) -sT: TCP Connect taraması (root yetkisi gerektirmez) -sU: UDP port taraması -sV: Servis versiyon tespiti -sC: Varsayılan NSE scriptlerini çalıştırır -O: İşletim sistemi tespiti -A: Agresif tarama (-sV -sC -O ve traceroute birlikte) -p: Port belirtme -p-: Tüm 65535 portu tara –top-ports: En yaygın N portu tara -T0 ile -T5: Zamanlama şablonları (0 en yavaş, 5 en hızlı) -v veya -vv: Verbose mod -oN: Normal formatta çıktıyı dosyaya kaydet -oX: XML formatında kaydet -oG: Grepable formatta kaydet -oA: Üç formatı birden kaydet –open: Sadece açık portları göster -Pn: Host discovery atla, direkt port tara -n: DNS çözümlemesi yapma (hız için) –reason: Portun neden açık/kapalı görüldüğünü göster
Port Tarama Teknikleri
Hızlı Ağ Taraması
Büyük bir ağı taradığında zaman kritik faktör oluyor. Şirket ağında 200 cihaz varsa hepsini yavaş taramak saatler alabilir:
# Sadece ping taraması - ağda kim var?
nmap -sn 192.168.1.0/24
# Hızlı tarama - sadece en yaygın 100 port
nmap -F 192.168.1.0/24
# Aggressive timing ile hızlandırma
nmap -T4 -F 192.168.1.0/24
# Açık portları göster, DNS çözümleme yapma
nmap -T4 --open -n 192.168.1.0/24
-sn parametresi port taraması yapmadan sadece host keşfi yapıyor. Ağda hangi cihazların aktif olduğunu öğrenmek için mükemmel. Ben bunu her pazartesi sabahı otomatik çalıştırıp sonuçları önceki haftayla karşılaştırıyorum. Yeni bir cihaz görünürse anında haberim oluyor.
Belirli Portları Tarama
Her zaman tüm portları taramak gerekmez. Belirli servisleri kontrol etmek için:
# Tek port
nmap -p 80 192.168.1.1
# Birden fazla port
nmap -p 22,80,443,3306,5432 192.168.1.0/24
# Port aralığı
nmap -p 1-1024 192.168.1.1
# Tüm portlar (bu zaman alır)
nmap -p- 192.168.1.1
# En yaygın 1000 port (default davranış)
nmap --top-ports 1000 192.168.1.1
# Servis adıyla port belirtme
nmap -p http,https,ssh 192.168.1.1
UDP Tarama
TCP taramalar dikkat çekici olabiliyor ve firewall’lar tarafından engellenebiliyor. UDP ise genellikle göz ardı edilen bir alan. DNS (53), SNMP (161), NTP (123) gibi kritik servisler UDP üzerinden çalışıyor:
# UDP tarama (yavaş olduğu için port sayısını sınırla)
sudo nmap -sU -p 53,67,68,123,161,162,500 192.168.1.0/24
# TCP ve UDP birlikte
sudo nmap -sS -sU -p T:80,443,U:53,161 192.168.1.1
UDP taraması neden yavaş? Çünkü kapalı UDP portları ICMP “port unreachable” mesajı gönderirken, açık portlar genellikle sessiz kalıyor. Nmap timeout beklemek zorunda.
Servis ve Versiyon Tespiti
Port açık bilgisi güzel ama yetersiz. O portta ne çalıştığını bilmek çok daha değerli:
# Versiyon tespiti
nmap -sV 192.168.1.1
# Agresif versiyon tespiti (daha doğru ama daha yavaş)
nmap -sV --version-intensity 9 192.168.1.1
# OS tespiti ile birlikte
sudo nmap -sV -O 192.168.1.1
# Her şeyi bir arada
sudo nmap -A 192.168.1.1
Gerçek dünya senaryosu: Bir müşterinin sunucusunu denetlerken Apache 2.2.3 gördüm. Bu sürüm 2006’dan kalma ve onlarca kritik açığı var. Sadece “port 80 açık” bilgisi olsaydı bunu gözden kaçırırdım. Versiyon tespiti hayat kurtarıyor.
# Örnek çıktı görünümü için verbose ile çalıştırma
nmap -sV -v 192.168.1.100
# Sonuçları dosyaya kaydetme
nmap -sV -oN tarama_sonuclari.txt 192.168.1.0/24
NSE – Nmap Scripting Engine
NSE, nmap’i basit bir port tarayıcıdan güçlü bir güvenlik aracına dönüştüren özellik. Lua ile yazılmış yüzlerce script mevcut. Kategorilere göre ayrılmışlar:
auth: Kimlik doğrulama testleri broadcast: Ağ keşfinde broadcast kullananlar brute: Kaba kuvvet saldırıları default: Varsayılan scriptler (-sC ile çalışanlar) discovery: Servis ve host keşfi dos: Denial of service testleri (dikkatli kullan!) exploit: Exploit denemeleri fuzzer: Fuzzing scriptleri intrusive: Sisteme zarar verebilecek scriptler malware: Malware tespiti safe: Güvenli scriptler version: Versiyon tespiti vuln: Güvenlik açığı tespiti
# Varsayılan scriptleri çalıştır
nmap -sC 192.168.1.1
# Belirli bir script çalıştır
nmap --script=http-title 192.168.1.1
# Birden fazla script
nmap --script=http-title,http-headers 192.168.1.1
# Script kategorisi ile çalıştır
nmap --script=safe 192.168.1.1
# Vuln kategorisi - güvenlik açığı taraması
sudo nmap --script=vuln 192.168.1.1
# SMB güvenlik açıkları (EternalBlue vs.)
sudo nmap --script=smb-vuln* -p 445 192.168.1.0/24
Popüler NSE Script Örnekleri
Günlük operasyonlarda en çok kullandığım scriptler şunlar:
# HTTP başlıklarını ve başlık bilgisini al
nmap --script=http-headers,http-title -p 80,443,8080,8443 192.168.1.0/24
# SSH versiyon ve algoritma bilgisi
nmap --script=ssh2-enum-algos -p 22 192.168.1.0/24
# MySQL boş root şifresi kontrolü
nmap --script=mysql-empty-password -p 3306 192.168.1.0/24
# DNS bilgisi topla
nmap --script=dns-brute sirket.com
# SNMP community string tespiti
nmap --script=snmp-brute -p 161 -sU 192.168.1.0/24
# SSL/TLS sertifika bilgisi
nmap --script=ssl-cert -p 443 192.168.1.0/24
Gerçek Dünya Senaryoları
Senaryo 1: Yeni İşe Başlayan Sysadmin’in İlk Ağ Envanteri
Yeni bir şirkete girdin ve ağda ne olduğunu bilmiyorsun. Kimse düzgün dokümantasyon tutmamış (hep böyle olur). İlk iş:
# Önce ağda kimin olduğunu öğren
sudo nmap -sn 10.0.0.0/24 -oG - | grep "Up" | awk '{print $2}' > aktif_hostlar.txt
# Aktif hostlarda temel port taraması
sudo nmap -sS -sV -T4 --open -iL aktif_hostlar.txt -oA ag_envanteri
# Sonuçları görüntüle
cat ag_envanteri.nmap
Bu üç komutla birkaç dakika içinde ağdaki tüm aktif cihazları, açık portları ve çalışan servisleri görüntüleyebilirsin. Müthiş bir başlangıç noktası.
Senaryo 2: Firewall Kuralı Doğrulama
Yeni bir firewall kuralı ekledin ve gerçekten çalışıp çalışmadığını test etmek istiyorsun:
# Belirli bir portun dışarıdan erişilebilir olup olmadığını test et
nmap -p 3306 -Pn SUNUCU_IP
# Birden fazla port kontrolü
nmap -p 22,80,443,3306,5432,6379,27017 -Pn SUNUCU_IP
# Detaylı sonuç için
nmap -p 3306 -Pn --reason SUNUCU_IP
--reason parametresi özellikle faydalı. Portun neden açık, kapalı ya da filtered göründüğünü açıklıyor. Firewall bir portu engelliyor mu, servis mi dinlemiyor, anlık olarak mı düşük? Bunların cevabını veriyor.
Senaryo 3: Rutin Güvenlik Denetimi
Her ay periyodik güvenlik denetimi yapıyorsun. Kritik sunucularda beklenmedik portlar açılmış mı kontrol et:
#!/bin/bash
# aylik_guvenlik_tarama.sh
TARIH=$(date +%Y%m%d)
HEDEF_DOSYA="/etc/nmap/kritik_sunucular.txt"
CIKTI_DIZIN="/var/log/nmap"
mkdir -p $CIKTI_DIZIN
# Kritik sunucuları tara
sudo nmap -sS -sV -sC -T4
--open
-iL $HEDEF_DOSYA
-oA $CIKTI_DIZIN/tarama_$TARIH
# Önceki ay ile karşılaştır (diff ile)
if [ -f "$CIKTI_DIZIN/tarama_onceki.nmap" ]; then
diff $CIKTI_DIZIN/tarama_onceki.nmap
$CIKTI_DIZIN/tarama_$TARIH.nmap >
$CIKTI_DIZIN/degisiklikler_$TARIH.txt
if [ -s $CIKTI_DIZIN/degisiklikler_$TARIH.txt ]; then
echo "UYARI: Degisiklikler tespit edildi!"
cat $CIKTI_DIZIN/degisiklikler_$TARIH.txt
fi
fi
cp $CIKTI_DIZIN/tarama_$TARIH.nmap $CIKTI_DIZIN/tarama_onceki.nmap
Senaryo 4: Web Sunucusu Keşfi
Bir organizasyonun web altyapısını keşfetmek istiyorsun:
# HTTP/HTTPS çalışan sunucuları bul
nmap -p 80,443,8080,8443,8000,8888 --open -T4 10.0.0.0/24
# Web sunucu bilgilerini topla
nmap --script=http-title,http-server-header,http-methods
-p 80,443,8080
--open
10.0.0.0/24
# SSL sertifika bilgileri
nmap --script=ssl-cert,ssl-enum-ciphers
-p 443,8443
10.0.0.0/24
Performans ve Zamanlama
Büyük ağları tararken performans kritik. Nmap’in zamanlama şablonları (-T0 ile -T5) işini kolaylaştırıyor:
-T0 (paranoid): IDS’den kaçınmak için çok yavaş, paketler arası 5 dakika bekleme -T1 (sneaky): Yavaş, paketler arası 15 saniye -T2 (polite): Bant genişliği tasarrufu için yavaş -T3 (normal): Varsayılan -T4 (aggressive): Hızlı, güvenilir ağlar için önerilir -T5 (insane): Çok hızlı, bazı sonuçları kaçırabilirsin
# Hızlı ağ için T4
nmap -T4 192.168.1.0/24
# Paralel host sayısını manuel ayarla
nmap --min-hostgroup 64 --max-hostgroup 256 192.168.1.0/24
# Paralel probe sayısı
nmap --min-parallelism 100 192.168.1.0/24
# Timeout değerleri
nmap --host-timeout 30s --scan-delay 100ms 192.168.1.0/24
Çıktı Formatları ve Raporlama
Nmap sonuçlarını farklı formatlarda kaydedebilirsin. Özellikle düzenli denetimler yapıyorsan raporlamayı otomatize etmek çok önemli:
# Normal metin çıktısı
nmap -oN rapor.txt 192.168.1.1
# XML çıktısı (araçlarla işleme için)
nmap -oX rapor.xml 192.168.1.1
# Grepable format (metin işleme için)
nmap -oG rapor.gnmap 192.168.1.1
# Üçünü birden oluştur
nmap -oA rapor 192.168.1.1
# rapor.nmap, rapor.xml ve rapor.gnmap oluşturulur
# Grepable çıktıdan sadece açık portları çek
grep "open" rapor.gnmap | awk '{print $2, $5}'
XML çıktısını sonradan işlemek için kullanışlı araçlar var. xsltproc ile HTML rapora çevirebilirsin:
# XML'den HTML rapor oluştur
xsltproc /usr/share/nmap/nmap.xsl rapor.xml -o rapor.html
Önemli Uyarılar ve Etik Kullanım
Nmap kullanırken birkaç kritik noktaya dikkat etmek gerekiyor:
İzin almadan tarama yapma. Bu yasal sorunlara yol açabilir. Sadece kendi ağlarını veya açık izin verilen sistemleri tara.
Üretim sistemlerinde dikkatli ol. Agresif taramalar (-T5, --script=vuln) yük altındaki sistemlerde sorun çıkarabilir, servis kesintisine bile neden olabilir. Mümkünse bakım pencerelerinde çalıştır.
IDS/IPS sistemleri seni tespit edebilir. Şirket ağında tarama yapıyorsan güvenlik ekibini önceden bilgilendir. Yoksa alarm tetikleyip gereksiz panik yaratırsın.
Loglara düşüyorsun. Hedef sistemler taramalarını logluyor. Bu hem iyi (kendi sistemlerini izliyorsun) hem de kötü (izinsiz taramalar kolayca tespit edilir) bir şey.
Nmap Alternatif Araçlarıyla Kombinasyon
Nmap güçlü ama tek başına her şeyi yapmıyor. Birkaç araçla kombine kullanmak verimliliği artırıyor:
- masscan: Ultra hızlı port tarayıcı. Büyük internet bloklarını taramak için. Önce masscan ile hızlıca açık portları bul, sonra nmap ile detaylı analiz yap.
- nikto: Web uygulama güvenlik tarayıcısı. Nmap ile HTTP sunucuları bulduktan sonra nikto ile web açıklarını tara.
- metasploit: Nmap XML çıktısını doğrudan import edebiliyor. Pentest workflow’unda mükemmel entegrasyon.
- ndiff: İki nmap taraması arasındaki farkları gösteriyor. Periyodik taramaları karşılaştırmak için ideal.
# ndiff ile iki taramayı karşılaştır
ndiff tarama_ocak.xml tarama_subat.xml
# masscan ile hızlı tarama, nmap ile derinlemesine analiz
masscan 192.168.1.0/24 -p1-65535 --rate=1000 -oL masscan_sonuc.txt
# Masscan sonuçlarından IP ve portları al, nmap ile detaylandır
Sonuç
Nmap, sysadmin araç kutusunun vazgeçilmez bir parçası. Kurulumu kolay, kullanımı esnek ve son derece güçlü. Bu yazıda ele aldığımız konuları özetlemek gerekirse: temel port taramalarından servis tespitine, NSE scriptlerinden performans optimizasyonuna kadar nmap’in sunduğu imkanlar gerçekten geniş.
Pratik tavsiyem şu: Her gün biraz kullan. Kendi lab ortamında dene, farklı parametreleri test et. Özellikle -sV, -sC ve --script=vuln kombinasyonunu kendi sunucularında çalıştır. Sonuçlar seni şaşırtabilir. Bir çok kez “bu port neden açık?” diye kendime sormuşumdur ve eski bir servisin unutulmuş çalıştığını bulmuşumdur.
Son olarak, etik kullanım konusunu tekrar vurgulayayım. Nmap çok güçlü bir araç ve bu gücü sorumlu kullanmak gerekiyor. Kendi ağlarında, test ortamlarında ve açık izin alınmış sistemlerde özgürce kullan. Ağ güvenliğini artırmak için harika bir araç, ama yanlış ellerde ciddi sorunlara yol açabilir. Güvenli taramalar!