Sledovanie siete (SNMP, MRTG, Nagios, TKinetd, Scotty)

Marek Bokes, xbokes@fi.muni.cz


Obsah


Sledovanie siete

Monitoring siete - okrem analýzy a reaktívneho, resp. proaktívneho riadenia - partí do všeobecných princípov správy siete. Myšlienka k tomuto pochádza zo začiatku 80. rokov, vznikla na základe prvých, skutočne vážnych prípadov problémov so sieťou: napr. zrútenie siete ARPANET (1980, RFC 789), sieťový "červ" (1988).
Čo je vhodné sledovať? Základné prvky (sieťové rozhrania, sieťové prvky /servery, smerovače, prepínače/, fyzické spoje), celkovú prevádzku (slabé miesta), smerovacie informácie, dodržovanie SLA (Service Level Agreement), neregulárne správanie (napr. útok).

SNMP

SNMP (RFC 2570) - Simple Network Management Protokol - je jeden zo štandardov pre správu siete. Jeho ekvivalent je CMISE/CMIP (Common Management Service Element/Common Management Information Protokol). SNMP sa stal najrozšírenejší. V začiatkoch bol vytvorený SGMP (Simple Gateway Monitoring Protokol, RFC 1028), neskôr SNMPv1 (1993) až k aktuálnemu SNMPv3 (1999).

SNMP-Architektúra

Protokol SNMP slúži na komunikáciu medzi dvoma základnými entitami:
- správca (riadiaci element),
- spravované (riadené) zariadenie.
Správca je typicky aplikácia (plus človek), často centralizovaná. Vystupuje ako klient. Nazýva sa Manažer.
Spravovaná entita je realizovaná ako funkcionalita SW na spravovanom uzle (napr. na smerovači, manažovateľnom prepínači), resp. ako samostatný proces na komplexnejšom HW, napr. počítači (v klasickom zmysle - stanici, serveri a pod.). Vystupuje ako server a nazývame ho Agent. Jeho úlohou je zhromaždovať dáta relevantné k behu danného systému špecifikovaných podľa SMI do dátových štruktúr MIB.
Samotný protokol - realizovaný na aplikačnej vrstve - prenáša dáta pomocou UDP datagramov. SNMP bol navrhovaný s myšlienkou, aby skoro vôbec nenarušil, resp. neobmedzil regulárnu premávku na sieti. Aj z tohoto dôvodu je jednoduchý: náhľad do command-setu: GetRequest (GetNextRequest), SetRequest na strane klienta, prípadná odpoveď serveru(agenta) je via Response. Špeciálna záležitosť je nastavenie tzv. trap - na nastavenú veličinu zareaguje server poslaným informácie a o jej výskyte.
Bežná komunikácia beží cez port 161, trap je posielaný na port 162.

SNMP-Bezpečnosť

Bezpečnosť, aspoň u SNMPv1, resp. SNMPv2, bola na velmi nízkej úrovni. Zahrnuté bol len autorizovanie na úrovni znalosti názvu tokenu prístupovej skupiny (community name). Tento názov sa prenášal sieťou len ako plain text. Max. ochrana bola voľba skutočne exotických názvov community. SNMPv3 pridáva nielen autentizáciu, ale prenos bezpečnostných údajov môže byť kryptovaný, podpora DES, AES. Okrem základného SM (Security Model) je implementovaný aj usm (User SM), resp. existuje (ale nie je zatial všeobecne implementovaný v agentoch) aj ksm (Kerberos SM).
Pozn. verejne prístupné dáta sú z pravidla pod community name 'public'.

SNMP-SMI

SMI - Structure of Management Information - je jazyk pre definíciu manažovaných dát. Obsahuje dátové typy, objektový model, resp. pravidlá pre manipuláciu s dátami. Je definovaný v RFC 2578, 2579, 2580. Vychádza z ASN.1 (Abstract Syntax Notation One, ISO 1987, ISO X.680 19980). Obsahuje 11 základných dátových typov (INTEGER, Integer32, IPaddress, Counter32, OBJECT IDENTIFIER, ...). Podporuje možnosť vytvárať komplexnejšie dátové typy - tabuľky - pomocou konštroru SEQUENCE OF. Existuje už zhruba desať tisíc nadefinovaných objektov. Príklad definície objektu:
ipForwarding OBJECT-TYPE
    SYNTAX      INTEGER {
                    forwarding(1),    -- acting as a router
                    notForwarding(2)  -- NOT acting as a router
                }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
            "The indication of whether this entity is acting as an IP
            router in respect to the forwarding of datagrams received
            by, but not addressed to, this entity.  IP routers forward
            datagrams.  IP hosts do not (except those source-routed via
            the host)."
    ::= { ip 1 } 

SNMP-OID

OID - Object ID (Identifier) je názov objektu (veličiny), ku ktorému pristupujeme pomocou SNMP. Je číselne reprezentovaný. K objektu sa dá pristupovať aj podľa jeho reťazcového názvu.

