original in de Mario M. Knopf
de to en Mario M. Knopf
en to nl Guus Snijders
Mario houdt zich graag druk bezig met Linux, netwerken en andere, beveiliging-gerelateerde onderwerpen.
"darkstat" [1] is een tool voor het monitoren van netwerken en het analyseren van opgenomen gegevens kan op basis van deze data verschillende statistieken als HTML-uitvoer produceren. Deze statistieken kunnen comfortabel worden bekeken met een browser. De auteur van het programma heeft eerst lange tijd "ntop" [2] gebruikt voor dit doel, maar de stabiliteitsproblemen en slecht geheugen gedrag bevielen toch niet zo goed. Dat heeft geleid tot de ontwikkeling van "darkstat". De geadresseerde statistieken refereren aan de communicatie tussen hosts, het veroorzaakte verkeer, de poortnummers en eventueel de gebruikte transmissie protocollen. Ook diagrammen van de verzamelde perioden en een korte samenvatting van de geanalyseerde pakketten sinds programma start behoren tot de mogelijkheden.
De broncode van het programma "darkstat" kan direct op [3] worden gevonden. Eventueel kan hiervoor ook een van de twee mirrors ([4], [5]) worden gebruikt. De Debian pakketten kunnen gevonden worden op [6].
"darkstat" is ook afhankelijk, net als vele andere tools voor netwerk monitoring, op "libpcab" [7]. Dit is een library (bibliotheek) die gebruikt wordt door pakket sniffers en levert een interface voor het opvangen (capture) en analyseren van pakketten van netwerk apparaten. Voor de installatie van "darkstat" heb je dus eerst deze library nodig.
Dan kun je compileren met de overbekende drie-stap "./configure && make && make install". Overigens dient de laatste instructie met root-rechten plaats te vinden.
"darkstat" biedt een aantal parameters die bij het starten van het programma kunnen worden meegegeven. Echter, voor een eerste test is een start zonder enige opties voldoende. Om in staat te zijn werk te verrichten, moet het programma wel als root of met "sudo"-privileges [8] gestart worden:
neo5k@proteus> sudo /usr/local/sbin/darkstat We trust you have received the usual lecture from the local System Administrator. It usually boils down to these two things: #1) Respect the privacy of others. #2) Think before you type. Password:
Nadat de geauthoriseerde gebruiker zijn wachtwoord heeft gegeven, start "darkstat" en geeft een aantal status berichten:
darkstat v2.6 using libpcap v2.4 (i686-pc-linux-gnu) Firing up threads... Sniffing on device eth0, local IP is 192.168.1.1 DNS: Thread is awake. WWW: Thread is awake and awaiting connections. WWW: You are using the English language version. GRAPH: Starting at 8 secs, 51 mins, 22hrs, 30 days. Can't load db from darkstat.db, starting from scratch. ACCT: Capturing traffic... Point your browser at http://localhost:666/ to see the stats.
Daar de test succesvol was en de uitvoer zelf-verklarend is, kunnen we kijken naar de mogelijke start parameters.
Zoals eerder genoemd, biedt "darkstat" verschillende opties, welke bij het starten kunnen worden meegegeven. Deze parameters zijn:
Met optie "-i" kun je opgeven welke interface je wilt monitoren.
darkstat -i eth1
Zonder speciale parameters, opent "darkstat" de gepriviligeerde poort 666. Je kunt deze gewoonte voorkomen door te starten met de parameter "-p":
darkstat -p 8080
Om te binden aan een bepaalde poort van een specifieke interface, kun je optie "-b" gebruiken. In het volgende voorbeeld wordt het local loopback adres gebruikt:
darkstat -b 127.0.0.1
Persistente DNS-Resolutie kan worden voorkomen met de parameter "-n". Dit kan vooral handig zijn voor mensen zonder flat-fee of vaste lijn.
darkstat -n
Gebruik de optie "-P" om te voorkomen dat "darkstat" de interface in "promiscuous mode" plaatst. Dit is echter niet aan te raden omdat "darkstat" dan alleen die pakketten opvangt en analyseert die gericht waren aan het MAC van de gemonitorde netwerk-interface. Alle andere pakketten worden geweigerd.
darkstat -P
Parameter "-l" activeert correct "SNAT" -gedrag in het locale netwerk. "SNAT" staat voor "Source Network Address Translation" en betekend dat je router het lokale IP adres van de client maskeert met zijn eigen publieke. Dan verstuurd de router dus de aanvraag voor de client die de oorspronkelijke vraag stelde.
darkstat -l 192.168.1.0/255.255.255.0
Met de parameter "-e" kun je een packet filter expressie uitvoeren.
darkstat -e "port not 22"
Vanaf versie 2.5 kun je "darkstat" "detach"-en van de terminal. Dan functioneerd hij dus als een daemon.
darkstat --detach
Met de parameter "-d" geef je de directory op waar "darkstat" zijn database creëerd.
darkstat -d /directory
Optie "-v" activeert de "verbose mode":
darkstat -v
Als je het versie nummer van "darkstat" of het volledige gebruik en syntax, kun je de parameter "-h" proberen.
darkstat -h
Na de eerste start van "darkstat" kun je je browser richten op "http://localhost:666", dit is de default. Nu kun je kijken naar een korte samenvatting van de statistieken en enkele grafieken, gegenereerd sinds het starten van het programma:
Op de "hosts" site kun je alle machines zien die deelnemen in de communicatie. Deze kunnen gesorteerd worden op veroorzaakt verkeer of hun specifieke IP adres. Met deze mogelijkheid kun je snel de machines achterhalen die het meeste verkeer op je lokale netwerk hebben veroorzaakt. Daarbij heeft de verantwoordelijke systeembeheerder een kans om problemen tot op de bodem uit te zoeken. In het volgende screenshot is dit bijvoorbeeld de client met het lokake IP adres "192.168.1.203".
Afbeeldign 2: darkstat hosts
In afbeelding 3 kun je de poortnummers zien die gebruikt worden door server en client applicaties. Je kunt onmiddelijk de poortnummers herkennen die door de volgende daemons worden gebruikt: 21 (FTP), 22 (SSH), 139 (Samba), 631 (CUPS), 666 (darkstat), 3128 (Squid). Echter, de twee services "dhcpd" en "dnsmasq" zijn niet zichtbaar, omdat deze services communiceren via "UDP". Alle poorten boven 1024 zijn niet gepriviligeerd en worden gebruikt door client applicaties voor communicatie. De proxy server "squid vormt een uitzondering, deze gebruikt standaard de poort 3128. Je kunt een bijgehouden lijst van alle poortnummers vinden bij IANA [9], deze is verantwoordelijk voor deze lijst. Eventueel kun je ook in het bestand "/etc/services" kijken.
Afbeelding 3: darkstat ports
In de volgende afbeelding kun je de protocollen "ICMP", "TCP" en "UDP" zien, welke betrokken waren bij in de communicatie gebeurtenis. Geïnteresseerden kunnen goede introducties vinden in de volgende RFCs op [10], [11] en [12].
Afbeelding 4: darkstat protocols
Het laatste screenshot geeft een samenvatting van de verzamelde perioden als grafieken:
Afbeelding 5: darkstat graphs
Versie 2.6 van "darkstat", welke we hier besproken hebben, is helaas afhankelijk van "pthreads". Dit levert problemen op op andere platformen, zoals NetBSD. Om deze reden heeft auteur Emil Mikulic besloten om de huidige versie 2.x niet verder te ontwikkellen en in plaats daarvan al te werken aan 3.x
In de nieuwe versie worden dingen geïmplementeerd als het capturen van pakketten van meerdere interfaces tegelijk, een config bestand parser, een optisch verbeterde uitvoer voor diagrammen (vergelijkbaar met de RRDtool [13]), een aanpasbaar CSS-bestand, admin login en bewerken van de database via de web interface, enzovoort.
"darkstat" is een erg stabiele en snelle netwerk monitoring tool, die precies doet wat' ie moet doen - verkeer analyseren. Verder werkt het zonder enige problemen, ondergaat continue ontwikkeling en zal veel nieuwe en interessante features in de komende versie bieden. Voorlopig wens ik je veel succes met de jacht op "verkeers-overtreders" op je lokale netwerken.
[1] http://purl.org/net/darkstat [Homepage van darkstat]
[2] http://www.ntop.org/ [Homepage van ntop]
[3] http://dmr.ath.cx/net/darkstat/darkstat-2.6.tar.gz
[Download]
[4] http://yallara.cs.rmit.edu.au/~emikulic/_/darkstat-2.6.tar.gz
[Download Mirror #1]
[5] http://neo5k.de/downloads/files/darkstat-2.6.tar.gz
[Download Mirror #2]
[6] http://ftp.debian.org/debian/pool/main/d/darkstat/
[Debian Paketten]
[7] http://www.tcpdump.org/ [Home van libpcap]
[8] http://www.courtesan.com/sudo/ [Home van sudo]
[9] http://www.iana.org/assignments/port-numbers
[IANA Poort-Nummers]
[10] ftp://ftp.rfc-editor.org/in-notes/rfc792.txt
[RFC 792 - ICMP]
[11] ftp://ftp.rfc-editor.org/in-notes/rfc793.txt
[RFC 793 - TCP]
[12] ftp://ftp.rfc-editor.org/in-notes/rfc768.txt
[RFC 768 - UDP]
[13] http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
[Home van RRDtool]