dnstop ile DNS Trafiğini Gerçek Zamanlı İzleme ve Analiz

Ağ trafiğini izlemek söz konusu olduğunda çoğu sysadmin aklına ilk olarak tcpdump ya da Wireshark gelir. Ancak DNS trafiğini özelinde analiz etmek istediğinizde bu araçlar biraz fazla “kaba kuvvet” gibi hissettiriyor. İşte tam bu noktada dnstop devreye giriyor: sadece DNS paketlerine odaklanan, terminal üzerinde çalışan ve gerçek zamanlı istatistikler sunan sade ama güçlü bir araç. Birkaç yıl önce bir müşterinin DNS sunucusunda açıklanamayan yüksek CPU kullanımı sorunu yaşadığımda bu araçla tanıştım. O günden beri ağ analizim sırasında vazgeçilmezlerimden biri oldu.

dnstop Nedir ve Ne İşe Yarar?

dnstop, ağ arayüzünü dinleyerek DNS sorgularını yakalayan ve bunları sınıflandırılmış istatistikler halinde gösteren bir araçtır. top komutundan ilham alan arayüzü sayesinde hangi kaynak IP’lerin en çok sorgu yaptığını, hangi alan adlarının en sık sorgulandığını ve hangi sorgu tiplerinin (A, AAAA, MX, PTR vb.) ne sıklıkla kullanıldığını anlık olarak görebilirsiniz.

Özellikle şu senaryolarda hayat kurtarır:

  • DNS amplification saldırısı tespiti
  • Yanlış yapılandırılmış istemci tespiti (döngüsel sorgular gönderen sunucular)
  • Yüksek DNS yükünün kaynağını bulmak
  • Belirli bir alan adına yönelik anormal sorgu artışını izlemek
  • Cache hit/miss oranlarını dolaylı yoldan analiz etmek

Kurulum

Çoğu dağıtımda dnstop paket depolarında bulunur.

# Debian/Ubuntu
sudo apt-get install dnstop

# RHEL/CentOS/Rocky Linux
sudo yum install dnstop
# veya dnf kullananlar için:
sudo dnf install dnstop

# Fedora
sudo dnf install dnstop

# Arch Linux
sudo pacman -S dnstop

RHEL tabanlı sistemlerde EPEL reposu aktif değilse paketi bulamayabilirsiniz. Bu durumda şunu çalıştırın:

sudo dnf install epel-release
sudo dnf install dnstop

Kaynak koddan derlemek isteyenler için de seçenek mevcut. Özellikle eski sürüm sistemlerde veya paket depolarında olmayan platformlarda bu yolu tercih edebilirsiniz:

# Bağımlılıkları kur
sudo apt-get install libpcap-dev make gcc

# Kaynak kodu indir ve derle
wget https://dns.measurement-factory.com/tools/dnstop/src/dnstop-20140915.tar.gz
tar -xzf dnstop-20140915.tar.gz
cd dnstop-20140915
./configure
make
sudo make install

Temel Kullanım

dnstop‘u çalıştırmak için root yetkisine veya CAP_NET_RAW kapasitesine ihtiyacınız var çünkü ham paket yakalamak gerekiyor.

sudo dnstop eth0

Bu kadar. Artık ekranda DNS trafiğini izlemeye başladınız. Ancak sadece bu komutla başlamak biraz “boş sahneye çıkmak” gibi. Asıl güç parametrelerde ve tuş kısayollarında saklı.

Parametreler ve Seçenekler

Komut satırından kullanabileceğiniz önemli parametreler şunlar:

  • -b boyut: Yakalama tamponu boyutunu ayarlar (byte cinsinden)
  • -i arayüz: Dinlenecek ağ arayüzünü belirtir (eth0, ens3, bond0 gibi)
  • -r dosya: Canlı trafik yerine pcap dosyasını analiz eder
  • -l seviye: Alan adı hiyerarşisi seviyesini belirler (1=TLD, 2=SLD, 3=üçüncü seviye)
  • -n: Sorgu sayılarını normalleştirilmiş olarak gösterir
  • -Q: Sadece sorguları göster, yanıtları dahil etme
  • -R: Sadece yanıtları göster
  • -1: Tek seferlik çalıştır ve çık (script kullanımı için)
  • -f filtre: BPF filtre ifadesi belirle
  • -p port: DNS için farklı port kullanıyorsanız belirtin (varsayılan 53)
  • -X: Sadece harici trafiği izle, loopback’i dahil etme
  • -s: Başlangıçta istatistikleri göster

Arayüz İçi Klavye Kısayolları

dnstop çalışırken çeşitli tuşlarla görünümü değiştirebilirsiniz. Bu kısayolları bilmek, aracı gerçek anlamda verimli kullanmayı sağlar.

  • s: Kaynak IP adresleri istatistiklerini göster
  • d: Hedef IP adresleri istatistiklerini göster
  • t: Sorgu tipleri (A, AAAA, MX vb.) görünümü
  • 1: Birinci seviye alan adlarına göre sırala (TLD)
  • 2: İkinci seviye alan adlarına göre sırala
  • 3: Üçüncü seviye alan adlarına göre sırala
  • ^R (Ctrl+R): İstatistikleri sıfırla
  • q: Çıkış
  • ?: Yardım ekranı

