«

»

Haz 05 2013

Özgür Yazılımlarla sFlow Analizi

Flow nedir?

Netflow analizi konusunda kaynak oldukça fazla ama sflow konusunda çok fazla kaynak malesef yok. Bilmeyenler için kısaca özetliyeyim; “flow” sözcüğü yapılan bir trafiğin tamamını kaydetmeden özel bir algoritma ile ne tarz bir trafik olduğunu veren teknoloji için kullanılır. Flow verisini alıp işleyerek, trafiğiniz hakkında bilgi sahibi olursunuz. Aşağıdaki tarzda işlemler flow sonucunda sağlanabilmektedir:

  • En çok trafik yapan host’lar raporu
  • En çok trafik taşıyan protokoller raporu
  • En fazla paket gönderimi/alımı yapan IP adresleri
  • Belirli eşik değerlerini geçen tipte trafik olursa, e-posta ile haber verilmesi
  • vb.

Bir flow sistemi temel olarak iki kısımdan oluşmaktadır. Trafiğin üzerinden geçtiği cihaz, bu trafik bilgisini trafik tanımlama bilgisi olarak diğer bir bilgisayara (collector) gönderir. İkinci bilgisayar da bu veriyi işler ve cicili-bicili grafikler verir. Analiz tafındaki bilgisayar da bazen iki bileşenden oluşabilir. Bir yazılım daemon modunda çalışır, bir UDP portu dinler ve gelen veriyi diske kaydeder. Diğer yazılım da bu veriyi analiz eder. Bazen de tek bir yazılım ikisini de yapabilir.

sflow / netflow?

En yaygın bilinen flow türü, netflow’dur. Bunda şüphesiz en büyük pay Cisco’ya aittir. Büyük çaplı işletmelerde ve kritik konularda düne kadar Cisco kullanmak vacip olduğundan (özellikle farz demedim), ve flow da genelde bu tarz kurumların işine yaradığından olsa gerek, Cisco tarafından sağlanan netflow türü yaygınlaşmıştır.

HP gibi bazı üreticiler ise, netflow yerine sflow tercih etmektedir. Peki ikisi arasındaki fark nedir? Şöyle özetlenebilir:

  • netflow trafiğin tümünü tanımlar, sflow örnekleme yapar.
  • netflow’da 3. katman ve sonrasının bilgileri sağlanır. sflow’da ise 2. katmandan itibaren veri sağlanır.
  • netflow ve sflow genelde aynı cihazda desteklenmez, özel bir flow türüne ihtiyaç varsa, cihazı almadan buna karar vermek gerekir.

Biz anahtarlarımızda genelde HP Procurve kullandığımız için, mecburen sflow kullanmak durmunda kaldık. Bu nedenle bu yazının konusu sflow oldu. Bu arada netflow’un 9 sürümünden sonra IPFIX isminde IETF standardı haline geldiğini de belirtmekte fayda var. Diğer taraftan, “netflow sözcüğü” (teknolojisi değil) Cisco’nun tescilli markası olduğundan diğer üreticiler de bu ismi kullanmaktan kaçınıp farklı isimler (NetStream, jflow, cflowd, rflow, vb.) vermişlerdir.

flow genelde ağ cihazları tarafından desteklenmektedir. Ancak Linux’un (ve kuzenlerinin) bir ağ cihazının yaptığı hemen herşeyi yapabildiğini düşünürsek, flow’u da verebileceğini tahmin edebiliriz. “fprobe” türünde araçlarla, Linux yönlendiriciniz veya sunucunuz üzerinden flow verisi gönderebilirsiniz.

Yine bir not daha; netflow’un da 2.katmanda veri gönderebildiğine dair yazılar var. Ama detayına bakmadım. Yeni sürümlerinde olabilir.

Kullanılan Özgür Yazılımlar

