Wireshark ile Ağ Trafiği Analizi: Kapsamlı Rehber

Ağ trafiğini göremiyorsan, sorununu çözemezsin. Bu sysadmin’lerin altın kurallarından biri ve Wireshark tam da bu yüzden var. Yıllardır ağ dünyasının vazgeçilmezi olan bu araç, paket seviyesinde neler döndüğünü gözler önüne seriyor. Bir servis neden yavaş çalışıyor, bir bağlantı neden kopuyor, ağda şüpheli bir trafik var mı gibi soruların cevabı çoğunlukla Wireshark’ta saklı.

Bu yazıda Wireshark’ı sadece “aç, kaydet, kapat” düzeyinde değil, gerçek dünya senaryolarında nasıl kullanacağını anlatacağım. Kurulumdan filtre yazmaya, SSL şifre çözümünden komut satırı alternatiflerine kadar her şeyi ele alacağız.

Wireshark Nedir ve Neden Önemlidir

Wireshark, ağ arayüzlerinden geçen paketleri gerçek zamanlı olarak yakalayan ve analiz eden açık kaynaklı bir protokol analizörüdür. 1998’de “Ethereal” adıyla başlayan bu proje, bugün hem GUI hem de komut satırı araçlarıyla birlikte gelen kapsamlı bir ekosisteme dönüştü.

Bir sysadmin olarak Wireshark’a ihtiyaç duyacağın durumlar şunlardır:

  • Yavaş uygulama performansı: TCP yeniden iletim (retransmission) sorunları, yüksek RTT değerleri
  • Ağ güvenlik analizi: Şüpheli bağlantılar, port taramaları, ARP poisoning
  • Protokol hata ayıklama: HTTP/HTTPS, DNS, DHCP, SMTP sorunları
  • Bant genişliği tüketimi: Hangi host ne kadar trafik üretiyor
  • Güvenlik duvarı kural doğrulama: Paketin gerçekten gittiği yere gidip gitmediğini kontrol etme

Kurulum

Linux Üzerinde Kurulum

Ubuntu/Debian sistemlerde kurulum oldukça basit:

sudo apt update
sudo apt install wireshark tshark -y

# Kurulum sırasında "non-root kullanıcıların paket yakalamasına izin verilsin mi?" sorusuna Yes de
# Eğer atladıysan, sonradan yapılandır:
sudo dpkg-reconfigure wireshark-common

# Kullanıcını wireshark grubuna ekle
sudo usermod -aG wireshark $USER

# Oturumu yenile (ya da logout/login yap)
newgrp wireshark

RHEL/CentOS/Rocky Linux için:

sudo dnf install wireshark wireshark-cli -y

# Wireshark grubunu kontrol et
getent group wireshark

# Kullanıcı ekle
sudo usermod -aG wireshark $USER

Yakalama İzinleri Olmadan Çalıştırma (Root Olmadan)

Bazı ortamlarda gruba ekleme yapmak istemeyebilirsin. Bu durumda dumpcap binary’sine capability atayabilirsin:

# Mevcut capability'leri kontrol et
getcap /usr/bin/dumpcap

# Gerekirse ekle
sudo setcap cap_net_raw,cap_net_admin+eip /usr/bin/dumpcap

# Doğrula
getcap /usr/bin/dumpcap
# Çıktı: /usr/bin/dumpcap cap_net_admin,cap_net_raw=eip

Komut Satırı ile Paket Yakalama: TShark

Uzak bir sunucuya SSH ile bağlandığında GUI olmayacak. İşte burada TShark devreye giriyor. TShark, Wireshark’ın komut satırı versiyonu ve üretim ortamlarında çok daha pratik.

Temel TShark Kullanımı

# Mevcut ağ arayüzlerini listele
tshark -D

# eth0 üzerinde paket yakala (Ctrl+C ile durdur)
tshark -i eth0

# Belirli sayıda paket yakala ve dosyaya kaydet
tshark -i eth0 -c 1000 -w /tmp/capture.pcap

# Sadece belirli bir porttan gelen trafiği yakala
tshark -i eth0 -f "port 443" -w /tmp/https_traffic.pcap

# Belirli bir IP'ye giden/gelen trafiği yakala
tshark -i eth0 -f "host 192.168.1.100" -w /tmp/host_traffic.pcap

# Rotasyonlu yakalama: Her 100MB'da yeni dosya, toplam 5 dosya tut
tshark -i eth0 -b filesize:102400 -b files:5 -w /tmp/rotation_capture.pcap

TShark ile Anlık Analiz

