Ağ sorunlarını çözmek için bazen tek ihtiyacın olan şey, trafiğin tam olarak ne yaptığını görmektir. Wireshark, bu görevi yerine getiren en güçlü araçlardan biri. Hem GUI hem de terminal tabanlı kullanımıyla Linux sysadmin’lerin vazgeçilmezi olan bu araç, paket analizini adeta bir sanat haline getiriyor. Bu yazıda Wireshark’ı Linux’a kuradan, gerçek dünya senaryolarında nasıl kullanacağına kadar her şeyi ele alacağız.
Wireshark Nedir ve Neden Kullanmalısın?
Wireshark, ağ trafiğini gerçek zamanlı olarak yakalayan ve analiz eden açık kaynaklı bir paket analizörüdür. 1998 yılında Gerald Combs tarafından “Ethereal” adıyla başlatılan bu proje, bugün dünyanın en yaygın kullanılan ağ analiz aracı haline geldi.
Bir sysadmin olarak şu senaryoların herhangi birini yaşadıysan Wireshark tam sana göre:
- Uygulama neden bu kadar yavaş çalışıyor sorusuna cevap arıyorsun
- DNS çözümlemelerinde sorun var ama tam olarak nerede olduğunu bilmiyorsun
- Ağda şüpheli trafik olduğunu düşünüyorsun
- İki sunucu arasındaki iletişimin tam olarak nasıl gerçekleştiğini anlamak istiyorsun
- SSL/TLS el sıkışmalarında sorun var ve debug etmen gerekiyor
Wireshark’ın terminal versiyonu olan TShark da bu yazıda ele alacağımız konular arasında. Uzak sunucularda GUI olmadan çalışırken TShark hayat kurtarıcı oluyor.
Kurulum
Ubuntu/Debian Sistemlerde Kurulum
sudo apt update
sudo apt install wireshark wireshark-common tshark -y
Kurulum sırasında “Should non-superusers be able to capture packets?” sorusu gelecek. Burada Yes seçeneğini seç. Bu, root olmadan paket yakalamana izin verir.
Eğer bu ayarı sonradan değiştirmek istersen:
sudo dpkg-reconfigure wireshark-common
Kurulumdan sonra kullanıcını wireshark grubuna eklemelisin, aksi takdirde her seferinde sudo kullanmak zorunda kalırsın:
sudo usermod -aG wireshark $USER
Bu değişikliğin geçerli olması için oturumu kapatıp açman ya da şu komutu çalıştırman gerekiyor:
newgrp wireshark
RHEL/CentOS/Rocky Linux’ta Kurulum
sudo dnf install wireshark wireshark-cli -y
RHEL tabanlı sistemlerde de kullanıcı grubu ayarını yapman gerekiyor:
sudo usermod -aG wireshark $USER
sudo chmod +x /usr/bin/dumpcap
Arch Linux’ta Kurulum
sudo pacman -S wireshark-qt wireshark-cli
sudo gpasswd -a $USER wireshark
Kurulumu Doğrulama
wireshark --version
tshark --version
Çıktıda versiyon bilgisini gördüysen kurulum başarılıdır.
Ağ Arayüzlerini Listeleme
Paket yakalamaya başlamadan önce hangi ağ arayüzlerinin mevcut olduğunu bilmen gerekiyor:
tshark -D
Tipik bir çıktı şöyle görünür:
1. eth0
2. wlan0
3. lo (Loopback)
4. docker0
5. any
Burada any seçeneği özellikle dikkat çekici. Tüm arayüzlerdeki trafiği aynı anda yakalamak istediğinde bu seçeneği kullanabilirsin. Özellikle hangi arayüzde trafiğin geçtiğinden emin olmadığın durumlarda çok işe yarıyor.
TShark ile Terminal Üzerinden Paket Yakalama
GUI’ye erişimin olmadığı senaryolarda TShark senin en iyi arkadaşın. SSH ile bağlı olduğun bir sunucuda ağ sorunlarını debug ederken grafik arayüzü açamazsın, ama TShark ile her şeyi terminalden halledebilirsin.
Temel Paket Yakalama
# eth0 arayüzündeki tüm trafiği yakala
tshark -i eth0
# Belirli sayıda paket yakala ve dur
tshark -i eth0 -c 100
# Yakalanan paketleri dosyaya kaydet
tshark -i eth0 -w /tmp/capture.pcap
# Dosyayı okuma modu
tshark -r /tmp/capture.pcap
-i: Dinlenecek arayüzü belirtir -c: Yakalanacak paket sayısını sınırlar -w: Çıktıyı pcap formatında dosyaya yazar -r: Var olan bir pcap dosyasını okur
Süre Bazlı Yakalama
Uzun süreli yakalamalar için zaman sınırı koymak isteyebilirsin:
# 60 saniye boyunca trafik yakala
tshark -i eth0 -a duration:60 -w /tmp/capture_60sec.pcap
# 100MB'a ulaşınca dur
tshark -i eth0 -a filesize:102400 -w /tmp/capture_100mb.pcap
Capture Filter Kullanımı
Tüm trafiği yakalamak yerine sadece ihtiyacın olan trafiği yakalamak çok daha verimli. Capture filter’lar BPF (Berkeley Packet Filter) söz dizimini kullanır.
# Sadece HTTP trafiğini yakala
tshark -i eth0 -f "tcp port 80"
# Belirli bir IP'den gelen/giden trafiği yakala
tshark -i eth0 -f "host 192.168.1.100"
# Sadece gelen trafiği yakala
tshark -i eth0 -f "dst host 192.168.1.100"
# DNS trafiğini yakala
tshark -i eth0 -f "udp port 53"
# HTTP ve HTTPS trafiğini birlikte yakala
tshark -i eth0 -f "tcp port 80 or tcp port 443"
# Belirli bir ağdan gelen trafiği yakala
tshark -i eth0 -f "net 192.168.1.0/24"
# ICMP (ping) trafiğini yakala
tshark -i eth0 -f "icmp"
Capture filter’ları yazarken bazı temel operatörler şunlar:
host: Belirli bir IP veya hostname filtreler net: Bir IP bloğunu filtreler port: Belirli portu filtreler src: Kaynak adresini filtreler dst: Hedef adresini filtreler and / or / not: Mantıksal operatörler
Display Filter Kullanımı
Display filter’lar yakalama sonrasında veya canlı yakalama sırasında sonuçları filtrelemek için kullanılır. Wireshark’ın kendi söz dizimini kullanır ve capture filter’lara göre çok daha güçlüdür.
# HTTP trafiğini göster
tshark -i eth0 -Y "http"
# Belirli IP adresine giden trafiği filtrele
tshark -i eth0 -Y "ip.dst == 192.168.1.100"
# HTTP GET isteklerini göster
tshark -i eth0 -Y "http.request.method == GET"
# DNS sorgularını listele
tshark -i eth0 -Y "dns.flags.response == 0"
# TCP RST paketlerini yakala (bağlantı sorunlarını bulmak için harika)
tshark -i eth0 -Y "tcp.flags.reset == 1"
# Büyük paketleri filtrele (fragmentation sorunları için)
tshark -i eth0 -Y "frame.len > 1400"
Display filter söz dizimi oldukça zengin. Protokol adı, alan adı ve değer şeklinde yazılır. Wireshark GUI’de bu filtreleri yazarken otomatik tamamlama özelliği çok işe yarıyor.
Gerçek Dünya Senaryosu 1: HTTP Trafiğini İnceleme
Diyelim ki bir web uygulaması beklenenden yavaş çalışıyor. TShark ile HTTP isteklerini ve yanıt sürelerini inceleyebilirsin:
# HTTP istekleri ve yanıt kodlarını detaylı göster
tshark -i eth0 -Y "http" -T fields
-e frame.time
-e ip.src
-e ip.dst
-e http.request.method
-e http.request.uri
-e http.response.code
-E header=y
-E separator=,
Bu komut sana CSV formatında çıktı verir ve her HTTP isteğinin detaylarını görmeni sağlar. Hangi URL’lerin çok zaman aldığını, hangi yanıt kodlarının döndüğünü hemen görebilirsin.
Gerçek Dünya Senaryosu 2: DNS Sorunlarını Tespit Etme
Bir serviste bağlantı sorunları yaşanıyor ve DNS’in sorun olduğundan şüpheleniyorsun:
# DNS sorgularını ve yanıtlarını izle
tshark -i eth0 -Y "dns" -T fields
-e frame.time
-e ip.src
-e dns.qry.name
-e dns.resp.name
-e dns.flags.response
-e dns.resp.addr
-E separator="|"
Bu çıktıdan hangi domainlerin sorgulandığını, yanıt alınıp alınmadığını ve dönen IP adreslerini görebilirsin. Eğer bir domain için yanıt gelmiyorsa veya yanlış IP dönüyorsa sorunu hemen tespit edebilirsin.
Ayrıca DNS gecikme sorunları için şu yaklaşımı kullanabilirsin:
# Tüm DNS trafiğini kaydet ve analiz et
tshark -i eth0 -f "udp port 53" -w /tmp/dns_capture.pcap
# Sonra analiz et
tshark -r /tmp/dns_capture.pcap -Y "dns" -q -z "dns,tree"
Gerçek Dünya Senaryosu 3: Şüpheli Trafik Tespiti
Sunucuda olağandışı bir ağ aktivitesi fark ettin. Hangi IP’lere bağlantı kurulduğunu görmek istiyorsun:
# Dışarı çıkan bağlantıları listele
tshark -i eth0 -f "tcp" -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
-T fields
-e ip.src
-e ip.dst
-e tcp.dstport
| sort | uniq -c | sort -rn | head -20
Bu komut SYN paketlerini listeler, yani yeni bağlantı girişimlerini gösterir. Bir IP adresi çok fazla farklı porta bağlanmaya çalışıyorsa port tarama aktivitesi söz konusu olabilir.
# Büyük veri transferlerini tespit et (veri sızıntısı analizi)
tshark -i eth0 -z "conv,tcp" -q | sort -k 9 -rn | head -20
Wireshark GUI ile Çalışma
Terminal üzerinden TShark kullanmak oldukça güçlü olsa da bazen görsel analiz çok daha verimli oluyor. Wireshark GUI’yi başlatmak için:
wireshark &
GUI üzerinde çalışırken bazı önemli özellikler:
Follow TCP Stream: Bir TCP bağlantısının tüm içeriğini görüntülemek için pakete sağ tıkla ve “Follow > TCP Stream” seç. Bu özellikle HTTP oturumlarını debug ederken çok işe yarıyor.
Statistics Menüsü: Buradan “Conversations”, “Endpoints”, “Protocol Hierarchy” gibi özet raporlara ulaşabilirsin. Hangi protokolün ne kadar trafik oluşturduğunu hızlıca görmek için ideal.
IO Graphs: Trafik yoğunluğunu zaman bazlı grafikle gösterir. Belirli anlarda aşırı trafik artışı varsa bunu hemen fark edersin.
Expert Information: Wireshark otomatik olarak anormal durumları tespit eder ve “Analyze > Expert Information” menüsünden listeler. TCP retransmission, checksum hataları gibi sorunlar burada gösterilir.
Uzak Sunucudan Paket Yakalama ve Yerel Analiz
Bu senaryo çok pratik ve gerçek hayatta sık kullanılan bir teknik. Uzak sunucuda trafik yakala, yerel makinende Wireshark ile analiz et:
# SSH tüneli üzerinden canlı paket yakalama
ssh kullanici@uzak-sunucu "sudo tshark -i eth0 -w - -f 'not port 22'" | wireshark -k -i -
Bu tek satırlık komut şunu yapıyor: Uzak sunucuda tshark çalıştırıyor, yakalanan paketleri stdout’a yazıyor, SSH tüneli üzerinden geliyor ve yerel Wireshark’a besleniyor. -f ‘not port 22’ kısmı SSH trafiğini dışarıda bırakıyor, yoksa sonsuz döngüye girersin.
Alternatif olarak uzak sunucuda yakalayıp sonra indirip analiz edebilirsin:
# Uzak sunucuda yakalama yap
ssh kullanici@uzak-sunucu "sudo tshark -i eth0 -c 10000 -w /tmp/capture.pcap"
# Dosyayı indir
scp kullanici@uzak-sunucu:/tmp/capture.pcap ~/Desktop/
# Yerel Wireshark ile aç
wireshark ~/Desktop/capture.pcap
pcap Dosyalarını Analiz Etmek için Kullanışlı TShark Komutları
Elinde bir pcap dosyası var ve hızlıca analiz etmen gerekiyor:
# Genel istatistikleri göster
tshark -r capture.pcap -q -z io,phs
# En çok konuşan IP'leri listele
tshark -r capture.pcap -q -z conv,ip | sort -k 5 -rn | head -10
# Protokol dağılımını göster
tshark -r capture.pcap -q -z proto,colinfo,frame.number,frame.number
# HTTP User-Agent'ları listele
tshark -r capture.pcap -Y "http.user_agent" -T fields -e http.user_agent | sort | uniq -c | sort -rn
# Tüm konuşmaları listele
tshark -r capture.pcap -q -z conv,tcp
Güvenlik Notları ve İzinler
Paket yakalama hassas bir işlem. Şifreler, oturum tokenları ve kişisel veriler ağ trafiğinde düz metin olarak geçiyor olabilir. Bu nedenle bazı önemli noktaları unutmamalısın:
Yasal ve etik kullanım: Yalnızca yönetiminden sorumlu olduğun veya açık izin aldığın ağlarda paket yakalama yapmalısın. Başkalarının trafiğini izlemek çoğu ülkede yasadışı.
Şifreli trafik: TLS/SSL ile şifreli trafiği Wireshark’ta decrypt edebilirsin, ama bunun için ya private key’e erişimin olmalı ya da TLS session key’lerini loglamalısın.
pcap dosyalarını güvende tut: İçinde şifreler, tokenlar olabilecek pcap dosyalarını dikkatli sakla ve işin bitince sil:
# Hassas pcap dosyasını güvenli sil
shred -u /tmp/capture.pcap
Root yerine wireshark grubu kullan: Wireshark’ı root olarak çalıştırmak yerine wireshark grubunu kullan. Bu minimal yetki prensibine uygun.
Sık Kullanılan Display Filter Referansı
Bazı filtreleri sürekli kullanacaksın, bunları aklında tutmak pratik kazandırır:
tcp.analysis.retransmission: TCP yeniden iletim paketlerini gösterir, bağlantı kalitesi sorunlarını tespit etmek için kullanılır tcp.analysis.zero_window: Alıcının buffer’ının dolduğunu gösterir, performans sorunları için kritik http.response.code >= 400: HTTP hata kodlarını filtreler !(arp or icmp or dns): Gürültülü protokolleri dışarıda bırakır, gerçek trafiğe odaklanmayı sağlar ip.ttl < 5: Düşük TTL değerli paketleri gösterir, routing sorunlarını bulabilir tcp.port == 443 and ssl: HTTPS trafiğini gösterir
Sonuç
Wireshark ve TShark, bir sysadmin’in araç kutusunda olması gereken en temel araçlardan. İlk başta öğrenme eğrisi biraz dik görünebilir, ama bir kez alışınca ağ sorunlarını çözmek çok daha keyifli hale geliyor. Filtreleri doğru kullanmayı öğrendiğinde, saatlerce sürecek bir debug işlemini dakikalar içinde çözebilirsin.
Pratik yapmanın en iyi yolu gerçek trafiği incelemek. Ev ağında veya test ortamında kendi trafiğini yakalamaya başla. curl ile bir HTTP isteği yap ve yakaladığın paketin içinde tam olarak neler döndüğünü incele. DNS sorgularını takip et, TCP handshake’i gözlemle. Zamanla bu paketlerin “dili” sana çok doğal gelmeye başlayacak ve bir sorunla karşılaştığında hangi filtreyle neye bakman gerektiğini içgüdüsel olarak bileceksin.
TShark’ı cron job’larla veya monitoring scriptleriyle kombinleyerek otomatik ağ analizi yapabilirsin, anormal trafik tespit edince e-posta gönderebilirsin. Bir dahaki yazıda bu tür otomasyon senaryolarını ele almayı planlıyorum. O zamana kadar, paket yakalamak için hazır ol.