nfdump ve nfcapd ile NetFlow Trafik Verilerini Toplama ve Analiz Etme

Büyük ağlarda trafiği anlamak, sorun gidermek ve güvenlik olaylarını tespit etmek için paket yakalamak her zaman mümkün değildir. Paket başlıklarını sürekli depolamak hem disk açısından hem de işlem gücü açısından maliyetlidir. İşte NetFlow tam da bu noktada devreye girer: akış verisi toplayarak size paketin içeriği değil ama “kim kimle ne zaman ne kadar konuştu” sorusunun cevabını verir. Bu yazıda nfcapd ile NetFlow verisi toplamayı ve nfdump ile bu veriyi analiz etmeyi gerçek dünya senaryolarıyla ele alacağız.

NetFlow Nedir, Ne İşe Yarar

NetFlow, Cisco’nun geliştirdiği ve daha sonra endüstri standardı haline gelen bir ağ telemetri protokolüdür. Router veya switch üzerindeki her IP akışı (aynı kaynak IP, hedef IP, port ve protokolden oluşan paket dizisi) özetlenerek bir collector’a gönderilir. Bu sayede 10 Gbps trafiğe sahip bir ağda bile saniyeler içinde “hangi sunucu en fazla bant genişliği tüketiyor” sorusuna cevap bulabilirsiniz.

NFDUMP, bu verileri toplamak ve sorgulamak için kullanılan açık kaynaklı bir araç setidir. İki temel bileşenden oluşur:

  • nfcapd: NetFlow collector daemon. UDP üzerinden gelen akış verilerini alır ve ikili (binary) dosyalara yazar.
  • nfdump: Toplanan verileri sorgulayan, filtreleyen ve raporlayan araç.

v5, v9 ve IPFIX formatlarını destekler. Çoğu kurumsal Cisco, Juniper, Mikrotik ve hatta Linux tabanlı softflowd ile çalışır.

Kurulum

Debian/Ubuntu üzerinde:

apt update
apt install nfdump

RHEL/CentOS/Rocky Linux üzerinde:

dnf install epel-release
dnf install nfdump

Kurulum sonrası iki binary elimizde olur: /usr/bin/nfcapd ve /usr/bin/nfdump. Ayrıca nfanon, nfreplay gibi yardımcı araçlar da gelir.

nfcapd ile Veri Toplama

nfcapd’ı başlatmak için önce depolama dizinini oluşturmalısınız:

mkdir -p /data/netflow/collector
chown nobody:nobody /data/netflow/collector

Temel nfcapd başlatma komutu:

nfcapd -w -D -l /data/netflow/collector -p 2055 -P /var/run/nfcapd.pid

Buradaki parametrelerin anlamı:

  • -w: 5 dakikalık zaman dilimleriyle otomatik dosya döndürme (rotate) yapar
  • -D: Daemon modunda arka planda çalışır
  • -l: Veri dosyalarının yazılacağı dizin
  • -p: Dinlenecek UDP portu (varsayılan 9995, ama 2055 de yaygın)
  • -P: PID dosyasının konumu

Birden fazla kaynaktan veri toplamak istiyorsanız ve bunları ayırt etmek gerekiyorsa, her cihaz için ayrı dizin ve port kullanabilirsiniz:

# Core switch için
nfcapd -w -D -l /data/netflow/core-sw -p 2055

# DMZ firewall için
nfcapd -w -D -l /data/netflow/dmz-fw -p 2056

nfcapd, her 5 dakikada bir nfcapd.YYYYMMDDHHMMSS formatında dosya oluşturur. Örneğin nfcapd.202401151435 gibi. Bu dosyalar ikili formattadır, doğrudan okuyamazsınız.

systemd Service Dosyası

Production ortamda nfcapd’ı systemd servisi olarak yönetmek çok daha sağlıklıdır:

cat > /etc/systemd/system/nfcapd.service << 'EOF'
[Unit]
Description=NetFlow Collector Daemon
After=network.target

[Service]
Type=forking
PIDFile=/var/run/nfcapd.pid
ExecStart=/usr/bin/nfcapd -w -D -l /data/netflow/collector -p 2055 -P /var/run/nfcapd.pid -u nobody -g nobody
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now nfcapd

nfdump ile Temel Sorgular

nfdump’ın genel sözdizimi şöyledir: önce kaynak dosya veya dizin belirtilir, ardından zaman aralığı, filtre ifadesi ve çıktı formatı seçilir.

