⚙️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

extend – eigene Programme als SNMP-Werte
# 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
ℹ️ extend-Programme laufen mit den Rechten von snmpd – nur eigene, harmlose Skripte eintragen.

🧪 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

DirektiveWirkungMIB / Objekt
agentAddress udp:192.0.2.10:161Lauschadressen (Standard ohne Angabe: UDP 161 auf allen IPv4-Schnittstellen)–
sysLocation / sysContact / sysNamesetzt die Werte und macht sie schreibgeschützt (Set → notWritable)sysLocation.0 …
view NAME included|excluded OID [MASKE]benannter Ausschnitt des Baums, mehrere Zeilen je ViewvacmViewTreeFamilyTable
rouser USER [noauth|auth|priv] [-V VIEW]SNMPv3-Benutzer darf lesen; Mindeststufe ohne Angabe: authvacm*-Tabellen
rocommunity COMM [QUELLE] [-V VIEW]v1/v2c-Community darf lesen, optional nur aus einem Netzvacm*-Tabellen
createUser USER ALG PASS [DES|AES PASS]SNMPv3-Benutzer anlegen – im persistenten VerzeichnisusmUserTable
proc NAME [MAX [MIN]]Prozessanzahl überwachen, Fehlerflag bei AbweichungUCD-SNMP-MIB::prTable
disk PATH [MIN|MIN%]freien Platz überwachenUCD-SNMP-MIB::dskTable
load MAX1 [MAX5 [MAX15]]Load Average mit SchwellenUCD-SNMP-MIB::laTable
extend NAME PROG ARGSProgramm ausführen, Ausgabe und Exit-Code lesbar machenNET-SNMP-EXTEND-MIB
pass [-p PRIO] MIBOID PROGganzen Teilbaum an ein Skript delegieren (PROG -g / -n / -s)frei wählbar
master agentxAgentX-Master: andere Programme hängen eigene Teilbäume einje Subagent
trap2sink / informsink HOST [COMM [PORT]]v2c-Trap bzw. -Inform an einen Empfänger–
trapsess [SNMPCMD_ARGS] HOSTbeliebige Notification-Ziele, auch SNMPv3–
authtrapenable 1authenticationFailure-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?

extendpass / pass_persistAgentX
Aufwandeine ZeileSkript mit Protokoll (-g/-n/-s)eigenes Programm mit AgentX-Bibliothek
OIDsfest: nsExtendOutput1Line."NAME"eigener Teilbaumeigener Teilbaum
WerteText + Exit-Codebeliebige Typenbeliebige Typen, auch Tabellen
passt für„Wie viele Updates stehen an?“eigene kleine MIBDienste, 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 Arten log, execute, net.
  • 🚫 disableAuthorization yes schaltet 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 normales createUser.
  • 🧰 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)

Nach jeder Änderung
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.