# HTTP isteklerini anlık göster
tshark -i eth0 -Y "http.request" -T fields 
  -e frame.time 
  -e ip.src 
  -e http.host 
  -e http.request.uri 
  -e http.request.method

# DNS sorgularını izle
tshark -i eth0 -Y "dns.qry.type == 1" -T fields 
  -e frame.time 
  -e ip.src 
  -e dns.qry.name

# TCP SYN paketlerini göster (bağlantı girişimleri)
tshark -i eth0 -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" 
  -T fields -e ip.src -e ip.dst -e tcp.dstport

Display Filter Sanatı

Wireshark’ın asıl gücü filtreleme sisteminde yatıyor. İki tür filtre var: Capture Filter (yakalama sırasında) ve Display Filter (yakalama sonrası görüntüleme).

Temel Display Filter Örnekleri

Wireshark GUI’sinde filtre çubuğuna yazacakların:

# Sadece bir IP'nin trafiğini göster
ip.addr == 192.168.1.50

# Belirli iki host arasındaki trafiği göster
ip.addr == 192.168.1.50 and ip.addr == 10.0.0.1

# HTTP 4xx ve 5xx hatalarını filtrele
http.response.code >= 400

# DNS NXDOMAIN (bulunamayan alan adları)
dns.flags.rcode == 3

# Yeniden iletilen TCP paketleri (performans sorunlarını işaret eder)
tcp.analysis.retransmission

# Büyük paketleri filtrele (1400 byte üzeri)
frame.len > 1400

# Belirli bir User-Agent içeren HTTP istekleri
http.user_agent contains "curl"

# SYN flood tespiti için SYN paketlerini say
tcp.flags == 0x002

Gelişmiş Filtre Kombinasyonları

# Şüpheli port taraması: Birden fazla porta giden SYN paketleri
tcp.flags.syn == 1 and tcp.flags.ack == 0 and ip.src == 10.0.0.55

# Geniş ağ aralığını filtrele
ip.addr >= 192.168.1.0 and ip.addr <= 192.168.1.255

# CIDR notasyonu ile subnet filtrele
ip.addr == 192.168.1.0/24

# Yavaş HTTP yanıtlarını bul (time_relative kullanımı)
http.response and frame.time_delta > 2

# FTP cleartext şifre transferini yakala
ftp.request.command == "PASS"

# ARP trafiğini izole et (ARP poisoning araştırması)
arp and arp.opcode == 2

Gerçek Dünya Senaryo 1: Yavaş Web Uygulaması Analizi

Bir uygulamanın yavaş çalıştığı şikayeti geldi. İlk adım ağ katmanını ezmek:

# Önce trafiği yakala
tshark -i eth0 -f "host app-server.internal and port 443" 
  -w /tmp/slow_app.pcap -c 5000

# Yakalanan dosyayı analiz et
# TCP yeniden iletimleri var mı?
tshark -r /tmp/slow_app.pcap -Y "tcp.analysis.retransmission" 
  -T fields -e frame.time -e ip.src -e ip.dst -e tcp.analysis.retransmission

# Zero window durumu var mı? (alıcı buffer dolmuş)
tshark -r /tmp/slow_app.pcap -Y "tcp.analysis.zero_window"

# Round trip time analizi
tshark -r /tmp/slow_app.pcap -Y "tcp.analysis.ack_rtt > 0.1" 
  -T fields -e ip.src -e ip.dst -e tcp.analysis.ack_rtt

Bu senaryoda RTT değerinin normalden 10x fazla çıktığını gördüm. Sorun ağda değil, DNS çözümlemesindeydi. Uygulama her istek için DNS sorgusu yapıyordu ve DNS sunucusu yavaş yanıt veriyordu.

# DNS yanıt sürelerini kontrol et
tshark -r /tmp/slow_app.pcap -Y "dns" 
  -T fields -e frame.time -e dns.qry.name -e dns.time

Gerçek Dünya Senaryo 2: Şüpheli Ağ Aktivitesi Tespiti

Bir gecenin ortasında IDS uyarısı geldi, bir iç sunucudan dışarıya olağandışı trafik gidiyor.

# Şüpheli sunucunun trafiğini kaydet
tshark -i eth0 -f "src host 192.168.5.23" 
  -w /tmp/suspicious.pcap -a duration:300

# Hangi dış IP'lere bağlanıyor?
tshark -r /tmp/suspicious.pcap 
  -Y "ip.src == 192.168.5.23" 
  -T fields -e ip.dst -e tcp.dstport 
  | sort | uniq -c | sort -rn | head -20

