[[Vorlage(Getestet, general)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] Das [wikipedia:Simple_Network_Management_Protocol: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 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 [1]: {{{#!vorlage Paketinstallation snmpd, main [2] }}} Um von einem Rechner die Abfragen zu starten (z.B. `snmpwalk` oder `snmpget`), muss das folgende Paket installiert werden: {{{#!vorlage Paketinstallation snmp, main }}} = Grundlegende Konfiguration für Version 1 und 2 = In der Standardkonfiguration gibt es nur die Community (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 }}} Um alle Werte abfragen zu können, muss man in einem Editor [3] mit Root-rechten das `paranoid` in `readonly` ändern bzw. in `readwrite`, um Werte auch ändern zu können. Als minimale Sicherheitsmaßnahme sollte man den Community-Namen `public` in einen eigenen Namen ändern, da es bei Version 1 und 2 ausreicht, den Community-Namen zu haben, um Abfragen abzusetzen. Man kann auch verschiedene Communities 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[4]: {{{#!vorlage Befehl sudo service snmpd restart }}} Eine Liste der zur Verfügung stehenden Daten erhält man nun auf dem überwachenden Server mit folgendem Kommando (wobei hinter dem `-c` der Communityname angegeben ist): {{{#!vorlage Befehl 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. Insofern sollte man 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 [http://www.nagios.org/ Nagios]-Plugins {en} nur für Version 1 und 2 geschrieben. Damit die Verschlüsselung funktioniert, muss folgendes Paket installiert werden [3]: {{{#!vorlage Paketinstallation openssl, main [4] }}} Zunächst stoppt man den SNMP-Daemon: {{{#!vorlage Befehl sudo service snmpd stop }}} Dann legt man den Benutzer an (in diesem Fall den Benutzer `Nagios`): {{{#!vorlage Befehl sudo net-snmp-config --create-snmpv3-user -ro -X DES -A MD5 -a "SNMP_PWD" -x "SNMP_PWD" nagios }}} Der Parameter `-ro` gibt an, 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. 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 }}} Falls man lediglich Lesezugriff erlauben möchte, so muss man entsprechend bei `write` den Wert auf `none` setzen. Danach startet man Daemon wieder: {{{#!vorlage Befehl sudo service snmpd start }}} = Zugriff von anderen Rechnern aus erlauben = Standardmäßig 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 Anpassen der Datei muss `snmpd` neu gestartet werden: {{{#!vorlage Befehl sudo service snmpd restart }}} {{{#!vorlage Warnung 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. }}} = Zugriff nur für bestimmte Rechner erlauben = Möchte man den Zugriff nur für bestimmte Rechner erlauben, so ändert man zunächst in '''/etc/default/snmpd''' den Parameter SNMPDOPTS wie folgt: {{{ SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid' }}} Dann definiert man, welchen Rechnern man beispielsweise uneingeschränkten Lesezugriff erlauben will. Das geschieht in '''/etc/snmp/snmpd.conf''' mit folgenden Konfigurationszeilen: {{{ # com2sec paranoid default public #com2sec readonly default public rocommunity public xxx.xxx.xxx.xxx/32 rocommunity public yyy.yyy.yyy.yyy/32 com2sec readonly xxx.xxx.xxx.xxx/32 public com2sec readonly yyy.yyy.yyy.yyy/32 public }}} = 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. {{{#!vorlage Befehl snmpwalk -v1 -c private memory snmpget -v1 -c private 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, kann man den Parameter `-Oqv` für `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'''. Seit Ubuntu 10.04 sind diese in einem extra Paket nachzuinstallieren. {{{#!vorlage Paketinstallation snmp-mibs-downloader, multiverse }}} Die MIB-Dateien enthalten die Informationen, die man per SNMP abfragen und ändern kann. Ähnlich wie bei einen [wikipedia: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. * `tkmib` (aus dem gleichnamigen Paket). = 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.: {{{#!vorlage Befehl 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 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. Man fügt 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 nun die Anzahl der verfügbaren Updates (also den Ausgabewert des Befehls) mittels abfragen {{{#!vorlage Befehl snmpwalk -Oqv -v 1 -c private localhost .1.3.6.1.3.1.1984.1.4 }}} = Links = * [http://mathias-kettner.de/lw_snmp_mibs_fehlen_ubuntu.html SNMP MIBs fehlen unter Debian 6.0 und Ubuntu] {de} - Blogbeitrag 04/2011 #tag: Netzwerk, Internet, System, Sicherheit, Server