original in en David Guerrero
en to nl Tom Uijldert
Bruikbare hulpmiddelen voor het beheer van huidige - alomtegenwoordige - netwerken.
Er zijn veel redenen voor beheerders om netwerkapparatuur in de gaten te houden: goed gebruik van de bandbreedte, status van verbindingen, flessenhalzen, problemen met bekabeling of met routering tussen apparatuur enz. Het in de gaten houden van de netwerkactiviteit is ook een goed startpunt voor het detecteren van beveiligingsproblemen en misbruik.
In veel gevallen bevat het netwerk van een organisatie dure verbindingen naar de buitenwereld (WAN; Wide Area Network) of naar het Internet. De kosten hiervan zijn gebaseerd zijn op het volume van de getransporteerde data. Het is heel belangrijk om statistieken bij te houden over de hoeveelheid verkeer die over deze verbindingen gaat. Dit is een normale taak in Europa, waar X.25-verbindingen nog steeds veel worden gebruikt. De kosten worden gebaseerd op het aantal verzonden en ontvangen pakketten.
Andere verbindingstypen, zoals Point-to-Point of Frame Relay, kennen meestal een vaste prijs. Hierbij garandeert de telecomaanbieder een bepaalde bandbreedte, waarbij het dus belangrijk is om die in de gaten te houden.
Aan het eind van dit artikel behandelen we een hulpmiddel dat is gemaakt om netwerkverkeer in de gaten te houden op router-koppelingen, met een uitstekende grafische weergave van deze informatie. Het kan eenvoudig worden aangepast om ook andere informatie in de gaten te houden.
SNMP werkt op applicatieniveau en gebruikt TCP/IP als transportprotocol zodat het de onderliggende netwerkhardware niet hoeft te zien. Dit betekent dat de management-software gebruik maakt van IP en dus apparaten kan aansturen op ieder aangesloten netwerk (en niet alleen apparaten die zijn aangesloten op het eigen netwerk). Dit heeft ook zijn nadelen: indien de IP- routering tussen twee apparaten niet werkt dan kan het apparaat in kwestie dus ook niet worden benaderd, bijvoorbeeld voor een herconfiguratie.
De SNMP-architectuur kent twee belangrijke elementen: de agent en de manager. Het is een client-server-architectuur, waarbij de agent de server is en de manager de client.
De agent is een programma dat op ieder beheerd apparaat in het netwerk draait. Het koppelt alle specifieke zaken van een apparaat die geconfigureerd kunnen worden. Deze zaken worden opgeslagen in een Management Information Base (MIB), waarover later meer. Dit is de serverkant, voor zover het de informatie over de configuratie vasthoudt en wacht op het uitvoeren van commando's voor de client.
De manager is het programma dat draait op het beheersconsole van het netwerk. Het is de taak van de manager om contact te leggen met de diverse agents in het netwerk en waarden op te vragen van de specifieke interne data van een apparaat. Dit is de clientkant van de communicatie.
Er is een apart commando binnen SNMP, trap geheten, dat een agent in staat stelt om ongevraagd data te versturen naar de manager om deze op de hoogte te stellen van gebeurtenissen zoals een fout of het stoppen van een apparaat.
SNMP is in essentie een heel simpel protocol zolang alle bewerkingen worden beperkt tot het model van opvragen en opslaan, waarvoor eigenlijk maar een paar commando's nodig zijn. Een manager kan slechts twee bewerkingen op een agent uitvoeren: het opvragen van waarden en het laten opslaan van waarden in de MIB van de agent. De twee bewerkingen staan ook wel bekend als get-request en set-request. Er is een commando als antwoord op het get-request en dat is de get-response die alleen door een agent kan worden gegeven.
De uitbreidbaarheid van het protocol is direct gerelateerd aan het vermogen van de MIB om nieuwe grootheden op te slaan. Als een fabrikant nieuwe bewerkingen toe wil voegen aan bijvoorbeeld zijn router, dan moet hij de betreffende grootheden opslaan in zijn database (MIB).
Bijna alle fabrikanten implementeren versies van SNMP-agents in hun apparaten: routers, hubs, besturingssystemen, enz. Linux is hierin geen uitzondering en op het Internet zijn dan ook vrij te verkrijgen SNMP-agents te vinden.
Het is gebruikelijk om een openbaar wachtwoord op "public" in te stellen en het privé-wachtwoord op "private" maar het is uiterst belangrijk om deze waarden eventueel te veranderen in overeenstemming met de beveiligingsrichtlijnen van de organisatie.
De huidige versie van de TCP/IP MIB is MIB-II en wordt gedefinieerd in RFC 1213. Het verdeelt de informatie die een TCP/IP-apparaat moet bijhouden in acht categorieën (zie tabel 1) en ieder gegeven moet in een van deze categorieën vallen.
Categorie | Gegeven |
---|---|
system | Informatie over het besturingssysteem van computer of router |
interfaces | Informatie over netwerkkoppelingen |
addr-translation | Informatie over omzettingen van adressen |
ip | Informatie over het IP-protocol |
icmp | Informatie over het ICMP-protocol |
tcp | Informatie over het TCP-protocol |
udp | Informatie over het UDP-protocol |
egp | Informatie over het protocol van de externe gateway |
Het object ifNumber bijvoorbeeld uit de categorie "interfaces" bevat een getal dat het aantal koppelingen (interfaces) weergeeft voor dit apparaat. Het object ipRoutingTable uit de categorie "ip" echter, bevat de routeringstabel van dit apparaat.
Vergeet niet om het instance-volgnummer op te geven bij het opvragen van de waarde van een object. In dit geval kan het aantal koppelingen van een apparaat worden opgevraagd met de instance ifNumber.0.
In het geval van een tabelobject zul je het laatste nummer moeten gebruiken voor het aangeven van de index in de tabel om een bepaalde instance te lokaliseren (een rij in de tabel).
Er is nog een andere standaard voor het definiëren en identificeren van MIB-variabelen met de naam Structure of Management Information (SMI). SMI schrijft voor dat MIB-variabelen moeten worden gedeclareerd in een door ISO gedefinieerde formele taal genaamd ASN.1 die de definitie en inhoud van de variabelen uniek maakt.
De ISO-benamingen zijn onderdeel van een globale naamgevingsstructuur, waarvan ook andere boomstructuren van andere standaardiseringsorganisaties onderdeel zijn. Binnen deze ISO-benamingen zit ook een aparte boomstructuur voor de MIB-informatie. In dit MIB-gedeelte zitten weer gedeelten voor objecten van alle protocollen en applicaties zodat deze informatie uniek kan worden gerepresenteerd.
Afbeelding 1 laat zien dat de TCP/IP-naamstructuur voor de MIB onder de mgmt- naamstructuur zit van het IAB. Deze hiërarchie geeft ook een nummer voor ieder niveau.
Op die manier kan het object ifNumber van de categorie "interfaces" als volgt worden gelokaliseerd:
.iso.org.dod.internet.mgmt.mib-2.interfaces.ifnumberof met zijn numerieke tegenhanger:
.1.3.6.1.2.1.2.1De instance kan dan worden gelokaliseerd als:
.iso.org.dod.internet.mgmt.mib-2.interfaces.ifnumber.0of met zijn numerieke tegenhanger:
.1.3.6.1.2.1.2.1.0Nieuwe MIB's kunnen aan de boom worden toegevoegd door fabrikanten (met nieuwe apparatuur) door het publiceren van de juiste RFC's.
De distributie bevat hulpmiddelen die beheerders in staat stellen om, via commandoregels, verzoeken te versturen naar SNMP-agents. Tevens bevat het een SNMP-agent speciaal voor Linux die beheerders (ook op de eigen machine) op de hoogte kan stellen van de status van koppelingen, routeringstabellen, uptime, enz.
Een waardevolle toevoeging van CMU-SNMP is een SNMP C-koppeling die C-programmeurs in staat stelt om complexere hulpmiddelen voor beheer te bouwen, gebaseerd op de netwerkmogelijkheden van deze distributie.
De installatie op Linux is eenvoudig maar wijkt wel af van de originele CMU-distributie. De distributie bevat reeds gecompileerde versies van de beheerdershulpmiddelen, de daemon en de bibliotheek voor koppelingen.
Allereerst moet je beslissen of je de uitvoerbare versie wilt hebben of de broncode. Het pakket is eenvoudig op het Internet te vinden (zie ook de referenties aan het eind van dit artikel). De uitvoerbare versie werkt probleemloos op kernels vanaf versie 2.0 en is gebaseerd op ELF. We beschrijven hier hoe de uitvoerbare versie geïnstalleerd moet worden. Het is aan te bevelen om de distributie van een bekende site te halen om problemen met virussen, Trojaanse paarden, beveiliging enzovoorts te voorkomen.
Zet het bestand cmu-snmp-linux-3.2-bin.tar.gz in de root -directory (/) van je systeem en pak het uit middels:
$ gunzip cmu- snmp-linux-3.2-bin.tar.gztar de distributie vervolgens naar z'n juiste plek met:
$ tar xvf cmu- snmp-linux-3.2-bin.tarAlles is nu naar behoren geïnstalleerd op je systeem, met uitzondering van het SNMP-agent- configuratiebestand /etc/snmpd.conf. Dit kun je aanmaken middels het script /tmp/cmu-snmp-linux-3.2/etc/installconf met de volgende opties:
$ /tmp/cmu-snmp-linux-3.2/etc/installconf -mini <wachtwoord>waarbij het wachtwoord slaat op het openbare wachtwoord dat je wilt gaan gebruiken. Je kunt nu het nieuw aangemaakte configuratiebestand /etc/snmpd.conf gaan wijzigen. Hierin kun je de UDP-poorten wijzigen die de agent gebruikt, de variabelen systemContact, systemLocation en systemName alsmede de snelheid van je netwerkkoppeling en PPP-poorten.
De belangrijkste hulpmiddelen die je dan hebt zijn:
CMU-SNMP installeert ook een MIB-bestand in /usr/lib/mib.txt. Deze kan prima worden gebruikt om na te gaan welke informatie we van een apparaat op kunnen vragen.
De agent moet tijdens opstarten worden geactiveerd en dat kan met de volgende regel in een van de opstartbestanden (bijvoorbeeld /etc/rc.d/rc.local):
/usr/sbin/snmpd -f; echo 'starting snmpd'Als de SNMP-agent eenmaal is opgestart kun je hem als volgt testen met de beheerdershulpmiddelen:
$ /usr/bin/snmpget -v 1 localhost public interfaces.ifNumber.0geeft het aantal geconfigureerde koppelingen op het systeem.
$ /usr/bin/snmpwalk -v 1 localhost public systemvervolgens, geeft alle waarden in de sub-boom van de MIB (zie afbeelding 2 voor de uitvoer van dit commando).
dragon:~$ /usr/bin/snmpwalk usage: snmpwalk [-p <port>] host community [object-id] dragon:~$ /usr/bin/snmpwalk localhost public system system.sysDescr.0 = "Linux version 2.0.24 (root@dragon) (gcc version 2.7.2) #6 Mon Nov 25 15:08:40 MET 1996" system.sysObjectID.0 = OID: enterprises.tubs.ibr.linuxMIB system.sysUpTime.0 = Timeticks: (39748002) 4 days, 14:24:40 system.sysContact.0 = "David Guerrero" system.sysName.0 = "dragon " system.sysLocation.0 = "Madrid (SPAIN)" system.sysServices.0 = 72 system.sysORLastChange.0 = Timeticks: (39748006) 4 days, 14:24:40 system.sysORTable.sysOREntry.sysORID.1 = OID: enterprises.tubs.ibr.linuxMIB.linuxAgents.1 system.sysORTable.sysOREntry.sysORDescr.1 = "LINUX agent" system.sysORTable.sysOREntry.sysORUpTime.1 = Timeticks: (39748007) 4 days, 14:24:40 dragon:~$ |
De volgende hulpbestanden zijn hierbij van belang:
Verder is er ook een Perl-uitbreiding die eenvoudig de CMU C-koppeling aan kan spreken in Perl -scripts.
MRTG gebruikt een implementatie van SNMP die geheel geschreven is in Perl zodat er geen andere pakketten hoeven te worden geïnstalleerd. Het hoofdprogramma is geschreven in C om het loggen en weergeven in GIF te versnellen. Het grafische gedeelte wordt afgehandeld met behulp van de GD-bibliotheek van Thomas Boutell, auteur van de WWW FAQ.
De kracht van MRTG is zijn uitbreidbaarheid en krachtige configuratiemogelijkheden. Het is heel eenvoudig om andere dan verkeer-gerelateerde variabelen te bekijken zoals onder andere foutpakketten, systeembelasting en beschikbaarheid van modems. Het is zelfs mogelijk om gegevens van een andere bron in te voeren zodat je ook niet aan SNMP gerelateerde gegevens (zoals login-sessies) kunt bekijken.
MRTG heeft een aantal hulpmiddelen om routerkoppelingen op te vragen en op basis hiervan een configuratiebestand te genereren dat je eenvoudig kunt aanpassen aan je eigen behoeften.
Een andere interessante eigenschap van MRTG is de hoeveelheid informatie die het genereert. Voor iedere interface zijn er vier mogelijke weergavemogelijkheden: de afgelopen 24 uur, de afgelopen week, de afgelopen maand en een jaaroverzicht. Hierdoor ontstaat de mogelijkheid gegevens te verzamelen voor statistische doeleinden. Er wordt een accumulerende database bijgehouden; de gegevens die hierin worden opgeslagen worden regelmatig geconsolideerd om te voorkomen dat er te veel schijfruimte in beslag wordt genomen.
Er kan ook een overzicht worden gegenereerd met GIF-afbeeldingen die een dagelijkse samenvatting bieden van iedere routerkoppeling, zodat in één oogopslag kan worden nagegaan hoe een router ervoor staat. Zie afbeeldingen 3 en 4 voor een voorbeeld van een MRTG-overzicht en een detailoverzicht .
Afbeelding 3. Overzichtspagina koppeling | Afbeelding 4. Detailpagina koppeling |
---|---|
Klik op de figuren om het beeld te vergroten. |
Je moet eerst de grafische bibliotheek GD installeren voordat je MRTG kunt installeren (zie de referenties). De huidige versie hiervan is 1.2 en deze zou probleemloos moeten installeren. Voer het commando make uit in de directory waar je de distributie hebt uitgepakt en als resultaat heb je dan het bestand libgd.a. Kopieer dit bestand naar /usr/local/lib en de .h-bestanden naar /usr/local/include/gd.
Daarmee is GD geïnstalleerd en klaar voor gebruik. Het is nu tijd voor het bouwen van MRTG. Pak de distributie uit en wijzig de bijbehorende ../../common/January1998/Makefile om aan te geven waar de GD-bibliotheek en de .h -bestanden zijn te vinden. Geef ook aan waar Perl 5.003 te vinden is (meestal in /usr/bin/perl of /usr/local/bin/perl). Dit gaat allemaal via de variabelen GD_LIB, GD_INCLUDE en PERL.
Bouw het hoofdprogramma met het commando
Kopieer de volgende bestanden naar de uiteindelijke bestemming voor de programma's (zoals /usr/local/mrtg): BER.pm, SNMP_session.pm, mrtg en rateup. Hier kunnen ook de configuratieprogramma's indexmaker en cfgmaker worden neergezet.
Vergewis je ervan dat het execution bit aan staat voor alle programma's. We zijn nu klaar voor het maken van een eenvoudig configuratiebestand. Op dit moment moet je leesrechten hebben op je SNMP-router. In een Cisco-router ziet dat er als volgt uit:
access-list 99 permit 193.147.0.8Hiermee geef je leesrechten aan de adressen die genoemd staan in toegangslijst 99 met "public" als wachtwoord (community). Als je wilt dat ieder apparaat in het netwerk leesrechten krijgt dan geef je het volgende:
access-list 99 permit 193.147.0.9
access-list 99 permit 193.147.0.130
snmp-server community public RO 99
snmp-server community public ROAls je een ander merk router hebt ga dan na in de handleiding hoe je SNMP-toegang kunt verlenen.
Het cfgmaker-script maakt het aanmaken van een configuratiebestand erg eenvoudig. Het enige wat je hoeft te doen is het aan te roepen met de volgende argumenten:
cfgmaker <community>@<router-host-name or IP>Bijvoorbeeld:
cfgmaker public@mec-router.rediris.es > mrtg.cfgHet zal iedere koppeling in je router achterhalen en een sectie in het bestand zetten met daarin details zoals het aantal koppelingen, maximumsnelheid, beschrijving etc. met daarbij wat HTML-tags voor representatie in je detailoverzicht. Het is overigens mogelijk om deze HTML-opmaak te wijzigen naar eigen smaak, taal enzovoorts. Zie afbeelding 5 voor een voorbeeld van de uitvoer voor een van mijn routers.
$ ./mrtg mrtg.cfgAls alles goed gaat zal het programma contact zoeken met je router, wat waarden opvragen en wat log- bestanden en GIF-plaatjes aanmaken in je huidige directory. Maak je geen zorgen over eventueel geklaag dat er een aantal bestanden niet gevonden kan worden, dit gebeurt alleen de eerste keer. Verwijder de grafieken en start het programma opnieuw. De grafiek zal het verkeer laten zien sinds de laatste keer dat je het programma hebt gestart. Het zal ook HTML-pagina's maken voor iedere koppeling.
Het wordt nu tijd om MRTG behoorlijk met je systeem te integreren. Maak allereerst een directory aan in de Document Root van je webserver (aangenomen dat je een webserver draait op dat systeem) voor de plaatsing van pagina's en grafieken die MRTG aanmaakt. Voeg het pad van deze directory toe aan het begin van je configuratiebestand met de instructie Workdir: /usr/local/web/mrtg (even aangenomen dat je Document Root in /usr/local/web staat). De volgende keer dat je MRTG opstart zal het logbestanden en grafieken aanmaken in deze directory, waarna je ze kunt bewonderen via http://jouw_systeem.domain/mrtg.
Nu wil je graag een hoofdpagina hebben voor alle koppelingen zoals weergegeven in afbeelding 3. Dit kan worden gedaan met het hulpmiddel indexmaker.
indexmaker mrtg.cfg <router-name regexp> > /usr/local/web/mrtg/index.htmlHiermee wordt een HTML-pagina aangemaakt met de dagelijkse grafieken van de koppelingen op de routers die zijn gevonden met de opgegeven reguliere expressie. Tevens zal deze links bevatten naar de detailoverzichten.
Zoals je zult begrijpen zal MRTG regelmatig moeten worden opgestart om data te kunnen opvragen van het afgelopen interval om de grafieken te kunnen aanmaken zodat de real time-illusie kan worden gehandhaafd. Dit kun je realiseren door de volgende regel in crontab aan te brengen (aangenomen dat het programma nu op zijn definitieve plaats in /usr/local/mrtg-bin/mrtg staat):
0,5,10,15,20,25,30,35,40,45,50,55 * * * * \In een RedHat-distributie zou het volgende in /etc/crontab moeten staan:
/usr/local/mrtg-bin/mrtg \
/usr/local/mrtg-bin/mrtg.cfg > \
/dev/null 2>&1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * root \Als alles nu naar behoren werkt kun je gaan experimenteren met de configuratie en de HTML-index-pagina. Een goede verbetering is het aanbrengen van een <META>-tag in de <HEAD>-sectie om de browser te dwingen de pagina iedere 300 seconden te verversen met de laatste gegevens.
/usr/local/mrtg-bin/mrtg \
/usr/local/mrtg-bin/mrtg.cfg > \
/dev/null 2>
Een andere mogelijke verbetering is het aanbrengen van het commando WriteExpire. Dit commando dwingt MRTG tot het aanmaken van .meta-bestanden voor HTML en GIF, waarmee onnodig cachen door proxy-servers en browsers wordt voorkomen. Om dit te laten werken moet je ook nog je Apache-server configureren (aangenomen dat je de Apache-server gebruikt) zodat deze de .meta-bestanden leest en de juiste "Expire"-headers verstuurt met het commando MetaDir in het XXXX-bestand.
Je kunt ook een kijkje nemen in het meegeleverde voorbeeldconfiguratiebestand voor andere mogelijke commando's; het is goed gedocumenteerd. Het is mogelijk de opmaak van alle plaatjes en pagina's die MRTG aanmaakt te veranderen.
Ik hoop dat je plezier hebt van het programma. Als dat zo is, stuur de makers dan een ansicht, hun adres staat op de MRTG-thuispagina.
Er is nog een andere categorie software die een stap verder gaat met de netwerkbeheertaken en een complete oplossing biedt voor zowel het in de gaten houden van het netwerk als het configureren daarvan. Een dergelijke oplossing geeft ons de mogelijkheid om complete grafische schema's op te zetten van hele netwerken waarbij we alle elementen hieruit kunnen afgrazen, bepaalde configuraties kunnen controleren en meer interessante mogelijkheden.
Op dit niveau kunnen we het hebben over twee veelgebruikte commerciële pakketten, HP-OpenView van Hewlett-Packard en SunNet Manager van Sun. Deze leveren een compleet platform voor het beheer van alle apparatuur in een netwerk met prachtige grafische koppelingen. Meegeleverd worden hulpmiddelen om automatisch de configuratie van een (SNMP-)netwerk te achterhalen en databases voor het opslaan van alle opgehaalde informatie voor statistische doeleinden. Een belangrijke eigenschap van deze pakketten is de mogelijkheid om te integreren met fabrikantspecifieke software zoals Cisco's CiscoWorks, die een netwerkbeheerder in staat stelt om een database bij te houden met alle routerconfiguraties en zelfs de mogelijkheid biedt om grafisch de back panels van routers met hun connecties in de gaten te houden.
Er kleven twee nadelen aan deze producten: ze zijn alleen commercieel te verkrijgen en draaien niet op Linux. Er zijn natuurlijk ook oplossingen te verkrijgen in de Public Domain. Een van de beste producten die ik daarvoor tot nu toe gevonden heb is Scotty. Scotty is een op TCL gebaseerd pakket dat je in staat stelt om specifiek op jouw omgeving gerichte netwerkbeheer-software te ontwikkelen met gebruik van een abstracte, op strings gebaseerde koppeling (API). Het bijgeleverde pakket Tkined is een netwerk-editor die je in staat stelt een compleet raamwerk te bouwen met daarin mogelijkheden als het ontdekken van IP-netwerken, ondersteuning voor het ontwerpen van het netwerk of het zoeken naar fouten in een netwerk met behulp van SNMP en in combinatie met andere standaard-hulpmiddelen (traceroute). Scotty heeft ook nog een grafische MIB-browser die je in staat stelt MIB-informatie te onderzoeken.
Je kunt de referenties aan het eind van dit artikel bekijken voor een opgave van commerciële en publiekelijk te verkrijgen software voor netwerkbeheer.
In dit artikel zijn we ingegaan op een aantal producten die op het Net kunnen worden gevonden. Er worden iedere dag nieuwe hulpmiddelen gemaakt. Je kunt de nieuwsgroep comp.protocols.snmp volgen om op de hoogte te blijven van de laatste ontwikkelingen.
CMU-SNMP voor Linux:ftp://sunsite.unc.edu/pub/Linux/system/network/admin/cmu-snmp-linux-3.2-bin.tar.gzPERL 5-uitbreidingsmodule voor CMU-SNMP: ftp://ftp.wellfleet.com/netman/snmp/perl5/SNMP.tar.gzMulti Router Traffic Grapher (MRTG): http://www.ee.ethz.ch/~oetiker/webtools/mrtg/mrtg.htmlGD Grafische bibliotheek: (nodig voor MRTG) http://www.boutell.com/gd/Perl 5.003: (nodig voor MRTG) http://www.perl.com/perl/info/software.htmlMRTG-mailinglists: Router Stats: http://www.scn.de/~iain/router-stats/SNMP Netwerk Management Software: http://wwwsnmp.cs.utwente.nl/software/Scotty: http://wwwsnmp.cs.utwente.nl/~schoenw/scotty/Scotty voor Linux: ftp://sunsite.unc.edu/pub/Linux/system/network/admin/tkined-1.3.4+scotty-ELF.tar.gz |