💡Tipps & Tricks
Was im Betrieb wirklich hilft: Fehlermeldungen richtig lesen, schneller abfragen, Zähler korrekt auswerten und SNMP sicher betreiben.
🩺Fehlersuche nach Symptom
Es kam gar keine Antwort. Bei SNMPv1/v2c antwortet der Agent auf eine falsche Community nicht – der Manager sieht dann ebenfalls nur einen Timeout.
- snmpd läuft nicht oder lauscht nur auf 127.0.0.1 (agentAddress)
- Firewall auf dem Agenten oder dazwischen lässt udp/161 nicht durch
- falsche Community oder Quelladresse nicht in rocommunity erlaubt
- falsche Version (-v1 statt -v2c) oder falscher Port
- Antwort zu groß und wird unterwegs fragmentiert verworfen – GetBulk mit kleinerem -Cr testen
# auf dem Agenten sudo ss -ulpn | grep ':161' sudo snmpget -v2c -c beispiel-community 127.0.0.1 sysUpTime.0 # vom Manager, mehr Geduld und Paket-Dump snmpget -d -t 3 -r 1 -v2c -c beispiel-community 192.0.2.10 sysUpTime.0 sudo tcpdump -ni any udp port 161
📎 Quellen: snmpcmd(1) · RFC 3414 – User-based Security Model · RFC 3416 – Protokolloperationen (PDUs) · snmptrapd.conf(5) · snmpwalk(1) / snmpbulkwalk(1)
📈Bandbreite aus zwei Abfragen
Setzt der Agent die Zähler zurück (Neustart, erkennbar an kleinerer sysUpTime oder geänderter ifCounterDiscontinuityTime), ist die Differenz bedeutungslos – gute Monitoring-Systeme verwerfen diesen einen Messpunkt.
📎 Quellen: RFC 2863 – IF-MIB · RFC 2578 – SMIv2
🚀Performance: GetBulk statt Walk
Die ifTable des Beispiel-Agenten (3 Schnittstellen, 12 Spalten = 36 Werte), im Browser nachgezählt:
| Befehl | Anfragen | Werte |
|---|---|---|
| snmpwalk | 37 | 36 |
| snmpbulkwalk -Cr10 | 4 | 36 |
| snmpbulkwalk -Cr25 | 2 | 36 |
- ⏱️ Jede Anfrage kostet eine Round-Trip-Zeit. Bei 20 ms Latenz sind 37 Anfragen ≈ 740 ms, 2 Anfragen ≈ 40 ms.
- 🎯 Nur walken, was gebraucht wird:
IF-MIB::ifHCInOctetsstattmib-2. Ein Walk über den ganzen Baum eines großen Switches kann Minuten dauern und die CPU des Geräts belasten. - 🧺 Mehrere Spalten in einer GetBulk-Anfrage:
snmpbulkget -Cr20 … ifHCInOctets ifHCOutOctetsliefert beide Spalten verzahnt. - ⌛ In langsamen Netzen
-t(Timeout) erhöhen und-r(Wiederholungen) senken – sonst stapeln sich Wiederholungen.
📎 Quellen: RFC 3416 – Protokolloperationen (PDUs) · snmpwalk(1) / snmpbulkwalk(1)
🛡️Sicherheit – Checkliste
- 🚫 SNMPv1/v2c nie über das Internet und nie mit offenem udp/161 nach außen: Die Community steht im Klartext im Paket, und offene Agenten werden für Reflexionsangriffe missbraucht (kleine Anfrage, große Antwort).
- 🔐 SNMPv3 mit authPriv, SHA-256 (oder stärker) und AES – wenn beide Seiten es unterstützen.
- 👁️ Views eng halten:
rouser monitor priv -V monitoring, für v2c höchstens-V systemonly. - 🌐 Quellnetz begrenzen:
rocommunity … 198.51.100.0/24plus Firewall-Regel auf dem Agenten. - ✍️ Kein Schreibzugriff, solange er nicht gebraucht wird – kein
rwcommunity,rwusernur mit eigener, kleiner View. - 🔑 Passwörter ≥ 8 Zeichen (Pflicht) und je Zweck ein eigener Benutzer;
public/privatenie behalten. - 🧩
extend/pass-Skripte laufen mit den Rechten von snmpd – nur eigene, geprüfte Programme eintragen.
📎 Quellen: RFC 3414 – User-based Security Model · RFC 3415 – View-based Access Control · RFC 3826 – AES-CFB-128 für USM · RFC 7860 – HMAC-SHA-2 für USM · snmpd.conf(5) · EXAMPLE.conf (Beispielkonfiguration)
📚MIB-Dateien laden
-m ALLlädt alle MIBs aus den Suchpfaden,-m +CISCO-SMIfügt eine hinzu. Dauerhaft:mibs +ALLin~/.snmp/snmp.confoder UmgebungsvariableMIBS.-M +/opt/mibsbzw.MIBDIRSergänzt Verzeichnisse. Herstellerdateien dort ablegen – der Dateiname muss nicht zum Modulnamen passen.- Auf Debian/Ubuntu steht in
/etc/snmp/snmp.confhäufig die Zeilemibs :, die das Laden abschaltet; auskommentieren (die Standard-MIBs liefert dort das Paketsnmp-mibs-downloader). snmptranslate -On IF-MIB::ifHCInOctets→.1.3.6.1.2.1.31.1.1.1.6,snmptranslate -Tp -IR ifXTablezeichnet den Teilbaum.
📎 Quelle: snmpcmd(1)
🖨️Ausgabe für Skripte formen
| -On | OIDs numerisch | .1.3.6.1.2.1.1.5.0 = STRING: gw1.example.org |
| -Of | OIDs mit vollem Pfad | .iso.org.dod.internet.mgmt.mib-2.system.sysName.0 = … |
| -Os | nur der letzte Name | sysName.0 = STRING: gw1.example.org |
| -Oq | ohne „=“ und Typ | SNMPv2-MIB::sysName.0 gw1.example.org |
| -Ov | nur der Wert | STRING: gw1.example.org |
| -Oqv | nur der nackte Wert – ideal für Skripte | gw1.example.org |
| -Oe | Aufzählungen als Zahl | IF-MIB::ifOperStatus.3 = INTEGER: 2 |
# Uptime eines Agenten als Zahl (Hundertstelsekunden) snmpget -Oqvt -v3 … 192.0.2.10 SNMPv2-MIB::sysUpTime.0
📎 Quelle: snmpcmd(1)
📡Einbindung ins Monitoring (allgemein)
Zustände regelmäßig abfragen (typisch 1–5 min) und Traps nur als schnellen Hinweis nutzen – Traps können verloren gehen.
Counter speichern, Differenz je Intervall bilden, Überlauf und Zählerrücksetzung (sysUpTime kleiner) erkennen.
Schnittstellen über ifName/ifAlias statt über den ifIndex zuordnen – der kann sich nach Neustarts ändern.
eigener SNMPv3-Benutzer für das Monitoring, nur lesend, View mit genau den benötigten Teilbäumen.
Ob Zabbix, LibreNMS, Icinga/Nagios, Prometheus mit SNMP-Exporter oder Telegraf – alle nutzen dieselben Bausteine: GetBulk-Walks über Tabellen, Counter64 für Oktette, Traps/Informs über snmptrapd oder einen eigenen Empfänger auf udp/162.
📎 Quellen: RFC 2863 – IF-MIB · RFC 3416 – Protokolloperationen (PDUs) · RFC 3418 – SNMPv2-MIB