ntopng ve ntopctl ile Gerçek Zamanlı Ağ Trafiği Analizi ve Görselleştirme
Ağ trafiğini gerçek zamanlı izlemek, bir sistem yöneticisinin en kritik görevlerinden biridir. “Neden bant genişliği doldu?”, “Hangi uygulama bu kadar trafik üretiyor?”, “Gece 03:00’te kim dış IP’lere bağlanıyor?” gibi sorular hepimizin başına gelmiştir. ntopng, bu soruların cevaplarını hem görsel hem de CLI üzerinden verebilen, açık kaynaklı ve son derece güçlü bir ağ trafiği analiz aracıdır. ntopctl ise bu aracı yönetmek için kullanılan kontrol yardımcı programıdır. Bu yazıda ikisini birlikte ele alacağız.
ntopng Nedir ve Neden Kullanmalısınız?
ntopng, eski ve köklü ntop aracının modern ve web tabanlı mimariye sahip yeniden yazılmış halidir. Temel farkı şudur: ntop, statik raporlar üretirdi. ntopng ise gerçek zamanlı akış analizine odaklanır ve bunu yaparken oldukça düşük sistem kaynağı tüketir.
Bir süredir ağ izleme için Grafana + Prometheus + node_exporter kombinasyonu kullandım. Bu stack iyi çalışıyor, ancak ağ paket seviyesinde analiz söz konusu olduğunda yetersiz kalıyor. ntopng bu boşluğu dolduruyor. Flow bazlı analiz, protokol tespiti, host davranış profili oluşturma gibi konularda ntopng’nin rakibi az.
ntopng’nin öne çıkan özellikleri:
- Gerçek zamanlı trafik görselleştirme (web arayüzü üzerinden)
- NetFlow, sFlow ve IPFIX desteği
- L7 protokol tespiti (nDPI kütüphanesi sayesinde)
- Host ve flow bazlı ayrıntılı istatistikler
- Uyarı sistemi ve anomali tespiti
- REST API desteği
- Redis ile durum yönetimi
Kurulum
ntopng, kendi paket deposu üzerinden dağıtılıyor. Ubuntu/Debian ve RHEL/CentOS tabanlı sistemlerin her ikisini de ele alalım.
Ubuntu/Debian için:
# ntop GPG anahtarını ekle
wget -qO- https://packages.ntop.org/apt-stable/ntop.key | sudo apt-key add -
# Depoyu ekle (Ubuntu 22.04 için)
echo "deb https://packages.ntop.org/apt-stable/22.04/ x86_64/" |
sudo tee /etc/apt/sources.list.d/ntop-stable.list
sudo apt update
sudo apt install -y ntopng redis-server
RHEL/CentOS/Rocky Linux için:
# ntop deposunu ekle
wget https://packages.ntop.org/centos-stable/ntop.repo -O /etc/yum.repos.d/ntop.repo
# EPEL gerekli
sudo dnf install -y epel-release
sudo dnf install -y ntopng redis
Redis, ntopng için zorunlu bir bağımlılıktır. Yükleme tamamlandıktan sonra Redis’i başlatmayı unutmayın:
sudo systemctl enable redis --now
sudo systemctl enable ntopng --now
Kurulumun ardından web arayüzüne http://sunucu_ip:3000 adresinden ulaşabilirsiniz. Varsayılan kullanıcı adı admin, parola ise yine admindir. İlk girişte parola değiştirmenizi şiddetle tavsiye ederim.
Temel Yapılandırma
ntopng’nin ana yapılandırma dosyası /etc/ntopng/ntopng.conf konumundadır. Varsayılan dosya açıklayıcı yorumlarla gelir ama sahaya çıkınca birkaç kritik satırı düzenlemeniz gerekiyor.
# /etc/ntopng/ntopng.conf içeriği (örnek)
-i=eth0
-w=3000
--community
-d=/var/lib/ntopng
--local-networks="192.168.1.0/24,10.0.0.0/8"
--dns-mode=1
--max-num-flows=131072
--max-num-hosts=65536
Önemli parametreler:
- -i: İzlenecek ağ arayüzü. Birden fazla arayüz için birden fazla
-isatırı ekleyebilirsiniz - -w: Web sunucusunun dinleyeceği port
- –local-networks: Yerel ağ tanımı. Bu kritik çünkü ntopng, yerel/uzak host ayrımını buna göre yapıyor
- –dns-mode: DNS çözümleme modu. 1 = sadece yerel çözümleme, 2 = hem yerel hem harici
- –max-num-flows: Takip edilecek maksimum eş zamanlı flow sayısı
- –community: Ücretsiz community sürümü için bu flag gerekli
Yapılandırmayı değiştirdikten sonra servisi yeniden başlatın:
sudo systemctl restart ntopng
sudo journalctl -u ntopng -f # Logları takip et
ntopctl ile Servis Yönetimi
ntopctl, ntopng servisini komut satırından yönetmek için kullanılan bir kontrol aracıdır. Özellikle headless sunucularda veya otomasyon senaryolarında çok işe yarıyor.
# Servis durumunu kontrol et
ntopctl status
# Servisi başlat/durdur/yeniden başlat
ntopctl start
ntopctl stop
ntopctl restart
# Mevcut yapılandırmayı görüntüle
ntopctl config dump
# İstatistikleri al
ntopctl stats
ntopctl ile yapabileceğiniz daha ileri düzey işlemler:
# Aktif arayüzleri listele
ntopctl interfaces
# Belirli bir arayüzün istatistiklerini al
ntopctl stats -i eth0
# Flow tablosunu sıfırla (dikkatli kullanın, prod ortamında)
ntopctl flush-flows
# Konfigürasyon doğrulama (servisi başlatmadan önce)
ntopctl config check
Bir gün prod sunucuda ntopng’nin neden yavaşladığını araştırırken ntopctl stats çıktısından flow tablosunun dolduğunu gördüm. --max-num-flows değerini 131072’den 262144’e çıkarmak sorunu çözdü. Bu tür anlık tanılama için ntopctl paha biçilmez.
Gerçek Zamanlı Trafik Analizi: CLI Tarafı
Web arayüzü güzel ama bir SSH oturumundayken hızlıca bir şeylere bakmak istediğinizde ntopng’nin REST API’si devreye giriyor. Birkaç pratik örnek:
# REST API ile top hosts listesini çek
curl -s -u admin:admin123
"http://localhost:3000/lua/rest/v2/get/host/top/hosts.lua?ifid=0"
| python3 -m json.tool | head -50
# Aktif flowları JSON olarak al
curl -s -u admin:admin123
"http://localhost:3000/lua/rest/v2/get/flow/active.lua?ifid=0&maxHits=20"
| python3 -m json.tool
# Belirli bir host hakkında detaylı bilgi
HOST_IP="192.168.1.100"
curl -s -u admin:admin123
"http://localhost:3000/lua/rest/v2/get/host/data.lua?ifid=0&host=${HOST_IP}"
| python3 -m json.tool
Bu API çıktılarını bir bash script’e sararak uyarı sistemi oluşturabilirsiniz. Örneğin, belirli bir host’un bant genişliği kullanımı eşiği aşarsa bildirim gönderen basit bir script:
#!/bin/bash
# ntopng_alert.sh - Bant genişliği uyarı scripti
NTOPNG_URL="http://localhost:3000"
USER="admin"
PASS="admin123"
THRESHOLD_MBPS=100
ALERT_EMAIL="[email protected]"
check_top_talkers() {
local response
response=$(curl -s -u "${USER}:${PASS}"
"${NTOPNG_URL}/lua/rest/v2/get/host/top/hosts.lua?ifid=0")
echo "$response" | python3 -c "
import sys, json
data = json.load(sys.stdin)
hosts = data.get('rsp', {}).get('hosts', [])
for host in hosts:
bytes_sent = host.get('bytes_sent', 0)
mbps = (bytes_sent * 8) / (1024 * 1024 * 60) # son 1 dakika icin
ip = host.get('ip', 'unknown')
if mbps > ${THRESHOLD_MBPS}:
print(f'ALERT: {ip} -> {mbps:.2f} Mbps')
"
}
alerts=$(check_top_talkers)
if [ -n "$alerts" ]; then
echo "$alerts" | mail -s "[ntopng] Bant Genisligi Uyarisi" "$ALERT_EMAIL"
echo "Uyari gonderildi: $alerts"
fi
nDPI ile Uygulama Seviyesi Protokol Tespiti
ntopng’nin en güçlü yanlarından biri nDPI kütüphanesidir. Bu kütüphane sayesinde sadece port bazlı değil, paket içeriğine bakarak hangi uygulamanın trafik ürettiğini tespit edebilirsiniz.
Örneğin bir host 443 portundan bağlantı kuruyorsa, bu HTTPS mi yoksa Teams mi yoksa Netflix mi, nDPI bunu ayırt ediyor. Bunu web arayüzünden görebileceğiniz gibi API üzerinden de sorgulayabilirsiniz.
# Protokol istatistiklerini çek
curl -s -u admin:admin123
"http://localhost:3000/lua/rest/v2/get/interface/data.lua?ifid=0"
| python3 -c "
import sys, json
data = json.load(sys.stdin)
protos = data.get('rsp', {}).get('ndpi', {})
print('Protokol Bazli Trafik:')
print('-' * 40)
for proto, stats in sorted(protos.items(),
key=lambda x: x[1].get('bytes', {}).get('sent', 0),
reverse=True)[:15]:
sent = stats.get('bytes', {}).get('sent', 0)
rcvd = stats.get('bytes', {}).get('rcvd', 0)
total_mb = (sent + rcvd) / (1024 * 1024)
print(f'{proto:<30} {total_mb:>10.2f} MB')
"
NetFlow/sFlow Entegrasyonu
Eğer yönettiğiniz ağda Cisco, Juniper veya Mikrotik gibi NetFlow/sFlow destekleyen cihazlar varsa, ntopng’yi bu verileri toplayan bir collector olarak da kullanabilirsiniz. Bu senaryo özellikle büyük ağlarda çok değerli.
# /etc/ntopng/ntopng.conf içine NetFlow collector ekle
-i=eth0
-i=nf:0 # NetFlow collector, UDP 2055
# Ya da belirli bir port icin:
-i=nf@2055
# sFlow icin:
-i=sf@6343
Mikrotik tarafında NetFlow’u etkinleştirmek için:
# Mikrotik RouterOS CLI (ntopng sunucusuna NetFlow gonder)
/ip traffic-flow set enabled=yes
/ip traffic-flow target add dst-address=NTOPNG_IP port=2055 version=9
Bu yapıyı kurduğumda, veri merkezindeki tüm core switch trafiğini ntopng üzerinden görmeye başlamıştım. Daha önce “kör nokta” olan bazı L3 segment’ler aniden görünür hale geldi. NetFlow entegrasyonu, agent kurmanın mümkün olmadığı donanım cihazları için gerçekten değerli.
Uyarılar ve Anomali Tespiti
ntopng Community sürümde bile temel uyarı mekanizmaları mevcut. /etc/ntopng/ntopng.conf dosyasına uyarı ayarları ekleyebilirsiniz, ya da web arayüzü üzerinden Settings > Alerts bölümünden yapılandırabilirsiniz.
Komut satırından uyarı geçmişini sorgulamak için:
# Son 1 saatin uyarilarini JSON olarak al
curl -s -u admin:admin123
"http://localhost:3000/lua/rest/v2/get/alert/list.lua?ifid=0&status=engaged"
| python3 -m json.tool
# Uyarilari CSV olarak disari aktar
curl -s -u admin:admin123
"http://localhost:3000/lua/rest/v2/get/alert/list.lua?ifid=0&format=csv"
> /var/log/ntopng_alerts_$(date +%Y%m%d).csv
ntopng’nin tespit edebildiği anomali türleri şunlardır:
- Flow flood: Kısa sürede anormal sayıda flow açılması
- DNS tüneli: DNS trafiği üzerinden veri sızdırma girişimleri
- Port scan: Sistematik port tarama faaliyetleri
- Malware host: Bilinen kötü amaçlı IP listelerindeki hostlarla iletişim
- TLS sertifika anomalisi: Self-signed veya süresi dolmuş sertifikalar
- ICMP flood: Anormal ICMP trafik miktarı
Performans Optimizasyonu
Büyük ağlarda ntopng’yi verimli çalıştırmak için birkaç kritik ayar var. Bunları öğrenmek biraz zaman aldı, paylaşayım.
# /etc/ntopng/ntopng.conf - Performans odakli ayarlar
-i=eth0
--core-affinity=2,3 # Hangi CPU cekirdeklerini kullansın
--redis=127.0.0.1:6379
--max-num-flows=262144
--max-num-hosts=65536
--disable-alerts # Uyarilar gerekmiyorsa kapat, kaynak tasarrufu saglar
--no-promisc # Sadece kendi trafikse promiscuous moda gerek yok
--dump-flows=none # Flow kaydi yapilmayacaksa none yap
Redis tarafında da birkaç ayar yapmak gerekiyor:
# /etc/redis/redis.conf icine ekle veya degistir
maxmemory 512mb
maxmemory-policy allkeys-lru
save "" # Disk'e yazmayi devre disi birak, sadece bellekte tut
Yüksek trafik ortamlarında ntopng’nin CPU kullanımını izlemek için:
# ntopng process'inin kaynak kullanimi
watch -n 2 "ps aux | grep ntopng | grep -v grep"
# Daha detayli
pidstat -u -p $(pgrep ntopng) 5
# Redis bellek kullanimi
redis-cli info memory | grep -E "(used_memory_human|maxmemory_human)"
Prometheus ve Grafana ile Entegrasyon
ntopng’nin kendi web arayüzü güzel ama mevcut Grafana altyapınız varsa oraya entegre etmek daha mantıklı. ntopng Enterprise sürümde native Prometheus exporter var, ancak Community sürüm için basit bir köprü script yazabilirsiniz.
#!/bin/bash
# ntopng_exporter.sh - Basit Prometheus metrigi uretici
# /usr/local/bin/ntopng_exporter.sh olarak kaydedin
# cron ile her dakika calistirin ve ciktisini node_exporter textfile dizinine yazin
NTOPNG_URL="http://localhost:3000"
USER="admin"
PASS="admin123"
OUTPUT_FILE="/var/lib/node_exporter/textfile_collector/ntopng.prom"
iface_data=$(curl -s -u "${USER}:${PASS}"
"${NTOPNG_URL}/lua/rest/v2/get/interface/data.lua?ifid=0")
bytes_sent=$(echo "$iface_data" | python3 -c
"import sys,json; d=json.load(sys.stdin); print(d.get('rsp',{}).get('bytes_sent',0))")
bytes_rcvd=$(echo "$iface_data" | python3 -c
"import sys,json; d=json.load(sys.stdin); print(d.get('rsp',{}).get('bytes_rcvd',0))")
num_hosts=$(echo "$iface_data" | python3 -c
"import sys,json; d=json.load(sys.stdin); print(d.get('rsp',{}).get('num_hosts',0))")
num_flows=$(echo "$iface_data" | python3 -c
"import sys,json; d=json.load(sys.stdin); print(d.get('rsp',{}).get('num_flows',0))")
cat > "$OUTPUT_FILE" << EOF
# HELP ntopng_bytes_sent_total Toplam gonderilen bayt
# TYPE ntopng_bytes_sent_total counter
ntopng_bytes_sent_total{interface="eth0"} ${bytes_sent}
# HELP ntopng_bytes_rcvd_total Toplam alinan bayt
# TYPE ntopng_bytes_rcvd_total counter
ntopng_bytes_rcvd_total{interface="eth0"} ${bytes_rcvd}
# HELP ntopng_active_hosts Aktif host sayisi
# TYPE ntopng_active_hosts gauge
ntopng_active_hosts{interface="eth0"} ${num_hosts}
# HELP ntopng_active_flows Aktif flow sayisi
# TYPE ntopng_active_flows gauge
ntopng_active_flows{interface="eth0"} ${num_flows}
EOF
Cron’a ekleyin:
echo "*/1 * * * * root /usr/local/bin/ntopng_exporter.sh"
>> /etc/cron.d/ntopng-exporter
Güvenlik Konuları
ntopng’yi production ortamında kullanırken bazı güvenlik önlemlerini almak şart.
İlk olarak web arayüzü doğrudan internete açılmamalı. Eğer uzaktan erişim gerekiyorsa, önüne bir nginx reverse proxy koyun ve HTTPS zorunlu yapın:
# /etc/nginx/sites-available/ntopng
server {
listen 443 ssl;
server_name ntopng.sirket-ic.com;
ssl_certificate /etc/ssl/certs/sirket.crt;
ssl_certificate_key /etc/ssl/private/sirket.key;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# Sadece iç ağdan erişime izin ver
allow 10.0.0.0/8;
allow 192.168.0.0/16;
deny all;
}
}
Ayrıca ntopng’nin dinlediği 3000 portunu doğrudan dış dünyaya açık bırakmayın:
# UFW ile 3000 portunu sadece localhost'a kısıtla
sudo ufw deny 3000
sudo ufw allow from 127.0.0.1 to any port 3000
Gerçek Hayat Senaryosu: Şüpheli Trafik Tespiti
Geçen ay bir müşterinin ağında gece saatlerinde açıklanamayan bant genişliği kullanımı vardı. ntopng’nin flow geçmişine bakarak şunu tespit ettik:
İç ağdaki bir Windows iş istasyonu, her gece 02:00-04:00 arasında Doğu Avrupa kaynaklı belirli IP aralıklarına düzenli aralıklarla küçük paketler gönderiyordu. nDPI bunları “Unknown” olarak sınıflandırmıştı, yani standart bir protokol değildi. Port numaraları da rastgele değişiyordu.
Bu trafik desenini ntopng’nin flow görünümünden tespit etmek, geleneksel yöntemlerle saatlerce log karıştırmaktan çok daha hızlıydı. İlgili iş istasyonunu izole ettik ve analiz ettik. Sonuç: eski bir backup yazılımının lisans sunucusuna bağlanmaya çalışması değil, gerçek bir C2 (command and control) iletişimiydi.
ntopng olmasaydı bu trafik muhtemelen aylarca fark edilmezdi.
Sonuç
ntopng ve ntopctl, ağ görünürlüğü konusunda ciddi bir boşluğu dolduruyor. Ücretsiz Community sürümü bile çoğu kurumsal ağın ihtiyaçlarını karşılayabiliyor. Özellikle şu senaryolarda değerini hızla kanıtlıyor: anormal trafik tespiti, bant genişliği planlama, uygulama katmanı görünürlüğü ve güvenlik olayı soruşturması.
Kurulum süreci düşünüldüğünde getirdiği değer son derece yüksek. Redis bağımlılığı ve bazı Enterprise özelliklerin ücretli olması dezavantaj gibi görünse de, açık kaynak alternatifleri arasında bu kadar dengeli bir araç bulmak kolay değil.
Eğer hala sadece iftop ve nethogs ile idare ediyorsanız, ntopng’ye geçiş için vakit kaybetmeyin. İlk kurulumdan sonra ağınızda daha önce hiç fark etmediğiniz şeyler görmeye başlayacaksınız. Bu hem heyecan verici hem de bazen biraz ürkütücü oluyor, uyarıyorum.