Gerçek Dünya Senaryoları

Senaryo 1: DNS Amplification Saldırısının Tespiti

Bir gece mesai saatlerinin dışında sunucunuzdan “yüksek DNS yanıt trafiği” alarmı geldi. Sunucuya bağlandınız ve ilk yaptığınız şey dnstop’u çalıştırmak oldu:

sudo dnstop -l 2 eth0

Ekranda belirli bir kaynak IP’nin (diyelim ki 192.168.1.50) dakikada binlerce ANY tipi sorgu gönderdiğini gördünüz. Bu klasik bir amplification saldırısı işareti. ANY sorgu tipi, DNS sunucusunun en büyük yanıtı döndürmesine neden olur. Saldırganlar sahte kaynak IP’lerle bu yöntemi kullanarak hedefe büyük trafik yönlendirir.

Sorgu tiplerine göre filtrelemek için t tuşuna basın ve ANY sorgularının diğerlerine oranla ne kadar yüksek olduğunu kontrol edin.

Senaryo 2: Yanlış Yapılandırılmış Uygulama Sunucusu

Bir uygulama geliştirme ekibinin yeni deploy ettiği servisten sonra DNS sunucunuzun yükü aniden arttı. dnstop ile kaynağı bulmak son derece kolay:

sudo dnstop -l 3 -Q eth0

-Q parametresi sadece sorguları gösterir, yanıtları filtreler. -l 3 ise üçüncü seviyeye kadar alan adı detayı sunar. Birkaç saniye içinde hangi IP’nin hangi alan adını sürekli sorguladığını görebilirsiniz.

Pratikte bunu şöyle yapardım: ekranı açtıktan sonra s tuşuna basarak kaynak IP görünümüne geçerdim. Eğer bir IP diğerlerinden çok daha fazla sorgu yapıyorsa, bu genellikle ya timeout/retry döngüsüne girmiş bir uygulama ya da yanlış yapılandırılmış bir cache mekanizmasıdır.

Senaryo 3: Belirli Bir Alan Adına Yönelik İzleme

Bir müşteri “neden xyz-domain.com adresine giremiyor” diye şikayet ediyor. DNS çözümlemesinde sorun var mı, yok mu? Bunu izlemek için:

sudo dnstop -f "udp port 53" eth0

Ardından arayüzde 2 tuşuna basarak ikinci seviye alan adları görünümüne geçin. Sorgunun gerçekten geliyor olup olmadığını, kaç kez tekrarlandığını ve herhangi bir yanıt alınıp alınmadığını görebilirsiniz.

Senaryo 4: pcap Dosyası Üzerinde Analiz

Canlı trafiği izlemek her zaman mümkün olmayabilir. Bazen tcpdump ile önce trafiği kaydedip sonra analiz etmek daha pratik olur. Özellikle geçmişteki bir olayı araştırırken bu yöntem çok işe yarar.

# Önce trafiği kaydet
sudo tcpdump -i eth0 -w dns_capture.pcap port 53

# Sonra dnstop ile analiz et
sudo dnstop -r dns_capture.pcap

Bu kombinasyon özellikle değerli: tcpdump’ın güçlü yakalama kapasitesi + dnstop’un anlaşılır istatistiksel görünümü. Gece çalışan bir script ile trafik kaydedip sabah analiz edebilirsiniz.

Senaryo 5: Yüksek Hacimli Ortamda Performanslı İzleme

Çok yoğun DNS trafiği olan ortamlarda (örneğin büyük bir şirketin recursive resolver’ı) dnstop bazen paket düşürebilir. Buffer boyutunu artırmak bu durumda yardımcı olur:

sudo dnstop -b 4096000 eth0

4MB’lık yakalama tamponu, ani trafik artışlarında paket kaybını önemli ölçüde azaltır. Çok daha yoğun ortamlarda bu değeri 8MB veya 16MB’a kadar çıkarmak da makul.

Senaryo 6: Script ile Periyodik DNS Raporu

-1 parametresi dnstop’u tek seferlik çalıştırmak için kullanılır. Bu özelliği kullanarak otomatik DNS raporları oluşturmak mümkün:

#!/bin/bash
# dns_report.sh - Her saat başı DNS istatistiklerini kaydet

LOGDIR="/var/log/dns-stats"
TIMESTAMP=$(date +"%Y%m%d-%H%M")
INTERFACE="eth0"
DURATION=300  # 5 dakika boyunca izle

mkdir -p "$LOGDIR"

# dnstop'u 5 dakika boyunca çalıştır ve çıktıyı kaydet
timeout $DURATION sudo dnstop -1 -l 2 "$INTERFACE" > "$LOGDIR/dns-$TIMESTAMP.txt" 2>&1

echo "DNS raporu kaydedildi: $LOGDIR/dns-$TIMESTAMP.txt"

Bunu crontab’a ekleyin:

0 * * * * /usr/local/bin/dns_report.sh

