Obsah
Čo je SNMP?
Simple network management protokol(SNMP) je protokol definovaný na aplikačnej vrstve OSI/ISO modelu určený primárne pre správu a monitoring zariadení pripojených do IP sietí. Okrem zbierania údajov o bežiacich systémoch a službách taktiež umožnuje prenos požiadaviek na zmenu v konfiguráci zvolených zariadení. SNMP komunikačný protokol rozdeluje zariadenia na monitorované a monitorujúce. V terminológií protokolu ich označujeme následovne:
Management Information Base (MIB)
Všetky údaje sprístupnené agentom sú vo forme premenných organizovaných v hierarchickej(stromovej) databáze Management Information Base(MIB). MIB databázu môžme adresovať pomocou Object Identifier (OID) v numerickej alebo textovej podobe (preložením pomocou programu snmptranslate).
Napríklad objekt sysLocation
má OID 1.3.6.1.2.1.1.6. Prislúchajúci symbolický tvar s kompletným listom MIB objektov po preložení pomocou snmptranslate:
$ snmptranslate -Of 1.3.6.1.2.1.1.6
.iso.org.dod.internet.mgmt.mib-2.system.sysLocation
- 1 ISO
- 1.3 ORG
- 1.3.6 Department of Defense
- 1.3.6.1 Internet
- 1.3.6.1.2 IETF Management
- 1.3.6.1.2.1 SNMP MIB-2
- 1.3.6.1.2.1.1 System
- 1.3.6.1.2.1.1.6 sysLocation
Každý objekt organizovaný v MIB je definovaný pomocou podmnožiny Abstract Syntax Notation One nazývanej Structure of Management Information Version 2 (SMIv2)(RFC 2578)
Ukážka definície objektu
sysLocation
:
$ snmptranslate -Td 1.3.6.1.2.1.1.6
SNMPv2-MIB::sysLocation
sysLocation OBJECT-TYPE
-- FROM SNMPv2-MIB
-- TEXTUAL CONVENTION DisplayString
SYNTAX OCTET STRING (0..255)
DISPLAY-HINT "255a"
MAX-ACCESS read-write
STATUS current
DESCRIPTION "The physical location of this node (e.g., 'telephone
closet, 3rd floor'). If the location is unknown, the
value is the zero-length string."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 6 }
Každý objekt v strome MIB je mennou autoritou pre svojich priamych potomkov, tj. je zodpovedný za pridelovanie unikátnych id-čiek. Nepriamy potomkovia spadajú do pôsobnosti svojich priamych rodičov pre efektívnejšie členenie a správu menného priestoru.
Autentizácia
- SNMPv1 - Umožnuje autentizáciu len pomocou community stringu, ktorý sa v dotazoch prenáša v plain texte
- SNMPv2 - Oproti SNMPv1 priniesla nový systém zabezpečenie, ktorý bol veľmi komplikovaný a nikdy nebol prijatý
- SNMPv2c - SNMPv2 s tým, že sa stále používa community string pre autentizáciu
- SNMPv3 - poskytuje autentizáciu(HMAC) a šifrovanie(AES) (obe sú voliteľné). Okrem zabezpečenia komunikácie poskytuje User Based Security Model(USM) a View-Based Access Control Model(VACM). USM umožňuje nastavenie bezpečnostných parametrov pre užívateľa, napr.: úroveň zabezpečenia, autentizačné a šifrovacie algoritmy a kľúče. VACM umožnuje definovať kolekcie dát(views) a skupín, ktoré majú právo čítania a zápisu. Výhodou je tiež možnosť vzdialenej konfigurácie cez SET requesty(RFC 3584 a RFC 3411 až 3415)
SNMP metódy / Typy PDU
- GET - Dotaz managera na jednu alebo viacero hodnôt premenných agenta
- SET - Požiadavka managera na zmenu jednej alebo viacerých zapisovateľných premenných na agentovi
- GETNEXT - Dotaz umožňujúci získať informáciu o dostupných premenných. Pri opakovaných dotazoch vráti vždy lexikograficky následujúcu premennú v MIB.
- GETBULK - Optimalizovaná verzia GETNEXT dotazu uvedená až v SNMPv2. Umožňuje špecifikovať koľko iterácií GETNEXT sa má vykonať. Všetky páry premenných a hodnôt sú vrátené vrámci jedného Response.
- RESPONSE - Odpoveď agenta managerovi na GET, SET, GETNEXT, GETBULK a INFORM. Každý response je potvrdením prijatia dotazu a obsahuje vyžiadané dáta(variable bindings)
- TRAP - Asynchrónna notifikácia agenta určená pre managera. Obvykle sa odosiela ako reakcia na nejakú udalosť(linkUp, linkDown, authenticationFailure, coldStart...)
- INFORM - Asynchrónne notifikácie určené pre vzájomnú komunikáciu managerov. Oproti TRAP notifikáciám vyžaduje explicitné potvrdzovanie
SNMP balíky
SNMP balík pre Archlinux, Fedora, Ubuntu: net-snmp
U Fedory prípadne net-snmp-utils
pre snmpget a snmpwalkObsah balíku net-snmp
(Archlinux):
Daemoni
- snmpd - SNMP agent daemon
- snmptrapd - SNMP manager daemon
Správa a konfigurácia
- snmptranslate - preklad číselných OID na mená a naopak
- snmpconf - vytváranie a modifikácia SNMP konfiguračných súborov
- snmpvacm - vytváranie a správa SNMPv3 View-Based Access Control záznamov
- snmpusm - vytváranie a správa SNMPv3 užívateľov
- snmpps/snmptop - zobrazenie tabulky procesov na entite pripojenej k sieti
- snmpnetstat - zobrazenie stavu siete a konfigurácie entity pomocou SNMP
- snmpdf - zobrazenie použitého miesta na disku u monitorovanej entity
- snmptable - zobrazenie SNMP tabulky
- snmpdelta - monitorovanie delta rozdielov v SNMP počítadlách
- tkmib - grafický prehliadač MIB
- mib2c - preklad MIB štruktúry do kódu v C
- snmp-bridge-mib - poskytnutie informácí o zvolenom bridge cez SNMP
- net-snmp-create-v3-user - vytvorenie SNMPv3 používateľa
Odosielanie dotazov
- snmpset - komunikácia s monitorovanou entitou pomocou SNMP SET dotazov
- snmptrap/snmpinform - umožnuje odoslať SNMP notifikáciu managerovi
- snmpgetnext - komunikácia s monitorovanou entitou pomocou SNMP GETNEXT dotazov
- snmpwalk - umožnuje získať podstrom premenných pomocou SNMP GETNEXT dotazov
- snmpbulkwalk - získanie podstromu objektov pomocou SNMP GETBULK dotazov
- snmpbulkget - komunikácia s monitorovanou entitou pomocou SNMP GETBULK dotazov
- snmpget - komunikácia s monitorovanou entitou pomocou SNMP GET dotazov
- snmptest - interaktívna komunikácia s entitou pomocou SNMP dotazov
Iné nástroje
- MRTG(Multi Router Traffic Grapher) - grafový nástroj používajúci SNMP určený k meraniu záťaže na jednotlivých linkách. Generuje HTML stránky s PNG obrázkami zobrazujúcimi aký objem dát prešiel cez každé rozhranie.
- RRD(Round Robin Database Tool) - opensource nástroj, ktorý sa zameriava na spracovanie a ukladanie časovo závislých dát. Využíva pritom round-robin databázu, ktorá má konštantnú veľkosť v čase. Okrem toho ponúka nástroje na získanie dát v grafickej podobe. Oproti MRTG sa jedná o komplexné programovacie prostredie pre archiváciu a grafovanie dát. Chýba mu ale SNMP modul pre získanie dát zo siete. Ako frontend sa dá použiť Cacti alebo Torrus
- SmokePing - Umožnuje v pravidelných intervaloch merať latenciu a rozptyl latencie zoznamu serverov pomocou ICMP echo dotazov. Všetky dáta sa pritom ukladajú do databázy pomocou RRDToolu. Následne je možné na základe zozbieraných dát generovať štatistické grafy. Smokeping sa skladá z dvoch častí. Z daemonu, ktorý v pozadí zbiera dáta a z interaktívneho webového rozhrania zobrazujúceho grafy.
- arpwatch - opensource software určený pre monitorovanie ARP trafficu v počítačovej sieti. Generuje log párovaní IP a MAC adries, spolu s časovými známkami kedy sa párovanie objavilo.
- ndpmon - diagnostický software určený pre monitorovanie ICMPv6 packetov v IPv6 sietiach. Pomocou monitorovania siete je možné zistiť anomálie v správach Neighbour Discovery Protocolu, najmä u SLAAC. Každá objavená anomália sa zaznamenáva do logu a je tiež možné notifikovať administrátora, prípadne vykonať nejaký script.
- Nagios - Open source nástroj pre monitorovanie zariadení a sieťových služieb ako napr. HTTP, FTP, SSH, SMTP, SNMP, POP3. Umožnuje zber dát pomocou pluginov a ich zobrazenie vo webovom rozhraní.
Konfigurácia SNMP
Konfiguračné súbory sa nachádzajú v priečinkoch /etc/snmp/{snmpd.conf, snmptrapd.conf}
a /var/net-snmp/{snmpd.conf, snmptrapd.conf}
. Pri spustení agenta alebo managera sa čítajú v poradí stanovenom v man 5 snmp_config
. Validné konfiguračné možnosti sa dá zistiť pomocou snmpd -H
pre agenta a podobne pre managera. Základná konfigurácia SNMPv3 s autentizáciou sa dá spraviť ručne modifikovaním konfiguračných súborov alebo interaktívne, napríklad cez snmpconf -g basic_setup
.
Základná konfigurácia net-snmp agenta prevzatá z
ArchWiki a upravená podľa
Red Hat dokumentácie:
mkdir /etc/snmp/
cat >> /etc/snmp/snmpd.conf << EOF
rouser read_only_user auth .1
rocommunity public 127.0.0.1 .1.3.6.1.2.1.1
syslocation A217
syscontact UNIX Admin admin@example.com
EOF
mkdir -p /var/net-snmp/
echo createUser read_only_user SHA password1 AES password2 > /var/net-snmp/snmpd.conf
# Prípadne v jedno kroku pomocou: net-snmp-create-v3-user -ro -A password1 -a SHA-512 -X password2 -x AES-128 read_only_user
# Konfigurácia iptables
iptables -I INPUT -p udp --dport 161 -j ACCEPT
ip6tables -I INPUT -p udp --dport 161 -j ACCEPT
# Start snmp agent
systemctl start snmpd
Literatura