Protokol SNMP
Popis
- je jednoduchý (nie nutne na implementáciu)
- široko rozšírený
- štandardizovaný
- súčasť ISO/OSI
- vyvíja ho IETF
- monitoring a správa siete
- nastavovanie a čítanie hodnôt
- zachytávanie udalostí
- pôvodné RFC 1157
| Field | Description |
|---|---|
| IP Header | Identifies source/destination IP addresses and routing information for delivering the SNMP message across networks. |
| UDP Header | Contains source/destination ports (typically UDP/161 for requests, UDP/162 for traps) and length/checksum for SNMP transport. |
| Version | SNMP protocol version used (v1, v2c, v3). |
| Community | Community string used for authentication in SNMP v1/v2c (e.g., “public”, “private”). |
| PDU Type | Indicates SNMP operation (GetRequest, GetNextRequest, GetResponse, SetRequest, Trap, etc.). |
| Request-ID | Unique identifier used to match requests and responses. |
| Error-Status | Indicates success or specific error (e.g., noError, tooBig, noSuchName). |
| Error-Index | Points to the variable binding that caused the error (if any). |
| Variable Bindings | List of OIDs with their corresponding values (null for requests, filled for responses). |
- Prehľad PDU (Protocol Data Unit) od ChatGPT >:O
Network Stack
- UDP
- aplikačná úroveň
- port 161 (prijímanie a odosielanie správ)
- port 162 (prijímanie traps)
- SNMPv3:
- šifrované
- port 10161 (prijímanie a odosiemanie správ)
- port 10162 (prijímanie traps)
Komunikujúce strany:
- Spravované zariadenie
- Agent:
- SW na zariadení
- Switch, Routr, Tlaciaren, Teplomer, AP, PC/Server
- NMS (Network Management Station):
- server
- SW implementujúciu správcovskú časť
- zvyčajne má prístup do MIB DB/MIB súborom
- Môže ísť aj o N to M komunikáciu
- správy zasielajú obe strany
- Agent:
- zasiela traps
- jednostranné, nespolahlivé, asynchrónne
- riešenie: INFORM - očakáva sa odpoveď
- NMS:
- obojsmerná komunikácia
- zisťuje stav
- dáva pokyny na zmenu stavu
Verzie SNMP
| Verzia | Popis |
|---|---|
| SNMPv1 | Pôvodná verzia SNMP so základnými metódami. Bez šifrovania. |
| SNMPv2c | Vylepšená oproti SNMPv1. Zachovává metódy. Bez šifrovania. Vylepšenie protokolových operacií a typu dát. Pridáva metódy GetBulk, INFORM. |
| SNMPv3 | Zavádza bezpečnostné funkcionality, šifrovanie a overovanie. Vylepšenie integrity dát. |
Metódy SNMP
| Názov metódy | CLI nástroj | SNMPv1 | SNMPv2c | SNMPv3 | Popis |
|---|---|---|---|---|---|
| GET | snmpget | ✅ | ✅ | ✅ | získa zoznam presne zadaných objektov |
| GETNEXT | snmpgetnext, snmpwalk | ✅ | ✅ | ✅ | získa ďalší objekt v MIB strome (inorder) |
| GETBULK | snmpgetbulk | ❌ | ✅ | ✅ | podobné GETNEXT, vracia viac nasledujúcich objektov naraz |
| SET | snmpset | ✅ | ✅ | ✅ | pošle konfiguráciu alebo príkaz SNMP agentovi |
| TRAP | snmptrap | ✅ | ✅ | ✅ | jednosmerná asynchrónna správa od agenta smerom k NMS |
| INFORM | snmpinform | ❌ | ✅ | ✅ | skoro ako TRAP, len sa očakáva odpoveď druhej strany |
| RESPONSE | - | ✅ | ✅ | ✅ | odpoveď na všetky ostatné typy správ (okrem: TRAP, REPORT, RESPONSE) |
| REPORT | - | ❌ | ❌ | ✅ | interná správa protokolu, väčšinou komunikačná chyba |
Autentizácia v SNMP
SNMPv1 a SNMPv2c
- zidelaný názov komunity =
heslo(community string) - default býva: public
- zasielané plaintext
- zabezpečený plný prístup (v rámci komunitných práv)
- bezpečnostná hrozba (zmena stavu zariadenia)
- Typy komunity: ro (Read Onlu) | rw (Read Write)
SNMPv3
- zabezpečené
- zmena: community → user
- typy používateľov: ro (Read Only) | rw (Read Write)
- pôvodne SNMPv3/USM (User-based Security Model)
- 3 bezpečnostné úrovne:
- noauth - žiadna autentizácia, ani šifrovanie
- auth - autentizácia (heslo1)
- priv - autentizácia (heslo1), šifrovanie (heslo2)
- Tunelovanie:
- SSH (slabšie podporované)
- TLS (TCP)
- DTLS (UDP)
- Kerberos (Nedokončené)
Strom MIB-2, OIDs
- hierarchická, stromová štruktúra
- MIB (Management Information Base)
- ľudsky čiteľné textové názvy
- oddelené: '::'
- OID (Object Identifier)
- čísla oddelená: '.'
- uložené v:
/usr/share/snmp/mibs - Popisované ASN.1 (Abstract Syntax Notation One)
- (Ukážka: hh3c-8021x-ext.mib)
- strom sa dá zaštepiť podvesením podstromu
- dynamická štruktúra
- POZOR: štruktúra môže niesť časť informácie (MAC adresy na portoch SW)
- môže odkazovať na iný podstrom
snmptranslate -On -IR <MIB>snmptranslate -Td <OID>snmpwalk -v 2c -c public <OID/MIB>-m <MIB># začne prehľadávať od koreňa modulu
Príklad stromu: objekt sysName s OID .1.3.6.1.2.1.1.5:
- iso (1)
- member-body (2)
- us (840)
- ...
- us (840)
- std (1)
- iso8802 (8802)
- ...
- org (3)
- dod (6)
- internet (1)
- mgmt (2)
- mib-2 (1)
- system (1)
- sysName (5)
- system (1)
- mib-2 (1)
- mgmt (2)
- internet (1)
- dod (6)
- member-body (2)
SNMP trap a inform
- trap:
- agent informuje NMS o zmene stavu
- Napríklad: výpadok portu, hraničná teplota, zaplnenie disku…
- push podel
- neočakáva odpoveď
- možná strata správy/trap-u chybovosťou siete
- INFORM:
- obdobné ako trap
- agent očakáva odpoveď
- ak népríde, zašle správu opakovane
Konfigurácia SNMP
- príklad pre net-snmp
- Fedora 42
dnf install net-snmpsystemctl enable --now snmpd
Možnosti
- Interaktívny nástroj
snmpconf - Konfiguračné súbory
Príklad konfigurácie pre SNMPv1/SNMPv2c
agentAddress udp:161,udp6:[::1]:161
# Do not log every TCP connecion
dontLogTCPWrappersConnects yes
sysLocation "rabbit hole"
sysContact "<unix@fi.muni.cz>"
sysName "white-rabbit"
view my_systemview included .1.3.6.1.2.1.1
view my_systemview included .1.3.6.1.2.1.25.1
view my_monitorview included .1.3.6.1.2.1.25
view my_monitorview excluded .1.3.6.1.2.1.25.4.2
# source means accessibility
# community source oid
rocommunity my_ro_community 10.0.0.0/24 -V my_systemview
rwcommunity my_rw_community 10.0.10.0/24 -V my_monitorview
rocommunity my_ro_localhost_system localhost system
#============================================================================================
# More Complex access control
# Maps comunity to security name
# sec.name source community
com2sec my_sec_name localhost my_secret_community
com2sec my_sec_name 10.0.0.0/24 my_secret_community
com2sec6 my_6_sec_name default public
com2sec6 my_6_sec_name fd00:dead:beef::1 my_secret_community
# Maps security name to group
# sec.model sec.name
group my_group any my_sec_name
group my_group v2c my_sec_name
group my_group v1 my_sec_name
# Maps MIBs to views
# incl/excl subtree mask
view my_view excluded .1 ff
view my_view included sysUpTime.0 ff
view my_view included ifNumber ff
# Maps view to groups
# context sec.model sec.level match read write notif
access my_group "" any noauth exact my_view none none
# Runs script and provides output as value
extend mdstat /bin/cat /proc/mdstat
Pre SNMPv3
- namiesto community je username
- heslá vložiť do
/var/net-snmp/snmpd.conf, krorý sa po načítaní zmaže
MRTG grafy
- Multi Router Traffic Grapher
- Fedora balíčky:
mrtganet-snmp-utils - monitoring a vizualizácia
- využíva SNMP na zber dát
- Deafult: 5min/30min/2hour/1day
- cirkulárne logy
- (Ukážka)
- podporuje skripty pre postprocessing dát
- grafy sú zobraziteľné webovým engin-om (.png)
RRDTool
- súbory typu round-robin
- konzistentná veľkosť súboru
- staré dáta nahradzované novými
- kompatibilé s MRTG
Monitoring siete a služieb
SmokePing
- Fedora balík:
smokeping - ping na host
- meria latenciu a stratovosť
- využíva RRDTool
Nagios
- užívateľsky definované sondy
- HW: CPU/GPU/DISK/PSI load, zaplnenie RAM, dátové toky
- SW: (SMTP, POP3, HTTP, SSH, PING, …)
- downtime (fixed/flexible)
- groups a hosts
- Komunikáica:
- cez socket
- webové rozhranie
Arpwatch
- IPv4
- sledovanie ARP dotazov
- mapovanie MAC na IP
- upozornenie o zmenách
- problém pri strate stavu
ndpmon
- IPv6 (ICMPv6)
- obdobné, ako Arpwatch
- sleduje Neighbor Discovery Protocol
- problém pri strate stavu
Zdroje
- referáty: Lukáš Pospíšil
- referáty: Adam Ivora
- SNMP Tutorial
- Prehľad RFC
- snmpd
- Smokeping
- Nagios
- SNMP Wikipedia
- archív referátů