Bu script sayesinde her saat başı 5 dakikalık bir DNS fotoğrafı çekmiş olursunuz. Retrospektif analizler için son derece faydalı.

Senaryo 7: İki Arayüzü Aynı Anda İzleme

Birden fazla ağ arayüzünüz varsa (örneğin hem internal hem external arayüz) bunları aynı anda izlemek için birden fazla dnstop instance’ı başlatabilirsiniz:

# Terminali bölerek ya da tmux ile
sudo dnstop eth0 &
sudo dnstop eth1 &

Ya da screen veya tmux kullanarak her arayüzü ayrı panelde izleyebilirsiniz:

# tmux ile
tmux new-session -d -s dns-monitor
tmux split-window -h
tmux send-keys -t dns-monitor:0.0 "sudo dnstop eth0" Enter
tmux send-keys -t dns-monitor:0.1 "sudo dnstop eth1" Enter
tmux attach -t dns-monitor

dnstop ile dnsstat Karşılaştırması

dnsstat gibi alternatifler de mevcut, ancak dnstop’un birkaç avantajı var. Öncelikle etkileşimli arayüzü gerçek zamanlı izleme için çok daha elverişli. pcap dosyası desteği sayesinde post-mortem analizlerde de kullanılabiliyor. Dezavantajı ise uzun süreli tarihsel veri depolama özelliğinin olmaması. Bu ihtiyaç için dnstop’u betiklerle sarmalamak ya da daha kapsamlı çözümlere (dnsdist, PowerDNS Statistics, Prometheus + dnsdist exporter) bakmak gerekiyor.

Güvenlik Notları ve İzinler

dnstop ham soket kullandığı için root yetkisi ya da uygun capabilities gerektirir. Production ortamında bunu mümkün olduğunca kısıtlı tutmak önemli:

# Belirli bir kullanıcıya CAP_NET_RAW yetkisi ver
sudo setcap cap_net_raw+eip /usr/sbin/dnstop

# Ya da sudo kuralı ile kısıtlı kullanım
echo "netadmin ALL=(ALL) NOPASSWD: /usr/sbin/dnstop" | sudo tee -a /etc/sudoers.d/dnstop

Ayrıca DNS trafiği kişisel veri içerebileceğinden (hangi kullanıcı hangi siteye sorgu attı gibi), özellikle kurumsal ortamlarda bu aracı kullanmadan önce veri gizliliği politikalarını gözden geçirmekte fayda var. KVKK açısından loglamak ayrı bir dikkat gerektiriyor.

Pratik İpuçları

Yıllarca kullanım sonucunda edindiğim birkaç pratik ipucu:

  • BPF filtreleri kullanın: Yoğun trafikte gereksiz paketleri filtrelemek için sudo dnstop -f "udp port 53 and src net 10.0.0.0/8" eth0 gibi BPF ifadeleri kullanın. Bu hem CPU kullanımını azaltır hem de sadece ilgilendiğiniz trafiği gösterir.
  • -l 2 genellikle yeterli: Çoğu durumda ikinci seviye alan adı görünümü (-l 2) analiz için fazlasıyla yeterli bilgi sunar. Üçüncü seviyeye çıkmak gerektiğinde output çok ayrıntılı hale gelebilir.
  • Ekran yenileme hızına dikkat: Çok hızlı değişen trafikte rakamları takip etmek zorlaşabilir. Ctrl+R ile istatistikleri periyodik olarak sıfırlayarak taze verilerle çalışın.
  • tcpdump ile birlikte kullanın: Şüpheli bir IP tespit ettiğinizde tcpdump ile o IP’ye özel detaylı yakalama yapın: sudo tcpdump -i eth0 -w suspect.pcap host 192.168.1.50 and port 53
  • DNS over TCP’yi unutmayın: Büyük DNS yanıtları (DNSSEC, zone transfer vb.) TCP üzerinden gelir. Gerekirse sudo dnstop -f "port 53" eth0 ile hem UDP hem TCP’yi kapsayın.

Sonuç

dnstop gösterişli bir araç değil; özellik listesi kısa, arayüzü minimal, belgelendirmesi sınırlı. Ama tam olarak buna ihtiyacınız olduğunda, yani “bu DNS sunucusunda ne oluyor” sorusuna hızlı ve net bir cevap aradığınızda, bu sadeliği en büyük gücü haline geliyor. Birkaç saniye içinde kurulup çalışıyor, sisteme minimum yük bindiriyor ve size doğrudan ihtiyacınız olan bilgiyi sunuyor.

DNS sorunlarıyla uğraşan her sysadmin’in toolbox’ında bulunmasını önerdiğim araçlardan biri. Özellikle güvenlik olayları sırasında ya da “DNS yavaşladı ama neden bilmiyorum” durumlarında ilk başvurduğum araç haline geldi. Bir kez alışıp reflekslerinize kattıktan sonra vazgeçmek zor oluyor.

Bir sonraki yazıda dnstop‘u daha kapsamlı DNS izleme çözümleriyle nasıl entegre edebileceğinizi, özellikle Prometheus ve Grafana ile birlikte kullanım senaryolarını ele alacağım.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir