SCTP képes samplicator
Contents
A samplicatorról általában
A samplicator szoftvert NetFlow adatfolyamok duplikálására készítették. Ilymódon lehetőség van a hálózati eszközöktől érkező NetFlow riportok tetszőleges számú collector felé való továbbítására. A samplicator működési elve a következő:
A hálózati eszköz által küldött NetFlow UDP csomagokat tehát a samplicator a konfigurációjának megfelelő helyre/helyekre küldi el.
A projekt keretében elvégzett módosításnak megfelelően a samplicator-t (1.3.5-ös verzió) képessé tettük, hogy a router által a NetFlow adatok közlésére nyitott SCTP kapcsolatot fogadni tudja és az SCTP-n érkező adatokat UDP-n küldje tovább a NetFlow collectorok irányába. Sajnos jelenleg nem áll rendelkezésre olyan NetFlow collector szoftver, amely támogatja az SCTP-t, így a samplicator ilyen irányban történő módosításának nincs értelme ill. a szoftver nem tesztelhető megfelelő collector hiányában.
A pályázat beadásának idején (2004 első fele) úgy látszott, hogy több SCTP képes router szoftver és collector fog a fejlesztők és tesztelők rendelkezésére állni, hiszen az IETF IPFIX munkacsoportja is az SCTP protokollt jelölte ki az IPFIX sztandard transzport protokolljaként. A SCTP protokoll tehát nem terjed olyan ütemben, amint arra számítani lehetett. Az első megfelelően stabil router implementációk most kezdenek csak megjelenni.
Azért választottuk a samplicator-t, mint átalakítandó szoftvert, mert a segítségével tesztelhetőek az router oldali SCTP implementációk. Amennyiben a collector oldalon is megjelennek az SCTP implementációk, az NIIF tovább folytatja a samplicator átalakítását, hogy az képes legyen a collectorok felé is SCTP-vel kommunikálni ill. az UDP alapő NetFlow riportokat képes legyen SCTP protokollal továbbítani.
A következőkben a samplicator rövid leírása ill. átalakításának részletezése olvasható.
A samplicator működése
A samplicator a következő parancssori paraméterekkel rendelkezik:
sctpuser@hufu:~/sctp/samplicator-1.3.5$ ./samplicate --help ./samplicate: invalid option -- - Usage: ./samplicate [option...] receiver... Supported options: -p <port> UDP/SCTP port to accept flows on (default 2000) -s <address> Interface address to accept flows on (default any) -d <level> debug level -b <size> set socket buffer size (default 65536) -n don't compute UDP checksum (leave at 0) -S maintain (spoof) source addresses -x <delay> transmit delay in microseconds -c configfile specify a config file to read -f fork program into background -t use SCTP protocol on receive side instead of UDP -h print this usage message and exit Specifying receivers: A.B.C.D[/port[/freq][,ttl]]... where: A.B.C.D is the receiver's IP address port is the UDP port to send to (default 2000) freq is the sampling rate (default 1) ttl is the sending packets TTL value (default 64) Config file format: [sctp] a.b.c.d[/e.f.g.h]: receiver ... where: sctp use SCTP for this specific source a.b.c.d is the senders IP address e.f.g.h is a mask to apply to the sender (default 255.255.255.255) receiver see above. Receivers specified on the command line will get all packets, those specified in the config-file will get only packets with a matching source.
A samplicator-t a parancssorból vezérelve csak UDP vagy csak SCTP port-on képes hallgatni a szoftver. A -t kapcsolót (SCTP protokoll használata) az átalakítás során adtuk a programhoz. A samplicator kényelmesebb használatához a konfigurációs file-t kell készítenünk. Ennek formátuma a következő:
[sctp] a.b.c.d[/e.f.g.h]: A.B.C.D[/port[/freq][,ttl]] ...
Azaz a konfiguráció egy sorában meg kell adnunk egy NetFlow forrást ill. az ehhez tartozó tetszőleges számú collector-t, amelyeknek el kell küldenünk a hálózati eszköz felöl érkező NetFlow adatokat. Amennyiben a forrás SCTP, akkor ezt a sor elején az sctp karakterekkel kell jelölnünk. A forráshoz tartozik egy maszk is, ugyanis egy adott maszk segítségével források egy csoportjára is hivatkozhatunk. A forrás leírását egy kettőspont követi, majd az egyes collectorok adatai (receiver). Nézzünk egy példát a konfigurációs állományra:
sctp 195.111.96.110/255.255.255.255: 193.225.13.161/12000 195.111.96.18/255.255.255.255: 193.225.13.161/12001 193.225.13.161/12002
Az első sorban egy SCTP forrást definiálunk /32-es maszkkal, amelynek hatására az SCTP-n bejövő NetFlow adatokat 193.225.13.161-es IP címre, a 12000-es UDP port-ra küldjük el. A második sor egy UDP forrást feltételez, szintén /32-es maszkkal. Itt két collector-t is definiáltunk.
A samplicator átdolgozása során a debug üzenetek is átstruktúrálásra kerültek (-d 1 kapcsoló). A fenti konfigurációs file hatására a következő debug üzeneteket olvashatjuk:
sctpuser@hufu:~/sctp/samplicator-1.3.5$ ./samplicate -p 50000 -d 1 -c ./samp.conf PROTOCOL MODE: UDP and SCTP mixed SOCKET: UDP socket initialized SOCKET: Listening on SCTP socket *** UDP message received *** Received 1416 bytes from 195.111.96.18:51973 -Not matching 195.111.96.110/255.255.255.255 +Sent to 193.225.13.161:12001 +Sent to 193.225.13.161:12002 *** UDP message received *** Received 412 bytes from 195.111.96.18:51973 -Not matching 195.111.96.110/255.255.255.255 +Sent to 193.225.13.161:12001 +Sent to 193.225.13.161:12002 *** SCTP message received *** Source address: 195.111.96.110:51453 Message size: 20 Stream: 0 Stream Seq Number: 0 Association ID: 0 SCTP flags: 0x0 Payload Protocol ID: 0 Transmission Seq Number: 0x0 Cumulative TSN: 0 * Notification: SCTP_ASSOC_CHANGE (state=0, inbound streams=20, outbound streams=10, error=0) *** SCTP message received *** Source address: 195.111.96.110:51453 Message size: 108 Stream: 0 Stream Seq Number: 0 Association ID: 1 SCTP flags: 0x0 Payload Protocol ID: 270991360 Transmission Seq Number: 0x1FF4B4EF Cumulative TSN: 0 Received 108 bytes from 195.111.96.110:51453 +Sent to 193.225.13.161:12000 -Not matching 195.111.96.18/255.255.255.255 *** UDP message received *** Received 1416 bytes from 195.111.96.18:51973 -Not matching 195.111.96.110/255.255.255.255 +Sent to 193.225.13.161:12001 +Sent to 193.225.13.161:12002 *** SCTP message received *** Source address: 195.111.96.110:51453 Message size: 112 Stream: 2 Stream Seq Number: 0 Association ID: 1 SCTP flags: 0x0 Payload Protocol ID: 0 Transmission Seq Number: 0x1FF4B4F0 Cumulative TSN: 0 Received 112 bytes from 195.111.96.110:51453 +Sent to 193.225.13.161:12000 -Not matching 195.111.96.18/255.255.255.255
SCTP telepítése a különböző operációs rendszerekhez
Az alábbi oldalon egy részletes összefoglalót találhatunk az egyes operációs rendszerekhez készített SCTP protokoll stack-ekről:
http://www.sctp.org/implementations.html
Jelen dokumentumban a Linux (Debian) operációs rendszerhez való telepítésről írunk bővebben.
A fejlesztéshez a Linux operációs rendszer 2.6-os kernelében lévő SCTP implementációt használtuk. A 2.4-es kernel-ek közül a 2.4.23-as verziójú kódban szintén szerepel SCTP támogatás, bár inkább ajánlott a 2.6-os kernelt használni ilyen célú tesztelésre.
Debian disztribúció esetén telepítsük a libsctp1 és libsctp-dev csomagokat. Amennyiben nem Debian disztribúciót használunk, akkor a Linux Kernel SCTP support oldaláról letölthetjük a megfelelő library kódot:
http://sourceforge.net/projects/lksctp/
Az SCTP képes samplicator telepítése
A samplicator legfrissebb verziója az alábbi URL-ről tölthető le:
http://www.switch.ch/tf-tant/floma/sw/samplicator/
Az SCTP modosítás egyenlőre nem került kiadásra, a frissített forráskódot elküldtük a fejlesztőknek, dolgoznak egy újabb forrás-csomag előállításán ill. néhány további módosításon (multiplatformosítás, pl. Solaris-ra). Jelenleg ugyan nehézkesen, de a következő módon tudunk SCTP képes samplicatort fordítani Linux platformon:
1. Töltsük le a fenti URL-ről az 1.3.5-ös verziót. 2. Tömörítsük ki a forráskódot, majd adjuk ki a következő parancsokat:
sctpuser@hufu:~/sctp/samplicator-1.3.5$./configure ... sctpuser@hufu:~/sctp/samplicator-1.3.5$make
3. Amennyiben sikeresen lefordul az 1.3.5-ös verzió, akkor írjuk felül a samplicate.c file-t az SCTP képes samplicate.c file-al:
4. A disztribúciónknak megfelelően generált Makefile-ban található LIBS változóhoz adjuk hozzá az -lsctp kapcsolót, hogy SCTP library-t linkelésre kerüljön a fordítás után.
5. Fordítsuk le a forráskódot a make paranccsal. Ezt követően a fenti részletek alapján járjunk el.