Piyasada netflow verisi almak ve işlemek için çok sayıda yazılım bulunmaktadır. Solarwinds ve Manageengine gibi firmalar cüzi ücretlerle flow verisi toplayıp analiz eden yazılımları satmaktadır. Ancak burada özgür yazılımların nasıl kullanılacağına değinilecektir. Bu yazı kapsamında kullanılan yazılımlar aşağıda listelenmiştir:

  • Debian 6.0.7 (Linux 2.6.32-5-amd64 #1 SMP)
  • nfdump-sflow 1.6.6-1
  • nfsen 1.3.6p1

Hazır yüklü bir Debian sunucumuz vardı, bunun üzerine kurulum yaptım. nfdump-sflow paketi benim Debian’da yoktu, yeni sürümün deposundan elle indirip, .deb paketinden kurdum. Doğrudan apt-get ile kurulabilir aslında yani. nfsen’i ise mecburen tar.gz biçiminde indirip yüklüyoruz.

1. Aşama: Anahtardan sFlow’un gönderilmesi

Bizim anahtarların genelde HP olduğunu belirtmiştim. Kenarlarda da genelde 2610 ve 2620 anahtarlarımız var. 2610’ların flow konusunda bir sıkıntısı var. sflow desteklemesine rağmen, CLI veya web üzerinden flow yapılandırılması yapılamıyor. Sadece SNMP ile yapılabiliyormuş. İsterseniz elle snmp ile yapın, isterseniz PCM+ üzerinden. Ben 2610 ile henüz uğraşmadım. Bu konuda okuduğum bir şikayet te anahtar kapatılıp açıldığında, flow gönderme yapılandırmasının gittiği konusunda. Deneyip görmedim. Ancak 2620’lerde bir sorun yaşamadım.

2620 sflow yapılandırması

sflow 1 destination <hedef_ip> [port]
sflow 1 polling 1-28 Y
sflow 1 sampling 1-28 X

2620 yapılandırma açıklaması

2620’ler, 3 farklı sflow akışı gönderebiliyor. Bu nedenle, her sflow komutundan sonra akış numarasının (örnekte “1”) belirtilmesi gerekiyor.

destination parametresi ile, hangi adrese (flow dinleyici, collector) gönderileceğini belirtiyoruz. [port] kısmına birşey yazılmazsa, varsayılan olarak UDP 6343 kullanılıyor. Bir flow toplayıcıda birden fazla cihazın verisini işlemek işsterseniz, hepsini farklı UDP portlarından göndermeniz gerekecektir. polling parametresi ile ne kadar sıklıkla verilerin aktarılacağını, saniye cinsinden, belirtiyoruz. Bu konuda sık aktarımın sorun olmayacağını, flow gönderiminin donanım tarafından halledildiğini belirtiyor uzmanlar. 1-28 şeklinde belirtilen değer ise portları ifade ediyor. Hangi portlardan gelen trafiklerin flowunu göndereceğiz?

sampling parametresi sıkıntı biraz. Yazılan değer X ise; “X paketten 1 tanesini örnek seç” anlamına geliyor. Neye göre, nasıl örneklersiniz? Bunun kesin bir cevabı yok, test yapmadan denemeden en iyisi budur deme şansımız yok. Çünkü 1/1 örnekleme demediğiniz sürece mutlaka az da olsa bir kayıp olacak. Hoş kayıbın “önemsiz” sayılabilecek kadar az olduğunu belirtiyorlar ama sonuçta verim %100 değil. İyi bir ses sistemi varsa, MP3’lerde 128Kbps altından keyif almam, 192Kbps tercih ederim mesela. Dİğer taraftan 16Kbps mp3 dinleyen ve rahatsız olmayan tanıdıklarım da var :)

sampling parametresinin Rob Maas tarafından inmon.com sitesinden alınmış olan ve optimal olduğu öne sürülen bazı değerleri (yapılandırmada “X” ile belirtilen kısım) şöyle verebiliriz:

Bant genişliği (Mb/s) Az trafik Orta trafik Yoğun trafik

10

64

128

256

100

128

256

512

1000

256

512

1024

10000

512

1024

2048

Güvenlik duvarı izinleri

flow verisinin gönderileceği hedef adres güvenlik duvarının diğer tarafında ise (veya makina üzerinde güvenlik duvarı çalışıyorsa) UDP 6343 (ya da hangi port kullanıldıysa) portuna izin verilmesi unutulmamalıdır. İlk kurulumumda bu ufak hata yüzünden bayaa bir süre veri gelmesini beklemiştim :)

2. Aşama: nfdump-sflow Kurulumu

nfdump, daemon modunda çalışıp, ağdan gelen flow verisini diske yazmak için kullanılıyor. Paketin daemon tarafında çalışan bileşenin adı da nfcapd. nfdump normalde netflow için yazılmış bir bileşen. Sonradan sflow destekler hale getirilince nfdump-sflow biçiminde birpaket daha Debian deposuna girmiş. Bu paketin daemon tarafındaki bileşeni de sfcapd isminde.