SNMP-MIB

MIB - Management Information Base - je aktivita ISO (inernational organization of Standards). Organizuje objektu definované podľa SMI do stromovej hierarchie. Prístup je možný zreťazením OID, resp. reťazcových názvov, postupne od koreňa MIB stromu. Separáror objektov, resp. subobjektov je '.' (tečka). Napr.: .1.3.6.1.2.1.1 je to isté ako iso.org.dod.internet.mgmt.mib-2.system. Cesta je daná jednoznačne. Dáta sú uložené v listoch stromu. Novšia varianta MIB, definovaná v RFC 2400, prefix .1.3.6.1.2.1. obsahujúca štandardné moduly (1-system, 2-interface, 4-ip, 7-udp, 11-snmp) je známa tiež ako MIB-2. Obvykle sú atribúty typu integer, resp. string, ale často figurujú i veličiny typu counter32(64), či zložený typ (tabuľka). Ukážka časti MIB stromu:
 
           .
           |
   --------|----------------------
   |       |       |             |
ccitt(0)  iso(1)  itu(2)  joint-iso-ccitt(3)
           |
           |---------------|
                           |
                          org(3)
                           |
                          dod(6)
                           |
                          internet(1)
                           |
                          mgmt(2)
                           |
                          mib-2(1)
                           |
   ------------------------|-----------------------
   |           |           |      |       |       |
system(1)  interfaces(2)  ip(4)  icmp(5)  tcp(6)  udp(7)

SNMP-Software

Ak chceme na stroji používať SNMP, potrebujeme SW Agenta (serveru) a manažovacie (dotazovacie) nástroje. Potrebujeme balík snmp-daemona, resp. utilít pre komunikáciu. Veľmi je rozšírená implementácia SNMP pod projektom Net-SNMP(povodne UCD-SNMP). Aktuálna verzia je 5.1.1, spoľahlivo funguje i 5.0.9. Existuju klony pre rôzne OS. Nie je výnimkou, ze sú prítomné ako bin. balíčky v známych distribúciách linuxu. Zdrojový kód je dostupný na
http://net-snmp.sourceforge.net/download/, bin. balíčky napr. na ftp://ftp.fi.muni.cz/pub/linux/ (net-snmp-perl-5.*.i386.rpm, net-snmp-utils-5.*.i386.rpm)

SNMP-Inštalácia

Základná konfigurácia pred kompiláciou môže byť spustená bez explicitných parametrov. Ku koncu precesu však bude úžívateľ bude dotázaný na chýbajúce infiormácie. Následujúce parametre (príšlušne modifikované) je vhodné zadať. Teda konfigurácia pre kompiláciou:
# ./configure --with-default-snmp-version="3" --with-sys-contact="xbokes@fi.muni.cz" --with-sys-location="lab.fi.muni.cz" --with-logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp"

Po úspešnej konfigurácii
---------------------------------------------------------
            Net-SNMP configuration summary:
---------------------------------------------------------

  Net-SNMP Version:           5.1.1
  Building for:               linux
  Network transport support:  Callback Unix TCP UDP
  SNMPv3 Security Modules:    usm
  Agent MIB code:             mibII ucd_snmp snmpv3mibs notification target agent_mibs agentx agent_mibs utilities host
  SNMP Perl modules:          disabled
  Embedded perl support:      disabled
  Authentication support:     MD5 SHA1
  Encryption support:         DES AES128 AES192 AES256

---------------------------------------------------------
Pokusy so zahrnutím SMNP perl modulov, resp. zabudovanísm perl-u boli po variaciách pokusov negatívne. Perl moduly je nutné konfigurovať a kompilovať samostatne (podadresár Perl). Pozn.: konciguracia sa spúšťa perl ./Makefile.pl. Uplny a korektny popis je v INSTALL subore.
Zvyšok kompilácie už klasicky:
# make && make test
# su
# make install

SNMP-Daemon (agent)

Teraz máme na stroji prítomného agenta. Konfiguračný sobor leží v /etc/snmp/snmpd.conf, niektoré distribúcie (alebo staršie verzie) /etc/snmp/snmpd.local.conf. Manuálové stránky sú prístupné
tu. Konfigurácia riadenia prístupu - direktívy: com2sec, group, view a access.
#    1) priradenie community k security
#       sec.name       source        community
com2sec notConfigUser  default       public
com2sec labUser        10.0.0.01/16  lab
com2sec anyAgaue       10.0.20.1/8   agaue

#    2) priradenie security skupine
#       groupName      securityModel securityName
group   notConfigGroup v1            notConfigUser
group   labGroup       v2c           labUser
group   AgaueGroup     v2c           anyAgaue

#    3) priradenie views (neskôr k nim skupiny budú mať priradený prístup)
#       name           incl/excl     subtree         mask(optional)
view    systemview     included       .1.3.6.1.2.1.1
view    mib2           included       .iso.org.dod.internet.mgmt.mib-2
view    all            included       .1
 
