Ağ trafiğini izlemek ve analiz etmek, bir sistem yöneticisinin günlük rutininin kaçınılmaz bir parçası. Bazen bir uygulama beklenmedik şekilde davranıyor, bazen bir sunucu garip bağlantılar kuruyor, bazen de bir güvenlik olayının izini sürmek gerekiyor. İşte tam bu noktalarda tcpflow gibi araçlar hayat kurtarıcı oluyor. tcpdump kadar düşük seviyeli değil, Wireshark kadar da karmaşık değil. TCP akışlarını doğrudan dosyalara yazan, sade ve etkili bir araç. Bu yazıda tcpflow’u derinlemesine ele alacağız, gerçek dünya senaryolarıyla nasıl kullanacağınızı göstereceğiz.
tcpflow Nedir ve Neden Kullanmalısınız?
tcpflow, TCP bağlantılarını yakalayan ve her bağlantının verisini ayrı dosyalara yazan bir ağ analiz aracıdır. Temel farkı şu: tcpdump paketleri yakalar, tcpflow ise o paketleri TCP akışı olarak yeniden birleştirir ve anlamlı veriye dönüştürür. Yani iki uç nokta arasındaki konuşmayı, gönderilen HTTP isteğini veya FTP transferini sanki doğrudan okuyormuş gibi görebilirsiniz.
tcpflow’un tercih edilmesinin birkaç pratik nedeni var:
- Akış bazlı kayıt: Her TCP bağlantısı ayrı bir dosyaya yazılır, analiz çok daha kolaydır
- Gerçek zamanlı analiz: Canlı trafiği izleyebilir veya önceden kaydedilmiş pcap dosyalarını işleyebilirsiniz
- Düşük öğrenme eğrisi: Wireshark’ın grafik arayüzüne gerek duymadan komut satırından hızla sonuç alırsınız
- Otomasyon dostu: Script içine gömebilir, çıktıyı başka araçlarla pipe edebilirsiniz
Kurulum son derece basit. Debian/Ubuntu tabanlı sistemlerde:
sudo apt-get install tcpflow
RHEL/CentOS/Rocky Linux için:
sudo dnf install tcpflow
# veya eski sistemlerde
sudo yum install tcpflow
macOS üzerinde Homebrew ile:
brew install tcpflow
Temel Kullanım ve Parametreler
tcpflow’un sözdizimi tcpdump’a oldukça benziyor, bu yüzden tcpdump bilen biri için öğrenme süreci çok kısa oluyor.
En basit kullanım, belirli bir ağ arayüzünü dinlemek:
sudo tcpflow -i eth0
Bu komut eth0 arayüzündeki tüm TCP trafiğini yakalar ve bulunduğunuz dizine dosya olarak kaydeder. Dosya isimleri bağlantı bilgisini içerir, örneğin 192.168.1.100.54321-93.184.216.34.00080 gibi bir format görürsünüz. Bu formatta kaynak IP, kaynak port, hedef IP ve hedef port bilgisi bulunur.
Sık kullanılan parametreler şu şekilde:
- -i interface: Dinlenecek ağ arayüzünü belirtir
- -r dosya.pcap: Pcap dosyasından okur, canlı yakalama yerine
- -o dizin: Çıktı dosyalarının yazılacağı dizini belirtir
- -c: Konsola yazar, dosyaya değil
- -a: ASCII olmayan karakterleri nokta ile değiştirir, okunabilirliği artırır
- -b byte_sayisi: Her akış için maksimum byte limitini belirler
- -F format: Dosya isimlendirme formatını değiştirir
- -e regex: Belirli bir pattern’e uyan içerikleri işaretler
- -X rapor.xml: XML formatında rapor üretir
- -J: JSON formatında özet bilgi üretir
- -g: Grafik özet çıktısı (HTML rapor) oluşturur
- -v: Verbose mod, daha fazla bilgi gösterir
- -D: Her paketi ekrana basar (debug için)
Çıktıları belirli bir dizine kaydetmek için:
sudo tcpflow -i eth0 -o /tmp/capture/
HTTP Trafiğini Analiz Etmek
En yaygın kullanım senaryolarından biri HTTP trafiğini incelemek. Özellikle eski sistemlerde hala HTTP kullanan uygulamalar var ve bu trafiği analiz etmek bazen kritik oluyor.
Sadece 80 portuna giden/gelen trafiği yakalamak için tcpdump filtre sözdizimini kullanabilirsiniz:
sudo tcpflow -i eth0 -c -a port 80
Buradaki -c parametresi çıktıyı dosyaya yazmak yerine doğrudan ekrana basar, -a ise binary karakterleri okunabilir hale getirir. Bir web sunucusunun aldığı istekleri canlı olarak izlemek için mükemmel.
Belirli bir sunucuyla olan iletişimi filtrelemek için:
sudo tcpflow -i eth0 -a -o /tmp/http_capture host 192.168.1.50 and port 80
Bu komutla 192.168.1.50 IP adresine ait 80 portundaki tüm TCP akışları /tmp/http_capture dizinine ayrı dosyalar olarak kaydedilir. Sonrasında şöyle bir şey görebilirsiniz:
cat /tmp/http_capture/192.168.001.100.45231-192.168.001.050.00080
GET /api/users HTTP/1.1
Host: 192.168.1.50
Authorization: Bearer eyJhbGc...
User-Agent: MyApp/1.0
Accept: application/json
Bir uygulamanın tam olarak hangi endpoint’lere istek attığını, hangi başlıkları gönderdiğini, hatta eğer dikkatli geliştiriciler değilse token veya şifre gibi hassas bilgilerin HTTP üzerinden gittiğini bu şekilde tespit edebilirsiniz.
Pcap Dosyalarından Analiz
Bazen canlı yakalama yapmak mümkün olmuyor ya da bir olayın kaydedilmiş pcap dosyasını analiz etmeniz gerekiyor. tcpflow bu konuda da çok yetenekli.
tcpflow -r /tmp/captured_traffic.pcap -o /tmp/flows/
Bu komut pcap dosyasındaki tüm TCP akışlarını ayrıştırır ve her birini ayrı dosyaya yazar. Özellikle bir güvenlik olayı sonrası forensic analiz yaparken bu yaklaşım çok değerli. Wireshark’ta elle gezmek yerine tüm akışları dosyalara döküp grep ile arama yapabilirsiniz.
Pcap dosyasından sadece belirli portları işlemek için:
tcpflow -r captured.pcap -o /tmp/smtp_flows/ port 25 or port 587
Akışları aldıktan sonra içlerinde arama yapmak:
grep -r "password" /tmp/flows/
grep -r "Authorization" /tmp/flows/
grep -rl "SELECT" /tmp/flows/ # SQL sorgularını bul
Gerçek Dünya Senaryosu: Şüpheli Sunucu Trafiği
Diyelim ki bir üretim sunucusunun normal olmayan dış bağlantılar kurduğunu fark ettiniz. Netstat veya ss çıktısında tanımadığınız IP adreslerine bağlantılar görüyorsunuz. İşte böyle bir durumda tcpflow ile hızlıca ne döndüğünü anlayabilirsiniz.
Önce şüpheli IP ile olan trafiği izole edin:
sudo tcpflow -i eth0 -a -o /tmp/suspicious/ host 185.220.101.47
Paralelde başka bir terminalde akışları canlı izlemek için:
watch -n 2 'ls -la /tmp/suspicious/ | tail -20'
Yakalama tamamlandıktan sonra dosyaları inceleyin:
# Hangi dosyalar oluştu?
ls -lh /tmp/suspicious/
# İçeriklere hızlıca bak
for f in /tmp/suspicious/*; do
echo "=== $f ==="
head -20 "$f"
echo ""
done
Bu senaryoda bir C2 (Command and Control) iletişimi yakaladıysanız, gönderilen komutları ve alınan yanıtları açıkça görebilirsiniz. Şifreli trafik kullanılıyorsa doğrudan içeriği göremezsiniz ama hangi portlar, hangi protokoller kullanıldığını, ne sıklıkla bağlantı kurulduğunu anlayabilirsiniz.
Gerçek Dünya Senaryosu: Uygulama Debug
Bir uygulama geliştirme veya entegrasyon sürecinde, uygulamanın bir API ile nasıl konuştuğunu anlamak gerekebilir. Dokümantasyon yanlış olabilir, eski bir uygulama olabilir, kaynak kod elinizde olmayabilir.
sudo tcpflow -i lo -a -c port 8080
Loopback arayüzünü dinleyerek yerel servise giden trafiği yakalıyoruz. -c ile doğrudan ekrana basıyoruz:
sudo tcpflow -i any -a -o /tmp/app_debug/ port 8080 or port 3306
Hem uygulama portu (8080) hem de veritabanı portu (3306) filtrelendiğinde, uygulamanın hem API çağrılarını hem de veritabanı sorgularını aynı anda izleyebilirsiniz. Bir performans sorununun kökenini bulmak için bu teknik oldukça etkili.
MySQL trafiğini yakaladığınızda, açık metin SQL sorgularını doğrudan görebilirsiniz:
sudo tcpflow -i eth0 -a -c port 3306 | grep -E "SELECT|INSERT|UPDATE|DELETE"
XML ve HTML Rapor Üretmek
tcpflow sadece veri yakalamakla kalmaz, aynı zamanda zengin raporlar da üretebilir. Özellikle bir olayı belgelemek veya yöneticiye sunmak için bu özellik çok işe yarar.
HTML raporu için:
sudo tcpflow -i eth0 -o /tmp/report/ -g -a port 80
-g parametresi bir report.xml ve report.pdf oluşturur, aynı zamanda her akış için görsel bir özet sunar. Raporun tam yolu /tmp/report/report.xml olacaktır.
Daha detaylı XML raporu için:
sudo tcpflow -i eth0 -o /tmp/xmlreport/ -X /tmp/xmlreport/flows.xml port 443
Bu XML dosyasını daha sonra bir script ile işleyebilir, önemli bilgileri çıkarabilirsiniz:
# XML rapordan benzersiz IP adreslerini çıkar
grep -oP 'srcip="K[^"]+' /tmp/xmlreport/flows.xml | sort -u
# Toplam akış sayısını bul
grep -c "<flow " /tmp/xmlreport/flows.xml
Gelişmiş Filtreleme Teknikleri
tcpflow, tcpdump’ın BPF (Berkeley Packet Filter) sözdizimini desteklediği için güçlü filtreleme yapabilirsiniz.
Belirli bir subnet’ten gelen trafiği yakalamak:
sudo tcpflow -i eth0 -a -o /tmp/subnet_traffic/ src net 10.0.0.0/24
Birden fazla port için OR koşulu:
sudo tcpflow -i eth0 -a -o /tmp/web_traffic/ port 80 or port 443 or port 8080 or port 8443
Belirli bir host’tan belirli bir port’a giden trafiği izole etmek:
sudo tcpflow -i eth0 -a -o /tmp/specific/ src host 192.168.1.100 and dst port 5432
Büyük miktarda trafik varsa ve her akışı sınırlamak istiyorsanız:
sudo tcpflow -i eth0 -b 1048576 -o /tmp/limited/ port 80
-b 1048576 her akış için maksimum 1 MB kayıt yapmasını söyler. Bu sayede disk dolmaz ve büyük dosya transferlerinde yönetilebilir boyutlar elde edersiniz.
tcpflow ile Otomatik İzleme Script’i
Gerçek bir üretim ortamında tek seferlik komutlar yeterli olmayabilir. Sürekli izleme ve otomatik raporlama için küçük bir script yazalım:
#!/bin/bash
# tcp_monitor.sh - Şüpheli bağlantıları izle ve kaydet
CAPTURE_DIR="/var/log/tcpflow/$(date +%Y%m%d_%H%M%S)"
INTERFACE="eth0"
DURATION=300 # 5 dakika
LOG_FILE="/var/log/tcp_monitor.log"
mkdir -p "$CAPTURE_DIR"
echo "$(date): Yakalama başladı - $CAPTURE_DIR" >> "$LOG_FILE"
# 5 dakika boyunca tüm HTTP trafiğini yakala
timeout $DURATION sudo tcpflow
-i $INTERFACE
-a
-o "$CAPTURE_DIR"
-X "$CAPTURE_DIR/report.xml"
port 80 or port 8080
echo "$(date): Yakalama tamamlandı" >> "$LOG_FILE"
# Yakalanan akış sayısını raporla
FLOW_COUNT=$(ls "$CAPTURE_DIR" | grep -v report | wc -l)
echo "$(date): Toplam $FLOW_COUNT akış yakalandı" >> "$LOG_FILE"
# Şüpheli içerik arama
echo "$(date): Şüpheli içerik taranıyor..." >> "$LOG_FILE"
grep -rl "passwd|password|secret|token|api_key" "$CAPTURE_DIR" >> "$LOG_FILE" 2>&1
echo "$(date): Analiz tamamlandı" >> "$LOG_FILE"
Bu script’i cron ile düzenli çalıştırabilir veya bir güvenlik olayı sırasında tetikleyebilirsiniz.
tcpflow ve tcpdump Entegrasyonu
Bazen tcpflow’u tcpdump ile birlikte kullanmak en verimli yaklaşım oluyor. tcpdump trafiği yakalar, tcpflow ise onu akıştaki haliyle analiz eder:
# Tcpdump ile canlı yakalayıp tcpflow'a pipe et
sudo tcpdump -i eth0 -w - port 80 2>/dev/null | tcpflow -r - -a -o /tmp/live_flows/
Ya da önce pcap olarak kaydet, sonra analiz et:
# Önce 60 saniye kayıt al
sudo tcpdump -i eth0 -w /tmp/traffic.pcap -G 60 -W 1
# Sonra tcpflow ile analiz et
tcpflow -r /tmp/traffic.pcap -a -o /tmp/analyzed/
# İçeriklerde arama yap
grep -r "User-Agent" /tmp/analyzed/
grep -r "X-Forwarded-For" /tmp/analyzed/
Güvenlik Uyarıları ve Etik Kullanım
tcpflow son derece güçlü bir araç ve bu gücü sorumlulukla kullanmak gerekiyor. Birkaç kritik noktayı hatırlatmak isterim:
- Yasal izin: Sadece yönetici olduğunuz sistemlerde veya açık izin aldığınız ağlarda kullanın. Başkasına ait ağ trafiğini yakalamak birçok ülkede yasadışıdır
- GDPR ve kişisel veri: Avrupa’da faaliyet gösteriyorsanız, kullanıcı trafiğini kaydetmek GDPR kapsamında olabilir. Hukuk departmanınızla konuşun
- Şifreli trafik: HTTPS trafiğini doğrudan okuyamazsınız, bu aslında iyi bir şey. Ancak SSL inspection yapıyorsanız bu durum değişir
- Disk yönetimi: Özellikle yoğun trafik ortamlarında disk dolma riski var.
-bparametresiyle sınırlama yapın ve eski kayıtları düzenli temizleyin - Performans etkisi: Yüksek trafikli sistemlerde tcpflow CPU ve bellek tüketebilir. Üretim sistemlerinde dikkatli olun
Disk Temizliği ve Rotation
Uzun süreli izleme yapıyorsanız disk yönetimi kritik:
# 24 saatten eski tcpflow çıktılarını temizle
find /var/log/tcpflow/ -type f -mtime +1 -delete
# Dizin boyutunu kontrol et
du -sh /var/log/tcpflow/
# Belirli boyutu aşan flow dosyalarını bul
find /tmp/flows/ -size +10M -ls
Sonuç
tcpflow, sysadmin araç kutusunda mutlaka bulunması gereken araçlardan biri. Wireshark’ın karmaşıklığına gerek duymadan, tcpdump’ın ham paket çıktısıyla boğuşmak zorunda kalmadan, TCP akışlarını insan tarafından okunabilir formatta elde etmenizi sağlıyor.
Güvenlik olaylarında forensic analiz, uygulama davranışını anlama, ağ sorunlarını debug etme ve API entegrasyonlarını doğrulama gibi çok farklı senaryolarda günlük işlerinizi kolaylaştıracak. Özellikle -r parametresiyle pcap dosyaları üzerinde çalışabilmesi, canlı sistemi etkilemeden post-mortem analiz yapmanıza olanak tanıyor.
Bir noktanın altını çizmek isterim: tcpflow güçlü ama sihirli değil. Şifreli trafik göremezsiniz, UDP yakalayamazsınız ve çok yüksek trafikli ortamlarda paket kayıpları yaşayabilirsiniz. Bu sınırlamaları bilerek, doğru senaryolarda kullanıldığında inanılmaz verimli bir araç. Denemeden anlayamazsınız, bir test ortamında kurup birkaç senaryo geçirmenizi kesinlikle tavsiye ederim.