En basit sorgu, tüm akışları listelemek:

nfdump -r /data/netflow/collector/nfcapd.202401151435

Bu komut binlerce satır döndürebilir. Genellikle -c ile kayıt sayısını sınırlamak ve -s ile istatistiksel özet almak daha kullanışlıdır.

Belirli bir zaman aralığındaki tüm dosyaları sorgulamak için -R ile dizin belirtin:

nfdump -R /data/netflow/collector -t 2024/01/15.14:00:00-2024/01/15.15:00:00

En fazla bant genişliği tüketen IP’leri bulmak:

nfdump -R /data/netflow/collector -s ip/bytes -n 20 -o extended

Bu komut son 20 en yüksek bant genişliği kullanan IP adresini gösterir. -s ip/bytes parametresi IP’ye göre grupla ve byte’a göre sırala anlamına gelir. -n 20 sadece ilk 20 kaydı göster demektir.

Filtreleme

nfdump’ın filtreleme sözdizimi tcpdump’a çok benzer, ama akış seviyesinde çalışır.

Belirli bir IP’nin trafiğini görmek:

nfdump -R /data/netflow/collector -t 2024/01/15.14:00:00-2024/01/15.15:00:00 
  'host 192.168.10.50' -o extended

Belirli bir port üzerindeki trafiği filtrelemek:

nfdump -R /data/netflow/collector 'port 443' -s ip/bytes -n 10

Daha karmaşık filtreler oluşturabilirsiniz. Örneğin bir subnet’ten çıkan ve 443 portuna giden TCP trafiği:

nfdump -R /data/netflow/collector 
  'src net 10.0.0.0/8 and dst port 443 and proto tcp' 
  -s dstip/bytes -n 20

Büyük dosya transferlerini yakalamak için bytes eşiği koyabilirsiniz:

nfdump -R /data/netflow/collector 
  'bytes > 100000000' 
  -o "fmt:%ts %sa %da %sp %dp %pr %byt" | head -50

Bu örnekte 100 MB üzerindeki tek akışları listeliyoruz. Ani büyük veri transferlerini tespit etmek için son derece kullanışlı.

Gerçek Dünya Senaryoları

Senaryo 1: Ağda Ani Bant Genişliği Artışı Tespiti

Gece 02:00’de monitoring sisteminiz bant genişliği alarmı verdi. Sabah işe geldiğinizde soruşturmanız gerekiyor.

# O gece 01:30 - 03:00 arası en fazla trafik üreten kaynak IP'ler
nfdump -R /data/netflow/collector 
  -t 2024/01/15.01:30:00-2024/01/15.03:00:00 
  -s srcip/bytes -n 10 -o extended

# Şüpheli IP'yi daha detaylı incele
nfdump -R /data/netflow/collector 
  -t 2024/01/15.01:30:00-2024/01/15.03:00:00 
  'src ip 192.168.5.23' 
  -o "fmt:%ts %sa %da %sp %dp %pr %byt %fl" | sort -k8 -rn | head -20

Çıktıda 192.168.5.23 IP’sinin gece boyunca tek bir harici IP’ye yüzlerce gigabyte veri gönderdiğini görürseniz, bu bir veri sızıntısı veya compromised host işareti olabilir.

Senaryo 2: DDoS Saldırısı Analizi

Sunucunuz yavaşladı, NetFlow verisine bakıyorsunuz:

# Belirli bir hedefe gelen akış sayısı yüksekse DDoS olabilir
nfdump -R /data/netflow/collector 
  -t 2024/01/15.10:00:00-2024/01/15.10:30:00 
  'dst ip 203.0.113.10' 
  -s srcip/flows -n 30 -o extended

Binlerce farklı kaynak IP’den yüksek flow sayısı geliyorsa ve packets per flow düşükse (SYN flood gibi) bu klasik bir DDoS görünümüdür.

Senaryo 3: Yetkisiz Port Kullanımı

Güvenlik politikanıza göre sunucuların sadece 80 ve 443 portlarından dış dünyaya bağlanması gerekiyor. Buna uymayan sunucuları bulmak için:

nfdump -R /data/netflow/collector 
  -t 2024/01/15.00:00:00-2024/01/15.23:59:59 
  'src net 10.10.0.0/24 and not (dst port 80 or dst port 443 or dst port 53)' 
  -s srcip/flows -n 20

