⚙️snmpd (Net-SNMP) konfigurieren
Der Agent aus dem Net-SNMP-Projekt läuft auf fast jedem Linux-System. Links einstellen, rechts die fertige Konfiguration, Benutzeranlage, Testbefehle und Trap-Empfänger mitnehmen – Warnungen erscheinen sofort.
🏷️ System & Lauschadresse
# snmpd.conf – erzeugt mit VisualSNMPD (Beispielwerte, vor Einsatz anpassen) # Syntax: man snmpd.conf ### Wo lauscht der Agent? ### agentAddress udp:192.0.2.10:161 ### Systemangaben (sysLocation.0 / sysContact.0 / sysName.0) ### sysLocation Serverraum 2, Rack B sysContact NOC <noc@example.org> sysName gw1.example.org sysServices 72 ### Views: welche Teilbäume sichtbar sind ### view monitoring included .1.3.6.1.2.1 view monitoring included .1.3.6.1.4.1.2021 view monitoring included .1.3.6.1.4.1.8072.1.3.2 ### Zugriff ### # SNMPv3: Benutzer „monitor“, Mindeststufe priv rouser monitor priv -V monitoring ### Überwachung (UCD-SNMP-MIB) ### proc sshd disk / 10% load 12 10 5 ### Eigene Werte: extend (NET-SNMP-EXTEND-MIB) ### extend test1 /bin/echo Hello, world! ### Notifications ### informsink 198.51.100.20 beispiel-trap authtrapenable 1
🧪 Alle Namen, Adressen (192.0.2.x, 198.51.100.x aus RFC 5737) und Passwörter sind Beispiele – vor dem Einsatz durch eigene ersetzen.
📂Wo liegt was?
/etc/snmp/snmpd.conf Hauptkonfiguration (Pfad je nach Paket)
/etc/snmp/snmptrapd.conf Trap-Empfänger
~/.snmp/snmp.conf Voreinstellungen der Werkzeuge
(defSecurityName, defAuthType …)
<persistent>/snmpd.conf createUser-Zeilen, gespeicherte
Schlüssel, engineID, Zähler
→ net-snmp-config --persistent-directory
/usr/share/snmp/mibs MIB-Dateien (MIBDIRS)💡 Was der installierte Agent überhaupt versteht, listet snmpd -H – praktisch, wenn eine Direktive in der Distribution fehlt (z. B. weil ein Modul nicht mitgebaut wurde).
🧪 Zum Ausprobieren im Vordergrund starten und auf die Standardausgabe loggen: sudo snmpd -f -Lo – Syntaxfehler der Konfiguration erscheinen dann direkt.
🔒 Die Beispielkonfiguration von Net-SNMP (EXAMPLE.conf) lauscht nur auf udp:127.0.0.1:161 und gibt der Communitypublic nur die View systemonly. Viele Distributionspakete übernehmen diese vorsichtige Voreinstellung – daher der typische „Timeout von außen“ nach der Installation.
📎 Quellen: snmpd.conf(5) · net-snmp-create-v3-user(1) · EXAMPLE.conf (Beispielkonfiguration)
📖Die wichtigsten Direktiven
| Direktive | Wirkung | MIB / Objekt |
|---|---|---|
| agentAddress udp:192.0.2.10:161 | Lauschadressen (Standard ohne Angabe: UDP 161 auf allen IPv4-Schnittstellen) | – |
| sysLocation / sysContact / sysName | setzt die Werte und macht sie schreibgeschützt (Set → notWritable) | sysLocation.0 … |
| view NAME included|excluded OID [MASKE] | benannter Ausschnitt des Baums, mehrere Zeilen je View | vacmViewTreeFamilyTable |
| rouser USER [noauth|auth|priv] [-V VIEW] | SNMPv3-Benutzer darf lesen; Mindeststufe ohne Angabe: auth | vacm*-Tabellen |
| rocommunity COMM [QUELLE] [-V VIEW] | v1/v2c-Community darf lesen, optional nur aus einem Netz | vacm*-Tabellen |
| createUser USER ALG PASS [DES|AES PASS] | SNMPv3-Benutzer anlegen – im persistenten Verzeichnis | usmUserTable |
| proc NAME [MAX [MIN]] | Prozessanzahl überwachen, Fehlerflag bei Abweichung | UCD-SNMP-MIB::prTable |
| disk PATH [MIN|MIN%] | freien Platz überwachen | UCD-SNMP-MIB::dskTable |
| load MAX1 [MAX5 [MAX15]] | Load Average mit Schwellen | UCD-SNMP-MIB::laTable |
| extend NAME PROG ARGS | Programm ausführen, Ausgabe und Exit-Code lesbar machen | NET-SNMP-EXTEND-MIB |
| pass [-p PRIO] MIBOID PROG | ganzen Teilbaum an ein Skript delegieren (PROG -g / -n / -s) | frei wählbar |
| master agentx | AgentX-Master: andere Programme hängen eigene Teilbäume ein | je Subagent |
| trap2sink / informsink HOST [COMM [PORT]] | v2c-Trap bzw. -Inform an einen Empfänger | – |
| trapsess [SNMPCMD_ARGS] HOST | beliebige Notification-Ziele, auch SNMPv3 | – |
| authtrapenable 1 | authenticationFailure-Traps senden (Standard: aus) | snmpEnableAuthenTraps.0 |
📎 Quellen: snmpd.conf(5) · UCD-SNMP-MIB · NET-SNMP-EXTEND-MIB / NET-SNMP-MIB
🧩Eigene Werte: extend, pass oder AgentX?
| extend | pass / pass_persist | AgentX | |
|---|---|---|---|
| Aufwand | eine Zeile | Skript mit Protokoll (-g/-n/-s) | eigenes Programm mit AgentX-Bibliothek |
| OIDs | fest: nsExtendOutput1Line."NAME" | eigener Teilbaum | eigener Teilbaum |
| Werte | Text + Exit-Code | beliebige Typen | beliebige Typen, auch Tabellen |
| passt für | „Wie viele Updates stehen an?“ | eigene kleine MIB | Dienste, die ihre MIB selbst liefern |
# snmpd.conf extend test1 /bin/echo Hello, world! $ snmpget -v3 … 192.0.2.10 'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."test1"' NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."test1" = STRING: Hello, world! # numerisch: Name als Index = Länge + ASCII .1.3.6.1.4.1.8072.1.3.2.3.1.1.5.116.101.115.116.49
📎 Quellen: snmpd.conf(5) · NET-SNMP-EXTEND-MIB / NET-SNMP-MIB
🔔Traps empfangen mit snmptrapd
- 🔐 Ohne Freigabe verarbeitet snmptrapd nichts: Notifications brauchen eine passende
authCommunity(v1/v2c) bzw.authUser(v3) mit den Artenlog,execute,net. - 🚫
disableAuthorization yesschaltet diese Prüfung ab – bequem, aber dann darf jeder beliebige Traps auslösen, die Skripte starten. - 🆔 SNMPv3-Traps sind mit der engineID des Senders geschützt: im Empfänger
createUser -e 0x…. Bei Informs ist der Empfänger autoritativ, dort genügt ein normalescreateUser. - 🧰
traphandle default /pfad/skriptübergibt jede Notification an ein Programm (Host, Adresse und Varbinds auf stdin).
# Test vom Agenten aus (v2c, Uptime '' = aktuelle) $ snmptrap -v2c -c beispiel-trap 198.51.100.20 '' SNMPv2-MIB::coldStart # als Inform – wartet auf Bestätigung $ snmptrap -Ci -v2c -c beispiel-trap 198.51.100.20 '' SNMPv2-MIB::coldStart
📎 Quellen: snmptrapd.conf(5) · snmptrap(1) · snmpd.conf(5)
sudo systemctl restart snmpd und anschließend mit dem passenden Testbefehl prüfen – vom Monitoring-Server aus, nicht nur lokal, damit Firewall und agentAddress mitgetestet werden.