#    4) priradenie práv prístupu skupine
#       group          context sec.model sec.level prefix read       write  notif
access  notConfigGroup ""      any       noauth    exact  systemview none   none
access  labGroup       ""      any       noauth    exact  mib2       none   none
access  AgaueGroup     ""      2c        noauth    exact  all        all    none

SNMPd spustíme klasicky # /etc/rc.d/init.d/snmpd start, resp. # service snmpd start
Prvý test a vhodná odozva:
# snmpwalk -v 2c agaue-beta -c public system
SNMPv2-MIB::sysDescr.0 = STRING: Linux agaue-beta 2.6.3 #7 Tue Mar 16 23:34:30 CET 2004 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
SNMPv2-MIB::sysUpTime.0 = Timeticks: (137416) 0:22:54.16
SNMPv2-MIB::sysContact.0 = STRING: Marek Bokes <xbokes@fi.muni.cz>
SNMPv2-MIB::sysName.0 = STRING: agaue-beta
SNMPv2-MIB::sysLocation.0 = STRING: lab.fi.muni.cz
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORID.1 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.2 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.3 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.4 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.5 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.6 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.7 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.8 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.9 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB module to describe generic objects for network interface sub-layers
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.7 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.8 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.9 = STRING: The management information definitions for the SNMP User-based Security Model.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (2) 0:00:00.02
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (3) 0:00:00.03

SNMP-Utilities (Manažérska strana)

Nástroje na komunikáciu z terminálu, resp. zo scriptu su príkazy s prefixom 'snmp'. Napr. snmptrap, snmpwalk, snmpget, analogicky snmpset, snmpstatus, snmpbulk[get|walk], snmpusm, ... Napr.: snmpwalk slúži na hromadné prechádzanie atribútov MIB stromu, snmpget posiela požiadavku pre jeden atribút.

MRTG

Multi Router Traffic Grapher je nástroj vytvárajúci grafické priebehy poskytnutých veličín. Výstup je do súborov vo formáte gif, resp. kôli patentom neskôr už len png. Uchováva si zozbierané hodnoty a poskytuje graf aj s pohladom hlbšie do histrórie. Zobrazuje takmer akúkoľvek dáta, má však scripty pre kom. via snmp. Môže bežať aj ako daemon, ale z pravidla sa spúšta dávkovo cron-on, resp. podobným daemonom. Jediný parameter je cesta ku konfiguračnému súboru (môže teda de facto ležať kdekoľvek. Inštalácia zahŕňa nástroj na automatizované vytvorenie konfiguracneho suboru (standardne v /etc/mrtg/mrtg.cfg)

# cfgmaker --global "WorkDir: /var/www/html/mrtg" --global "Refresh: 300" --ifref=name --output=/etc/mrtg/mrtg.test.cfg public@agaue-beta.lab.fi.muni.cz

Ukážka mrtg.cfg (ručne editované, použitie scriptu na získanie dát)
  WorkDir: /var/www/html/mrtg/
  Options[_]: growright,  gauge
  Colours[_]: LIGHT_BLU#7aafff,BLU#1000ff,DARK BLU#000066,VIOLET#ff00ff,GREEN#00ff00
  Ylegend[_]: % packet loss
  Target[ping]: `/etc/mrtg/scripts/pingloss.sh`
  MaxBytes[ping]:100
  AbsMax[ping]:100
  Title[ping]: Strata paketov [%]
  PageTop[ping]: <H1>Strata paketov [%]</H1>
  
  Target[_eth0]: `/etc/mrtg/scripts/dev_eth0.sh`
  MaxBytes[_eth0]: 12500000
  Title[localhost_eth0]: 
  PageTop[_eth0]: <H1>eth0</H1>

Nagios

Nagios poskytuje monitorovanie siete, ale trochu z iného uhlu. Monitoruje hlavne dostupnosť sieťových služieb (napr. HTTP, PING, SMTP, ...) a zdrojů (procesor load, priestor disku a pod.) sledovaných uzlov. Dokáže posielať správy o stave administrátorom (nielen emailom). Pomocou nadefinovanej hierarchie rozlišuje medzi strojom down a nodostupným. Na príslušné udalosti je možné priradiť abslužné scripty, tým automatizovať reakcie monitorovacieho systému. Výstupy sú dostupné v grafickej podobe vrátane HMTL stránok, kt. ich umožnia zobraziť.

TKinetd/Scotty

Možnosti monitoringu sa opäť rozširujú. V grafickom prostredí je možné sledovať topológiu siete a zariadení, farebne sú rozlíšené rôzne stavy. Systém poskytuje možnosti zasielania správ operátorom, reagovať na udalosti. Zaujímavou funkcionalitou je automatické rozpoznanie topológie (ale čosovo náročné).

Odkazy

Net-SNMP home
MIB depot

MRTG home
Kolik dat tudy teče? (článok na root.cz)

Nagios home
Nagios screenshot

TKined download