Bu sorgu DMZ sunucularından beklenmedik portlara giden trafiği ortaya çıkarır.

İstatistiksel Raporlama ve -s Parametresi

-s parametresi nfdump’ın en güçlü özelliklerinden biridir. Farklı boyutlarda istatistik üretebilirsiniz:

# En çok trafik üretenler: protokole göre
nfdump -R /data/netflow/collector -s proto/bytes

# Kaynak porta göre akış sayısı
nfdump -R /data/netflow/collector -s srcport/flows -n 15

# Hedef porta göre bytes (hangi servis en çok trafik tüketiyor)
nfdump -R /data/netflow/collector -s dstport/bytes -n 20 -o extended

# IP çifti bazında (hangi iki host en çok konuşuyor)
nfdump -R /data/netflow/collector -s srcip:dstip/bytes -n 15

Son komut özellikle interesting: organizasyonunuz içindeki hangi server-to-server trafiğinin beklenmedik yükseklikte olduğunu anlamak için biçilmiş kaftan.

Çıktı Formatları

nfdump varsayılan olarak makul bir çıktı verir ama özel format tanımlayabilirsiniz:

# CSV benzeri çıktı (başka araçlara pipe etmek için)
nfdump -R /data/netflow/collector 
  'host 192.168.1.100' 
  -o "fmt:%ts,%sa,%da,%sp,%dp,%pr,%byt,%pkt" 
  > /tmp/host_traffic.csv

# extended format: daha fazla sütun gösterir
nfdump -R /data/netflow/collector -o extended | head -30

# line format: her satırda tek akış, okunabilir
nfdump -R /data/netflow/collector 'host 10.0.0.1' -o line

CSV çıktısını Python veya AWK ile işleyerek özel raporlar oluşturabilirsiniz. Özellikle management’a sunacağınız haftalık raporlarda bu formatı çok kullanıyoruz.

Dosya Yönetimi ve Arşivleme

nfcapd her 5 dakikada bir dosya oluşturur. Günlük 288 dosya demektir. Disk yönetimi kritik hale gelir.

nfdump’ın nfexpire aracı ile otomatik temizlik yapabilirsiniz:

# Boyut limiti: maksimum 50GB tut
nfexpire -e /data/netflow/collector -s 50G

# Zaman limiti: 30 günden eski dosyaları sil
nfexpire -e /data/netflow/collector -t 30d

Bunu cron ile düzenli çalıştırmak mantıklıdır:

# /etc/cron.d/nfexpire
0 * * * * root /usr/bin/nfexpire -e /data/netflow/collector -s 50G -p

Uzun süreli arşivleme için aylık bazda sıkıştırma yapabilirsiniz:

# Geçen ayki dosyaları tek bir dosyada birleştir ve sıkıştır
nfpcapd_merge() {
  local month=$1  # YYYYMM formatı, örnek: 202312
  nfdump -R /data/netflow/collector -t ${month}01.00:00:00-${month}31.23:59:59 
    -w /data/netflow/archive/netflow_${month}.nfcapd
  gzip /data/netflow/archive/netflow_${month}.nfcapd
}

nfanon ile Veri Anonimleştirme

Log paylaşımı veya analiz ekiplerine veri aktarımında IP adreslerini anonimleştirmeniz gerekebilir:

# IP adreslerini anonimleştirerek yeni dosya oluştur
nfanon -K mysecretkey -r /data/netflow/collector/nfcapd.202401151435 
  -w /tmp/anon_netflow.nfcapd

# Anonimleştirilmiş veriyi sorgula
nfdump -r /tmp/anon_netflow.nfcapd -s srcip/bytes -n 20

Aynı key kullanıldığında anonimleştirme tutarlıdır. Yani aynı IP her seferinde aynı anonimleştirilmiş IP’ye dönüşür. Bu sayede analiz yapılabilirliği korurken gerçek adresleri gizlemiş olursunuz.

Otomasyon: Günlük Trafik Raporu Script’i

Ekibinize her sabah otomatik gönderilecek trafik raporu için basit bir script:

#!/bin/bash
# /usr/local/bin/netflow_daily_report.sh

NETFLOW_DIR="/data/netflow/collector"
REPORT_FILE="/tmp/netflow_report_$(date +%Y%m%d).txt"
YESTERDAY=$(date -d yesterday '+%Y/%m/%d')

