SNMP
Fehlende Vorlage
Das gewünschte Template „Wiki/Vorlagen/InArbeit“ existiert nicht.
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Das SNMP (Simple Network Management Protocol) ist ein Netzwerkprotokoll, mit welchem Elemente eines Netzwerks (z.B Router, Server, Switches, Drucker, Computer, etc.) von einer zentralen Station aus überwacht und gesteuert werden können. Das Protokoll regelt hierbei die Kommunikation zwischen den überwachten Geräten und der Überwachungsstation. SNMP wurde so ausgelegt, dass jedes netzwerkfähige Gerät mit in die Überwachung und Steuerung einbezogen werden kann.
SNMP ermöglicht
Überwachung von Netzwerkkomponenten,
Fernsteuerung und Fernkonfiguration von Netzwerkkomponenten,
Fehlererkennung und Fehlerbenachrichtigung.
Da SNMP recht einfach gehalten ist, wird dieses Protokoll sowohl von den meisten Managementprogrammen als auch von den meisten Endgeräten verwendet. Es existieren SNMP-Version 1,2 und 3. Der große Unterschied von Version 3 zu 1 und 2 ist, dass die Sicherheit durch eine integrierte Benutzerverwaltung und weiterhin durch eine mögliche Verschlüsselung stark erhöht wurde.
Installation¶
Um unter Ubuntu mit einem Rechner einzelne Netzwerkelemente über SNMP anzusprechen, muss folgendes Paket installiert werden [3]:
snmpd (main [4])
Befehl zum Installieren der Pakete:
sudo apt-get install snmpd
Oder mit apturl installieren, Link: apt://snmpd
Um von einem Rechner die Abfragen zu starten (z.B. snmpwalk oder snmpget), muss das folgende Paket installiert werden [3]:
snmp (main [4])
Befehl zum Installieren der Pakete:
sudo apt-get install snmp
Oder mit apturl installieren, Link: apt://snmp
Grundlegende Konfiguration für Version 1 und 2¶
Die Konfiguration findet sich in der Datei /etc/snmp/snmpd.conf. Hier trägt man zunächst folgende Zeilen ein:
rocommunity public 127.0.0.1 # Definition der Community für SNMP Version 1 rocommunity mycomm <IP bzw. Name des überwachenden Servers> # Definition der Community für SNMP Version 1
Nach dem Anpassen der snmpd.conf muss der snmpd die Konfiguration neu einlesen:
sudo service snmpd reload
Die Community muss man später bei einem snmpwalk bzw. snmpget mit angeben, damit der Zugriff erlaubt wird. Trägt man statt rocommunity
ein rwcommunity
hier ein, so kann man die Werte nicht nur auslesen, sondern auch setzen (sofern die Werte überhaupt veränderbar sind).
Eine Liste der zur Verfügung stehenden Daten erhält man nun auf dem überwachenden Server mit
snmpwalk -v1 -c mycomm <IP bzw. Name des zu überwachenden Clients>
Will man die Liste auf dem Rechner selbst erhalten, so muss man einfach das mycomm
durch public
ersetzen.
Grundlegende Konfiguration für Version 3¶
Mit der Version 3 hat man die Möglichkeit, die Authentifizierung und die Daten verschlüsselt zu übertragen. Damit die Verschlüsselung funktioniert, muss folgendes Paket installiert werden [3]:
openssl (main [4])
Befehl zum Installieren der Pakete:
sudo apt-get install openssl
Oder mit apturl installieren, Link: apt://openssl
Zunächst stoppt man den SNMP-Daemon:
sudo service snmpd stop
Dann legt man den Benutzer an (in diesem Fall den Benutzer Nagios):
sudo net-snmp-config --create-snmpv3-user -ro -X DES -A MD5 -a "Nagios_PWD" -x "Nagios_PWD" nagios
Hierbei steht das -ro
dafür, dass der Benutzer lediglich Leserechte besitzt, das -a
definiert den Hasualgorithmus für das Passwort, das -x
die Verschlüsselung für die Daten, die übertragen werden.
Nun ändert man noch entsprechende Zeile in der Datei /usr/share/snmp/snmpd.conf um (hängt das AuthPriv an), um die Verschlüsselung von Verbindung und Passwort zu erzwingen:
rouser nagios AuthPriv
Danach startet man Daemon wieder:
sudo service snmpd start
snmpd.conf muss man im Gegensatz zu Version 1 oder 2 soweit erstmal nicht weiter anpassen. Mindestens müssen folgende beide Zeilen enthalten sein:
syslocation Unknown syscontact Root <root@localhost>
snmpget und snmpwalk¶
Mit snmpwalk
kann man ganze Listen von Werten anzeigen, mit snmpget
erhält man im Gegensatz dazu nur einzelne Werte, also z.B.
snmpwalk -v1 -c mycomm <IP> memory snmpget -v1 -c mycomm <IP> memAvailReal.0 snmpget -v3 -u nagios -l authPriv -a MD5 -x DES -X Nagios_PWD -A Nagios_PWD localhost sysDescr.0
Hierbei ist die letzte Zeile für die Version 3 gegeben, wobei das -a
angibt, wie das Passwort verschlüsselt werden soll und das -x
beinhaltet den Algorithmus für die Verschlüsselung der übertragenen Daten.
Um nur den zurückgelieferten Wert auszugeben, was zum Beispiel beim Skripting durchaus Einiges erleichtert, kann man den Parameter -Oqv
für das snmpget bzw. snmpwalk verwenden.
Viele Werte findet man in den Tabellen prTable, memory, extTable, dskTable, loadTable, systemStats, ucdDemoMIB, fileTable, logMatch, version, snmperrs, mibRegistryTable. Hierfür müssen dann teilweise erstmal entsprechende Einträge in der /etc/snmp/snmpd.conf gemacht sein, z.B. für fileTable.
MIBs und OIDs¶
Die MIB-Dateien (MIB = Management Information Base) liegen unter /usr/share/snmp/mibs. Diese enthalten die Informationen, die man per SNMP abfragen und ändern kann. Ähnlich wie bei einen LDAP-Schame sind alle Objekte in einer Baumstruktur angeordnet, wobei die Knoten keine eigenen Werte, sondern nur Listen der darunterliegenden Objekte enthalten. Jedes Objekt hat eine eindeutige OID (Object Identifier) zugeordnet, wobei die einzelnen Knoten des Baumes durch Punkte getrennt aufgeführt werden. Dabei gibt es für die einzelnen Knoten sowohl eine darstellende Zahl als auch eine etwas aussagekräftigerere Kette von Worten (z.B. entspricht .1.3.6.1.4.1.2021.9 dem Wort .iso.org.dod.internet.private.enterprises.ucdavis.dskTable).
Die wichtigsten MIB-Dateien unter Ubuntu sind die UCD-SNMP-MIB.txt und die UCD-SNMP-MIB.txt.
Den Inhalt einer MIB-Datei übersichtlich darstellen und browsen kann man mit verschiedenen Programmen, z.B. dem
tkmib
snmptranslate¶
DIe OIDs und entsprechenden "aussagekräftigen" Namen kann man per snmptranslate
ineinander überführen. Für einen abgekürzten Namen (z.B.dskTable) erhält man mittels Parameter -IR
den vollständigen Namen (z.B. UCD-SNMP-MIB::dskTable). Um die OID zu erhalten, muss man den Parameter -On
angeben, die Umwandlung umgekehrt funktioniert automatisch, z.B.:
snmptranslate -On -IR ipRouteDest snmptranslate .1.3.6.1.2.1.4.21.1.1
Weitere Konfigurationsmöglichkeiten in der snmpd.conf¶
Vorgegeben Überwachungsmöglichkeiten verwenden¶
Je nachdem, was man überwachen möchte, kann man in der /etc/snmp/snmpd.conf nun weitere Einstellungen vornehmen, um z.B. Partitionsfüllstände, Dateigrößen, Logdateien und Anderes zu überwachen. Dafür muss man lediglich eine entsprechende Zeile eintragen
disk / # Überwachung Des Füllstands der Root-Partition disk /home # Überwachung des Füllstands der Home-Partition includeAllDisks 10% # Überwachung der Füllstände aller Partitionen file /var/log/apache2/apache2.log 10000 # Überwachung der Grösse einer Datei PROC sshd # Überwachung des sshd-Prozesses
Hierbei steht jeweils der erste Eintrag für die jeweilige Direktive, der zweite für das zu überwachende und der (nicht unbedingt notwendige) dritte Wert, für den Grenzwert zum setzen eines entsprechnden Fehler-Markers (dazu dann bei snmpget mehr).
Werden die in der snmpd.conf angegebenen Schwellwerte überschritten, so wird ein entsprechendes Fehlerflag gesetzt, z.B. das dskErrorFlag
, falls der angegebene prozentuale freie Platz unterschritten wurde. Die entsprechende Fehlermeldung steht dann in dskErrorMsg.
Rückgabewerte und Ausgaben eigener Skripte abfragen¶
In die /etc/snmp/snmpd.conf kann man auch eigene Befehle bzw. Skripte angeben, deren Rückgabewerte man dann per snmpget abfragen kann. Füge z.B. folgende Zeile an die /etc/snmp/snmpd.conf an:
extend .1.3.6.1.3.1.1984.2 apt /bin/bash -c "/bin/echo `/bin/echo n | /usr/bin/aptitude dist-upgrade -s | /usr/bin/awk '/^[0-9]/ {print $1}'`"
. Nach einem Neustart des snmpd kann man dann die Anzahl der verfügbaren Updates (also den Ausgabewert des Befehls) abfragen mittels
snmpwalk -v 1 -c public localhost .1.3.6.1.3.1.1984.2.4