# Non-standart portlara bağlantı var mı?
tshark -r /tmp/suspicious.pcap 
  -Y "ip.src == 192.168.5.23 and not (tcp.dstport == 80 or tcp.dstport == 443 or tcp.dstport == 53)" 
  -T fields -e ip.dst -e tcp.dstport -e frame.len

# DNS tünellemesi şüphesi: Anormal uzunlukta DNS sorguları
tshark -r /tmp/suspicious.pcap 
  -Y "dns and dns.qry.name" 
  -T fields -e dns.qry.name 
  | awk 'length > 50' | sort | uniq

Bu analizde sunucunun 4444 numaralı porta düzenli aralıklarla bağlandığını ve uzun DNS sorgularıyla veri sızdırmaya çalıştığını tespit ettim. Classic reverse shell + DNS exfiltration kombinasyonu.

PCAP Dosyalarını Analiz Etme

Üretim ortamında trafiği kaydedip analizi başka bir makinede yapmak daha güvenli:

# Uzak sunucuda yakala, lokal makineye aktar
ssh root@prod-server "tshark -i eth0 -f 'port 80' -c 10000 -w -" 
  | wireshark -k -i -

# Ya da dosyaya kaydet ve çek
ssh root@prod-server "tshark -i eth0 -c 5000 -w /tmp/cap.pcap"
scp root@prod-server:/tmp/cap.pcap ~/analysis/

# tcpdump ile yakala (bazı sistemlerde tshark olmayabilir)
ssh root@prod-server "tcpdump -i eth0 -w - 'port 80'" 
  > /tmp/remote_capture.pcap

# Yakalanan dosyanın istatistiklerini görüntüle
capinfos /tmp/remote_capture.pcap

# Konuşma özetini çıkar (hangi IP'ler en çok konuşmuş)
tshark -r /tmp/remote_capture.pcap -q -z conv,tcp | head -30

# Protokol dağılımını gör
tshark -r /tmp/remote_capture.pcap -q -z io,phs

SSL/TLS Trafiğini Çözme

Modern trafiğin büyük çoğunluğu şifreli. Ama Wireshark, doğru anahtara sahipsen TLS trafiğini de çözebiliyor.

Pre-Master Secret Log ile Çözme

# Firefox veya Chrome'dan SSL anahtarlarını logla
export SSLKEYLOGFILE=/tmp/ssl_keys.log

# Tarayıcıyı bu ortam değişkeniyle başlat
firefox &

# Aynı anda trafik yakala
tshark -i eth0 -w /tmp/ssl_capture.pcap

# Wireshark GUI'de:
# Edit > Preferences > Protocols > TLS
# "(Pre)-Master-Secret log filename" alanına /tmp/ssl_keys.log yaz
# TShark ile SSL çözme
tshark -r /tmp/ssl_capture.pcap 
  -o "tls.keylog_file:/tmp/ssl_keys.log" 
  -Y "http" 
  -T fields -e http.host -e http.request.uri

# Çözülmüş HTTPS trafiğini text olarak dışa aktar
tshark -r /tmp/ssl_capture.pcap 
  -o "tls.keylog_file:/tmp/ssl_keys.log" 
  -Y "http.request or http.response" 
  -V 2>/dev/null | grep -E "(GET|POST|HTTP|Host:)"

Önemli not: Bu yöntemi sadece kendi sistemlerin veya yönettiğin sistemlerde kullan. Başkalarının trafiğini çözmek hem yasal hem de etik sorunlar doğurur.

tcpdump ile Hızlı Saha Analizi

Wireshark olmayan ortamlarda tcpdump hayat kurtarır:

# Belirli bir porta gelen trafiği yakala ve ekranda göster
tcpdump -i eth0 -n -A port 80 | grep -E "(GET|POST|Host:)"

# Büyük paketleri yakala
tcpdump -i eth0 -n "greater 1400"

# İki host arasındaki trafiği yakala
tcpdump -i eth0 -w /tmp/two_hosts.pcap 
  "host 10.0.1.5 and host 10.0.1.10"

# ICMP (ping) trafiğini izle
tcpdump -i eth0 -n icmp

# ARP trafiğini izle
tcpdump -i eth0 -n arp

# Rotasyonlu yakalama (her saat yeni dosya)
tcpdump -i eth0 -w /tmp/capture_%Y%m%d_%H%M%S.pcap -G 3600 -Z nobody

İstatistiksel Analiz ve Raporlama

# En çok trafik üreten IP'leri bul
tshark -r /tmp/capture.pcap -q -z endpoints,ip 
  | sort -k2 -rn | head -15