{
  echo "=== NetFlow Gunluk Rapor: $(date -d yesterday '+%d %B %Y') ==="
  echo ""

  echo "--- En Fazla Bant Genisligi Kullanan 10 Kaynak IP ---"
  nfdump -R $NETFLOW_DIR 
    -t ${YESTERDAY}.00:00:00-${YESTERDAY}.23:59:59 
    -s srcip/bytes -n 10 -q
  echo ""

  echo "--- En Aktif Protokoller ---"
  nfdump -R $NETFLOW_DIR 
    -t ${YESTERDAY}.00:00:00-${YESTERDAY}.23:59:59 
    -s proto/bytes -q
  echo ""

  echo "--- Toplam Trafik Ozeti ---"
  nfdump -R $NETFLOW_DIR 
    -t ${YESTERDAY}.00:00:00-${YESTERDAY}.23:59:59 
    -s srcip/bytes -n 1 -q 2>&1 | grep "^Summary"

} > $REPORT_FILE

# Mail gonder (mailutils kurulu olmasi gerekir)
mail -s "NetFlow Gunluk Rapor $(date -d yesterday '+%d/%m/%Y')" 
  [email protected] < $REPORT_FILE

Bu script’i cron’a ekleyin:

0 7 * * * root /usr/local/bin/netflow_daily_report.sh

Softflowd ile Linux Sunucudan NetFlow Export

Eğer elimizde NetFlow destekleyen bir router yoksa veya belirli bir Linux sunucunun kendi trafiğini export etmesini istiyorsak softflowd kullanabiliriz:

apt install softflowd

# eth0 arayüzünden trafiği yakala, 192.168.1.100:2055'e gönder
softflowd -i eth0 -n 192.168.1.100:2055 -v 9 -D

# Sadece harici trafiği export et
softflowd -i eth0 -n 192.168.1.100:2055 -v 9 -D 
  -f "not net 10.0.0.0/8"

Bu yöntemle herhangi bir Linux sunucuyu NetFlow kaynağına dönüştürebilirsiniz. Özellikle NetFlow desteklemeyen switch arkasındaki kritik sunucuların trafiğini izlemek için çok işe yarıyor.

Performans İpuçları

Büyük veri setleriyle çalışırken nfdump oldukça hızlıdır ama birkaç noktaya dikkat etmek gerekir.

Çok büyük zaman aralıklarını sorgulamak yerine belirli dosyaları hedefleyin. -R ile dizin belirttiğinizde tüm dosyaları tarar; -t ile zaman aralığı koyarsanız sadece ilgili dosyalara bakar.

Birden fazla CPU çekirdeğinden yararlanmak için -m parametresini kullanabilirsiniz; nfdump paralel işlem yapabilir. Bununla birlikte gerçekten büyük veri setleri için NfSen gibi bir web arayüzü veya ELK stack ile entegrasyon daha uygun olacaktır.

Disk I/O darboğazlarından kaçınmak için nfcapd’ın yazdığı dosyaları ve nfdump’ın okuduğu dosyaları farklı fiziksel disklerde tutmayı değerlendirin.

Sonuç

nfcapd ve nfdump ikilisi, kurumsal ağlarda trafik görünürlüğü sağlamanın hem ekonomik hem de etkili bir yolunu sunar. Paket yakalama araçlarının tersine, akış verisi düşük maliyetle uzun süre saklanabilir ve geriye dönük sorgulama yapılabilir.

Günlük sysadmin hayatında bu araçları üç farklı senaryoda sıklıkla kullanıyorsunuz: beklenmedik bant genişliği tüketimini araştırmak, güvenlik olaylarında saldırı vektörlerini anlamak ve kapasite planlama raporları için veri toplamak. Her üç durumda da nfdump’ın esnek filtreleme ve istatistik yetenekleri işin büyük bölümünü hallediyor.

Başlangıç için önerim şu: önce bir test ortamında softflowd ile akış verisi üretin, nfcapd ile toplayın ve birkaç saat veri birikmesini bekleyin. Ardından bu yazıdaki sorguları kendi veriniz üzerinde çalıştırarak hangi bilgileri çıkarabildiğinizi görün. NetFlow analizine alıştıktan sonra IPFIX veya sFlow gibi daha zengin veri kaynaklarına geçmek çok daha kolay olacak.

Bir yanıt yazın

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