İstenirse, sadece nfdump-sflow kurulumu flow verisini işlemek için yeterlidir. nfdump sayesinde, konsolda tcpdump türünde filtreler kullanılarak flow verilerinden istenen sonuçlar alınabilir. Ancak “ben fare kullanmak istiyorum, grafik görmek istiyorum” derseniz, sonraki başlıkta nfsen kurulumu ile bunu sağlayacağız. Bunu özellikle belirttim ki konsoldan kullanmak isteyenler bu başlık sonunda işlerini halledebilecekler.

Paketin (ve gerekliliklerinin) kurulumu sağlandıktan (apt-get ile tabii) sonra, aşağıdaki işlemler yapılmalıdır:

  1. /etc/init.d/nfdump dosyasında; sflow için, “NAME=sfcapd” olacak şekilde değiştir.
  2. /etc/default/nfdump dosyasında “nfcapd_start=no” satırını “yes” yap.
  3. /etc/default/nfdump dosyasında DATA_BASE_DIR=”/flow/nfdump/” satırını, verileri kaydetmek istediğin yere göre düzenle.
  4. /etc/init.d/nfdump start” de.
  5. Dinlemeye başladığını görmek için, “lsof -Pni | grep fcapd” komutunu ver ve portunu kontrol et.
  6. Veri toplamaya başlayıp başlamadığına bakmak için, veri klasörüne dosya yazılıp yazılmadığına bak.

Veri toplanmaya başladıysa; aşağıdaki (ve benzeri) komutlarla verilere bakabilirsin:

nfdump kurulumu burada bitiyor. sflow verileri geldi, kaydedildi ve raporlandı. flow verilerini nfsen ile kullanmak isteyenler, aşağıdaki başlıktan devam edebilir.

3. Aşama: nfsen Kurulumu

1. nfsen, depoda olmadığından web sitesinden tar.gz dosyası indirip kurulum yapıyoruz. Bağımlılık kontrolü yapılamayacağından; web sitesinden bağımlılıkları okuyup hepsini halledelim ki kurulum sırasında veya sonrasında sürprizle karşılaşmayalım.
2. Arşiv dosyasını bir klasör altına açtıktan sonra; bu klasör altındaki etc/nfsen-dist.conf dosyasını, /etc/nfsen.conf şeklinde kopyalayıp /etc/nfsen.conf üzerinde alttaki satırları uygun şekilde düzenle:

$BASEDIR = "/flow/nfsen";
$HTMLDIR = "/var/www/nfsen/";
$PREFIX = '/usr/bin';
$USER = "www-data";
$WWWUSER = "www-data";
$WWWGROUP = "www-data";
...
%sources = (
'kenar-anahtar-1' => { 'port' => '6343', 'col' => '#0000ff', 'type' => 'sflow' },
'yonlendirici-1' => { 'port' => '6344', 'col' => '#00ff00', 'type' => 'sflow' },
);
...
$MAIL_FROM = 'e-posta@hesabi';
$SMTP_SERVER = 'localhost';

3. etc/default/nfdump dosyasında “nfcapd_start=…” satırını “no” yapalım ki, nfdump kendisi çalışmasın. nfsen kullanmayacaksak, nfdump’un otomatik çalışabilmesi için, bu parametre “yes” olmalıdır. nfsen kullanılacağı durumda, nfdump’u nfsen kendisi kontrol edeceğinden, bu parametrenin “no” olmasını sağlamalıyız.

4. tar.gz paketini açarak elde ettiğimiz nfsen klasörü altında; “./install.pl /etc/nfsen.conf” komutunu çalıştır.

5. nfsen web klasörüne sembolik bağlantı yap: ln -s /flow/nfsen/www /var/www/nfsen

6. Kurulum tamamlanınca; “/flow/nfsen/bin/nfsen start” komutunu ver.

7. sfcapd’nin gelen flow’ları dinleyip dinlemediğini öğrenmek için, “lsof -Pni | grep fcapd” komutunu ver. UDP 6343’ü (veya hangi portu kullanıyorsak) çıktıda görelim.

8. Artık, http://sunucu_adresi/nfsen/nfsen.php adresinden web üzerinden nfsen’e bağlanarak yönetebilirsiniz.

Nfsen’in daemon şeklinde (servis) otomatik başlaması için, şunları yapabilirsiniz:

İsterseniz, IP veya kullanıcı bazlı kısıtlamayı apache üzerinden yapabilirsiniz. Nfsen plugin’lerini de kurcalayabilirsiniz.

  1. mehmet ali oksuz

    tesekkurler. cok guzel olmus :))

  2. Altuğ Kayhan

    Detaylı bilgilndirme için teşekkürler.

Bir Cevap Yazın

Bad Behavior has blocked 49 access attempts in the last 7 days.