Wir haben bereits über SNMP gesprochen und darüber, dass es für die meisten Anwendungsfälle nicht die bestmögliche Lösung ist. Doch trotz seiner Probleme, seiner fehlenden Leistungsverbesserungen und der wachsenden Liste von Alternativen wird SNMP uns noch nicht verlassen. Dafür gibt es verschiedene Gründe, die den Rahmen dieses Artikels jedoch sprengen würden. Es genügt zu sagen, dass SNMP gut etabliert und bis heute in vielen Netzwerken präsent ist. Die Unterstützung durch die Hersteller wird daher auch in nächster Zeit nicht nachlassen, sodass IT-Teams weiterhin mit der Konfiguration von SNMP konfrontiert sind (ob sie wollen oder nicht).
Glücklicherweise ist die Einrichtung von SNMP unter Linux keine große Herausforderung. Sie besteht größtenteils aus der Konfiguration von SNMP, dem Daemon-Teil, und dem Erlernen einer Handvoll Commands, dem Tool-Teil. Beides dauert nicht allzu lange.
Die verschiedenen SNMP-Versionen
Um SNMP unter Linux zu konfigurieren, ist ein kurzer Exkurs über die verschiedenen Versionen des Protokolls erforderlich. Die ursprüngliche Version des SNMP-Protokolls war v1, die in den 1980er Jahren entwickelt wurde. Später wurde das Protokoll von v2 abgelöst, das vor allem mehr Sicherheit und Authentifizierungsmechanismen bot. v2 hat zwei Varianten, v2c und v2u. v2c bietet ein Community-basiertes Sicherheitsmodell, während v2u mit einem User-basierten Modell arbeitet (wie in RFC1910 beschrieben).
SNMP v2u hat sich nie wirklich durchgesetzt, aber ein Teil seiner Funktionen wurde für die Entwicklung von v3 verwendet. Da v2c viel verbreiter ist, beziehen wir uns immer darauf, wenn wir in diesem Artikel von v2 reden.
v3 ist die neueste Version des SNMP-Protokolls. Der größte Unterschied zu seinen Vorgängern ist die zusätzliche Verschlüsselungsunterstützung mit all seinen Vor- und Nachteilen.
SNMP-Monitoring unter Linux
Die Referenzimplementierung für SNMP-Monitoring unter Linux ist das Paket net-snmp
. net-snmp
stammt aus dem Jahr 1992 und ist für alle wichtigen Linux-Distributionen verfügbar. Es unterstützt alle Versionen des SNMP-Protokolls, wobei v3 die empfohlene Version ist. Es wird aktiv entwickelt und erhält seit vielen Jahren monatliche Commits.
Das Paket besteht in der Regel aus zwei separaten Komponenten: den Tools zur Nutzung des Protokolls und dem Daemon zur Installation auf einem Linux-Host sowie zur Konfiguration und Überwachung des Protokolls. Unter Ubuntu und anderen Debian-basierten Distributionen heißen die Tools snmp und der Daemon snmpd. Unter Red Hat befinden sich die Tools im Paket net-snmp-utils
und der Daemon in net-snmp
. Bei anderen Distributionen können beide Komponenten im selben Paket enthalten sein, im Allgemeinen einfach net-snmp
.
Der Daemon ermöglicht das Monitoring des lokalen Hosts durch einen externen Host über SNMP, während die Tools den umgekehrten Weg gehen. Je nach Ihren Bedürfnissen für SNMP-Monitoring unter Linux kann es erforderlich sein, beide zu installieren.
Was ist snmpd?
snmpd
unter Linux ist der Daemon-Teil von net-snmp
. Nach seiner Installation erstellt er einen SNMP-Host, der Anfragen von anderen Hosts annehmen und beantworten, Benachrichtigungen (TRAPs und INFORMs im SNMP-Jargon) ausgeben und einige Self-Monitoring-Aufgaben durchführen kann. Das SNMP-Protokoll ermöglicht die grundlegende Konfiguration von Hosts und snmpd
wird benötigt, um diese Fähigkeiten zu nutzen.
Was sind die Tools für SNMP-Monitoring unter Linux?
Da snmpd
der Daemon ist, wird der Großteil der SNMP-Operationen mit einer Reihe von Tools im snmp
-Paket (Ubuntu/Debian) oder net-snmp-utils
-Paket (Red Hat) durchgeführt. Diese sind der Kern der SNMP-Implementierung und das, was IT-Teams routinemäßig zum Monitoring eines Netzwerks verwenden würden.
Werfen wir einen Blick darauf, wie sie funktionieren und wofür sie gedacht sind.
snmptranslate
snmptranslate
führt eine Übersetzung der OID in den entsprechenden MIB-Namen durch:
# snmptranslate .1.3.6.1.2.1.1.3.0
SNMPv2-MIB::sysUpTime.0
Oder das Gegenteil, von einer MIB zur numerischen OID:
# snmptranslate **-On** SNMPv2-MIB::sysUpTime.0
.1.3.6.1.2.1.1.3.0
snmpget
snmpget
ruft Daten von einem SNMP-Host ab. Es stellt dafür eine einfache Anfrage, die aus drei Elementen besteht:
- Wo die Informationen abgerufen werden sollen,
- die mit der Anfrage verbundenen administrativen Informationen und
- welche Informationen benötigt werden:
# snmpget -v 2c -c demopublic test.net-snmp.org SNMPv2-MIB::sysUpTime.0 SNMPv2-MIB::sysUpTime.0 = Timeticks: (586731977) 67 days, 21:48:39.77
snmpgetnext
Die andere Hauptfunktion des SNMP-Protokolls zum Abrufen von Informationen ist GETNEXT, die durch das Tool snmpgetnext
implementiert wird. Es ruft ähnliche Arten von Informationen ab wie snmpget
, jedoch von der nächsten OID. Es ist nützlich, um eine Reihe von SNMP-Hosts zu durchlaufen und nach und nach Informationen von jedem Gerät zu erhalten. Die Syntax ist identisch mit snmpget
:
# snmpgetnext -v 2c -c demopublic test.net-snmp.org sysUpTime
SNMPv2-MIB::sysUpTime.0 = Timeticks: (586978184) 67 days, 22:29:41.84
snmpwalk
Anstatt snmpgetnext
für jeden SNMP-Host zu starten, können Sie snmpwalk
verwenden, um ein Netzwerk automatisch zu durchsuchen:
snmptable
snmptable
gibt den Inhalt einer SNMP-Tabelle wieder, wobei es immer nur eine Zeile anzeigt:
snmpset
Die SET-Funktion des SNMP-Protokolls können Sie nutzen, um Informationen eines SNMP-Hosts zu ändern, seine Konfiguration zu aktualisieren oder sein Verhalten zu steuern. Sie ist in dem Tool snmpset
implementiert.
Eines von vielen möglichen Beispielen ist die Einstellung eines zufälligen Strings, der bei einer Abfrage zurückgegeben wird:
$ snmpset -v 1 -c demopublic test.net-snmp.org ucdDemoPublicString.0 s "hi there!"
$ snmpget -v 1 -c demopublic test.net-snmp.org ucdDemoPublicString.0
UCD-DEMO-MIB::ucdDemoPublicString.0 = "hi there!"
snmpbulkget
Die ab SNMP v2 verfügbare Operation GETBULK ist im Tool snmpbulkget
implementiert. Sie können es verwenden, um ein ganzes Netzwerk von SNMP-Hosts abzufragen, anstatt nur einen einzigen.
$ snmpbulkget -v2c -Cn1 -Cr5 -Os -c public zeus system ifTable
Es ruft die Variable system.sysDescr.0
und die ersten 5 Objekte der ifTable
ab.
Um mehrere Variablen mit einem einzigen Command abzurufen, können Sie mit dem Tool snmpbulkwalk
alle Variablen unter einem System abfragen:
$ snmpbulkwalk -v2c -Os -c public zeus system
snmptrap
TRAPs werden im Allgemeinen von SNMP-Agenten gesendet, um einer Verwaltungsstation (in unserem Fall einem Linux-Server) anormale Bedingungen zu melden. Um TRAPs selbst zu erzeugen, steht das Tool snmptrap
zur Verfügung. Für v2/v3 lautet die Syntax:
$ snmptrap -v 2c -c public host "" UCD-NOTIFICATION-TEST-MIB::demoNotif \
SNMPv2-MIB::sysLocation.0 s "Just here"
Ersetzen Sie 2c durch v3, wenn Sie mit einem SNMP v3-Agenten kommunizieren.
Wie Sie SNMP unter Linux konfigurieren
Wir wissen bereits, welche Möglichkeiten net-snmp
bietet, um SNMP für das Monitoring von Linux-Servern zu nutzen. Jetzt müssen wir uns ansehen, wie man SNMP unter Linux konfiguriert.
Die Konfiguration von snmpd
befindet sich normalerweise in /etc/snmp/snmpd.conf
für v1 und v2 des SNMP-Protokolls. Wenn Sie, wie empfohlen, v3 verwenden, befindet sich die zusätzliche Konfiguration in/var/lib/net-snmp/snmpd.conf
. Diese Datei speichert keine Änderungen, während der Daemon läuft. Daher müssen Sie den Daemon stoppen, bevor Sie die Datei ändern.
Beide Dateien sind ausführlich kommentiert, um die Konfiguration von SNMP unter Linux zu erleichtern.
snmpd.conf
hat viele Optionen und ist nicht einfach zu konfigurieren, weder unter Linux noch anderswo. Für die meisten Anforderungen sind jedoch nur ein paar Änderungen erforderlich, um SNMP zum Laufen zu bringen. Es gibt Commands, die die Konfiguration von SNMP unter Linux vereinfachen und Netzwerk- und Systemadmins die Arbeit erleichtern.
Bevor Sie mit der Konfiguration von SNMP unter Linux beginnen, öffnen Sie den Port in der Firewall. snmpd
verwendet standardmäßig den UDP-Port 161. Öffnen Sie ihn mit iptables:
$ iptables -A INPUT -s <ip addr> -p udp -m udp --dport 161 -j ACCEPT
$ iptables -A OUTPUT -p udp -m udp --sport 161 -j ACCEPT
Für Firewalls lautet der Command:
$ firewall-cmd --permanent --add-port=161/udp
Dadurch können Sie snmpd
auf einem Host laufen lassen und ermöglichen, dass er abgefragt werden kann. Wenn Sie nur einen externen Host überwachen wollen, genügt es, wenn der Host erreichbar ist.
Konfigurieren Sie SNMP unter Linux (v1 und v2)
Die ersten beiden Versionen des Protokolls bieten eine einfache Authentifizierung durch einen Community-String. Dabei handelt es sich um eine Art Passwort, das im Klartext oder als Hash über das Netz weitergegeben wird, und zwar auf unsichere Weise. Dieser String muss vor der Kommunikation zwischen SNMP-Hosts und -Geräten eingerichtet werden.
Die Direktive rocommunity
oder rwcommunity
in der Datei snmpd.conf
deklariert diesen String:
community [source [OID]]
community ist der verwendete String, source ist eine IP-Adresse oder ein Subnetz, und die OID ist der SNMP-Baum, auf den der Zugriff erfolgen soll. Das ist im Grunde alles, was nötig ist, um über SNMP zwischen Hosts zu kommunizieren.
Es wird empfohlen, der Datei snmpd.conf
einen Standort und Kontaktinformationen hinzuzufügen, um andere Nodes im Netzwerk darüber zu informieren, wo sich dieser SNMP-Host befindet und wer für ihn verantwortlich ist. Fügen Sie ein paar Zeilen nach community
ein:
syslocation Somewhere (In the World)
syscontact Admin <admin@somewhere.com>
Starten Sie den snmpd-Daemon mit systemctl restart snmpd
neu und der Linux-SNMP-Host ist bereit, auf SNMP-Anfragen zu antworten.
Konfigurieren Sie SNMP unter Linux (v3)
Die Konfiguration von snmpd
unter Linux mit der neuesten Version des Protokolls ist etwas komplexer als bei den Vorgängerversionen. Zunächst einmal gibt es jetzt zwei Konfigurationsdateien: nicht nur /etc/snmp/snmpd.conf
, sondern auch /var/lib/net-snmp/snmpd.conf
. Glücklicherweise enthält das net-snmp
-Paket mit net-snmp-create-v3-user
einen Command-Helper, mit dem Sie konfigurieren können, unter wem der SNMP-Linux-Server laufen soll.
Stellen Sie sicher, dass Sie den Daemon anhalten und erstellen Sie den SNMP-Admin mit:
$ net-snmp-create-v3-user
Enter a SNMPv3 user name to create:
admin
Enter authentication pass-phrase:
yourpassphraseofchoice
Enter encryption pass-phrase:
[press return to reuse the authentication pass-phrase]
adding the following line to /var/lib/net-snmp/snmpd.conf:
createUser admin MD5 "yourpassphraseofchoice" DES
adding the following line to /etc/snmp/snmpd.conf:
rwuser admin
Die letzte rwuser-Richtlinie hat ein ähnliches Format wie die obige Community:
user [noauth|auth|priv] [OID]
user ist ein Benutzername und OID ist der Baum, auf den Zugriff gewährt werden soll. Standardmäßig lässt der snmpd-Daemon in v3 nur authentifizierte Anfragen (auth) zu, während die Option noauth jede beliebige Anfrage zulässt und die Option priv die Verschlüsselung erzwingt. Die Strings lassen sich kombinieren. Unsere empfohlene Option für maximale Sicherheit ist authpriv, was spezifiziert, dass Anfragen authentifiziert und Antworten verschlüsselt werden müssen.
Um das nicht sehr hohe Standard-Sicherheitsniveau von snmpd zu verbessern, können einige Optionen zu net-snmp-create-v3-user
hinzugefügt werden:
-a SHA
: verwendet den moderneren SHA-Hashing-Algorithmus anstelle von MD5.-x AES
: verwendet die AES-Verschlüsselung anstelle des veralteten DES.
Beide Optionen sollten gesetzt werden, da sie die Kommunikations- und Authentifizierungsschritte auf sicherere Protokolle umstellen. Leider entspricht keines der beiden Protokolle den modernen Standards. SNMP ist daher für eine moderne Organisation, die Hosts und Geräte in einer sicheren, privaten und effizienten Umgebung überwachen möchte, keine gute Wahl.
SNMP unter Linux zu konfigurieren ist nicht schwer... aber ist es das wert?
Die SNMP-Konfiguration ist in der Tat nicht das Schwierigste, was es gibt. Dennoch ist es eine weitere Software, die Sie, im Falle von snmpd, handhaben müssen oder die Sie, im Falle der verschiedenen Tools, dienet-snmp
liefert, beherrschen müssen. Und wer überwacht den Überwacher? Vor allem, wenn SNMP durch den Hersteller auf den Geräten installiert wurde. Das ist ein weiteres Fehlerrisiko, das Sie vermeiden können. Vor allem, wenn Sie ein wahrscheinlich bald völlig veraltetes Protokoll unterstützen.
Angesichts der zahlreichen Alternativen und der Tatsache, dass die großen Hersteller SNMP nicht mehr verwenden, erscheint es unnötig, sich die Mühe zu machen, es zusammen mit modernen Monitoring-Lösungen einzurichten. Wir raten definitiv davon ab, es zu verwenden, wenn es sich vermeiden lässt.
Aber oft liegt die Entscheidung nicht bei Ihnen: sei es, weil die Infrastruktur bereits vorhanden ist oder weil einige wenige Hosts nur SNMP unterstützen können, sind wir manchmal gezwungen, SNMP zu verwenden. Es wird uns auf jeden Fall noch eine Weile begleiten. Und glücklicherweise ist die Konfiguration aus Sicht eines Linux-Hosts definitiv nicht kompliziert.
SNMP bietet viele Lernmaterialien, die einer ahnungslosen Person den Einstieg in die Konfiguration eines SNMP-Linux-Hosts erleichtern. Dieser Artikel mit eingeschlossen.