# HTTP istek metodlarının dağılımı
tshark -r /tmp/capture.pcap 
  -Y "http.request" 
  -T fields -e http.request.method 
  | sort | uniq -c | sort -rn

# Bağlantı başına ortalama paket sayısı
tshark -r /tmp/capture.pcap -q -z conv,tcp 
  | awk 'NR>5 {print $1, $3, $10}' | head -20

# Hata kodlarına göre HTTP yanıtlarını say
tshark -r /tmp/capture.pcap 
  -Y "http.response.code" 
  -T fields -e http.response.code 
  | sort | uniq -c | sort -rn

# Toplam bant genişliği kullanımı (saniye başına)
tshark -r /tmp/capture.pcap -q -z io,stat,1 | head -30

Wireshark Profilleri ve Özelleştirme

Farklı analiz görevleri için farklı profiller oluşturmak zaman kazandırır.

Profil oluşturma:

  • Edit > Configuration Profiles > New
  • “Security Analysis” veya “Performance Troubleshooting” gibi isimler ver

Her profile şunları ekleyebilirsin:

  • Özel renk kuralları: SYN flood için kırmızı, DNS hatası için sarı
  • Filtre bookmarks: Sık kullandığın filtreleri kaydet
  • Column layout: Güvenlik için farklı, performans analizi için farklı sütunlar

Renk Kuralı Önerileri

  • Kırmızı: tcp.analysis.retransmission – yeniden iletim paketleri
  • Turuncu: dns.flags.rcode != 0 – DNS hataları
  • Sarı: http.response.code >= 400 – HTTP hataları
  • Açık mavi: tcp.flags.syn == 1 and tcp.flags.ack == 0 – yeni TCP bağlantıları

Güvenlik Kontrol Listesi

Bir sistemde güvenlik analizi yaparken şu adımları izle:

  • ARP tablosunu kontrol et: Aynı IP’ye birden fazla MAC mı var? ARP poisoning işareti.
  • DNS trafiğini incele: Uzun, encode edilmiş domain adları DNS tünellemesi göstergesi.
  • Olağandışı port aktivitesi: Standart portlar dışında düzenli bağlantılar var mı?
  • Büyük veri transferleri: Çalışma saatleri dışında büyük upload var mı?
  • Protocol anomalileri: HTTP trafiği 443’ten mi geliyor ama SSL handshake yok mu?
# Hızlı güvenlik tarama scripti
#!/bin/bash
PCAP=$1

echo "=== ARP Anomalileri ==="
tshark -r $PCAP -Y "arp.duplicate-address-detected" 
  -T fields -e arp.src.hw_mac -e arp.src.proto_ipv4 2>/dev/null

echo "=== Olağandışı Portlar ==="
tshark -r $PCAP 
  -Y "not (tcp.dstport == 80 or tcp.dstport == 443 or tcp.dstport == 22 or tcp.dstport == 53)" 
  -T fields -e ip.src -e ip.dst -e tcp.dstport 
  | sort | uniq -c | sort -rn | head -20

echo "=== DNS Uzun Sorgular ==="
tshark -r $PCAP -Y "dns" -T fields -e dns.qry.name 
  | awk 'length > 40' | sort | uniq -c | sort -rn | head -10

echo "=== SYN Tarama Belirtileri ==="
tshark -r $PCAP 
  -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" 
  -T fields -e ip.src 
  | sort | uniq -c | sort -rn | head -10

Sonuç

Wireshark ve TShark, bir sysadmin’in arsenal’indeki en güçlü araçlardan ikisi. Ama güç, doğru kullanımla gelir. Temel komutları ezberlemek yetmez, hangi senaryoda hangi filtreyi kullanacağını bilmek asıl marifet.

Pratik önerilerim şunlar: Önce üretim trafiğinden düzenli PCAP örnekleri al ve “normal” nasıl görünür, öğren. Normal’i bilmeden anormal’i tespit edemezsin. TShark’ı günlük araç setine ekle, özellikle SSH üzerinden uzak sistem yönetiminde çok işine yarayacak. Güvenlik olaylarında ağ kanıtını hızla toplamak için hazır scriptler bulundur.

Son olarak yasal boyuta dikkat: Wireshark’ı sadece yönettiğin ve yetkili olduğun sistemlerde kullan. Başkalarının trafiğini dinlemek çoğu ülkede suçtur. Kendi altyapında, belgeli bir şekilde, gerektiğinde kullan. Bu araçların gücünü sorumlulukla yönet.

Bir yanıt yazın

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