ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

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.

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

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

In der Standardkonfiguration gibt es nur die Kommunity (also quasi eine Gruppe) public, mit der Abfragen gemacht werden dürfen und dies auch nur in einem recht eingeschränktem Rahmen. Die Konfiguration findet sich in der Datei /etc/snmp/snmpd.conf:

#       sec.name  source          community
com2sec paranoid  default         public

Möchte man alle Werte abfragen können, so muss man das paranoid in readonly ändern bzw. in readwrite, um Werte auch ändern zu können. Als minimale Sicherheitsmaßnahme sollte man den Kommunity-Namen public in einen eigenen Namen ändern, da es bei Version 1 und 2 ausreicht, den Kommunity-Namen zu haben, um Abfragen abzusetzen.

Man kann auch verschiedene Kommunities haben, denen man unterschiedliche Rechte zuweist. Genauer beschrieben wird dies in der mitgelieferten snmpd.conf.

Nach dem Anpassen der snmpd.conf muss der snmpd die Konfiguration neu einlesen:

sudo service snmpd reload 

Eine Liste der zur Verfügung stehenden Daten erhält man nun auf dem überwachenden Server mit folgendem Kommando (wobei hinter dem -c der Kommunityname angegeben ist):

snmpwalk -v1 -c public localhost 

Grundlegende Konfiguration für Version 3

Mit der Version 3 hat man die Möglichkeit, die Authentifizierung und die Daten verschlüsselt zu übertragen. Bei den Versionen 1 und 2 können die Pakete im Netzwerk leicht abgehört und ausgelesen werden können. Insofern sollte man auf jeden Fall Version 3 verwenden, falls man SNMP in einem nicht abgeschotteten Netzwerk verwendet. Durch die ein wenig komplexere Konfiguration hat sich die Version 3 jedoch noch nicht so weit verbreitet. So sind z.B. die meisten auf SNMP basierenden Nagios-Plugins nur für Version 1 und 2 geschrieben.

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 "SNMP_PWD" -x "SNMP_PWD" nagios 

Hierbei steht das -ro dafür, dass der Benutzer lediglich Leserechte besitzt. Das -A definiert den Hashalgorithmus für das Passwort (MD5 oder SHA) und das -X den Algorithmus für die Verschlüsselung der Daten, die übertragen werden (AES oder DES). Hinter dem -a und -x ist das Passwort für die Authentifizierung und die Verschlüsselung angeben (eigentlich könnte man auch nur eines von beiden verwenden, jedoch sollte man um der Sicherheit willen beides nutzen).

Nun ändert man noch entsprechende Zeile in der Datei /usr/share/snmp/snmpd.conf (hängt das AuthPriv an), um die Verschlüsselung von Verbindung und Passwort zu erzwingen:

rouser nagios AuthPriv

Nun löscht man die vorhandene /etc/snmp/snmpd.conf und erstellt eine Neue mit folgendem Inhalt:

group groupv3             usm      nagios
view    all included   .iso      80
#  context sec.model                      sec.level   match  read        write      notif
access groupv3         ""        any       auth      exact    all         all        all

syslocation Unknown 
syscontact Root <root@localhost> 

Falls man lediglich Lesezugriff erlauben möchte, so muss man entsprechend bei write den Wert auf none setzen.

Danach startet man Daemon wieder:

sudo service snmpd start 

Zugriff von anderen Rechnern aus erlauben

Standardmässig sind lediglich Anfragen auf localhost erlaubt. Um den Zugriff auch für andere IPs (auf dem zu überwachenden Rechner) zu erlauben, muss man in der Datei /etc/default/snmpd die Startoptionen ändern, also die folgende Zeile:

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'

Will man Abfragen auf allen Netzwerkinterfaces zulassen, so löscht man die 127.0.0.1 am Ende. Hat man mehrere Netzwerkkarten im Rechner und will die SNMP-Anfragen nur auf einer zulassen, so hängt man die entsprechende IP an die 127.0.0.1 per Leerzeichen getrennt an, z.B.:

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1 192.168.32.4'

. Nach dem Anpaasen der Datei muss der snmpd neu gestartet werden:

sudo service snmpd restart 

ACHTUNG: Ist auf dem Rechner eine Firewall installiert, so muss hier der UDP-Port 161 freigeschaltet werden, um von anderen Rechner aus SNMP-Abfragen stellen zu können.

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 private <IP> memory
snmpget -v1 -c private <IP> memAvailReal.0
snmpget -v3 -u nagios -l authPriv -a MD5 -x DES -X SNMP_PWD -A SNMP_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 zunächst entsprechende Einträge in der /etc/snmp/snmpd.conf gemacht sein (siehe weiter unten), 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-Schema 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

Vorgegebene Ü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 / 5% # Überwachung Des Füllstands der Root-Partition 
disk /home 5%# Ü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öße 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 entsprechenden Fehler-Schwellwert (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 Zeilen an die /etc/snmp/snmpd.conf an:

extend .1.3.6.1.3.1.1984.1 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 private localhost .1.3.6.1.3.1.1984.1.4 

Diese Revision wurde am 28. Oktober 2010 12:26 von Doc_Symbiosis erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Sicherheit, Netzwerk, Server, System, Internet