Der Autor hat das Internet Archive dazu ausgewählt, im Rahmen des Programms Write for DOnations eine Spende zu erhalten.
Ein großer Teil der Tätigkeit eines Systemadministrators besteht darin, genaue Informationen über Ihre Server und Infrastruktur zu sammeln. Es gibt eine Reihe von Tools und Optionen, die zur Sammlung und Verarbeitung dieser Informationen dienen. Viele von ihnen basieren auf einer Technologie namens SNMP.
SNMP steht für Simple Network Management Protokol, einfaches Netzwerkverwaltungs-Protokoll. Es ist eine Methode, mit der Server Informationen über ihren aktuellen Status austauschen können, sowie ein Kanal, über den ein Administrator vordefinierte Werte ändern kann. Während das Protokoll selbst schlank ist, kann die Struktur von Programmen, die SNMP implementieren, schnell an Komplexität zunehmen. Weitere Informationen zu den Grundlagen des SNMP-Protokolls finden Sie in unserem Artikel Eine Einführung in SNMP.
In diesem Tutorial richten Sie die Tools zur Kommunikation mit SNMP ein. Zur Demonstration verwenden Sie zwei Ubuntu 18.04-Server. Einer enthält den SNMP-Manager, der mit dem Agenten zur Implementierung von Netzwerkgeräten spricht. Dieser wird als Manager-Server bezeichnet. Der andere Server enthält den SNMP-Agenten, der auf die Befehle des Manager-Servers reagiert. Dieser wird als Agenten-Server bezeichnet. Sie könnten sich dafür entscheiden, den Agenten auch auf dem Manager-Rechner zu installieren, aber wenn sie getrennt gehalten werden, lässt sich leichter zeigen, welche Funktionalität von jeder Komponente bereitgestellt wird.
Um dieser Anleitung zu folgen, benötigen Sie:
ufw
konfigurierten Firewall.Um herauszufinden, wie SNMP auf einem System implementiert werden kann, beginnen Sie mit der Installation des Daemons und der Tools auf Ihren Ubuntu-Servern.
Melden Sie sich von Ihrem lokalen Rechner aus als Ihr non-root user am Manager-Server an:
- ssh your_username@manager_server_ip_address
Aktualisieren Sie den Paketindex für den APT-Paketmanager:
- sudo apt update
Installieren Sie anschließend die SNMP-Software:
- sudo apt install snmp snmp-mibs-downloader
Das Paket snmp
bietet eine Sammlung von Befehlszeilen-Tools zur Ausgabe von SNMP-Anfragen an Agenten. Das Paket snmp-mibs-downloader
hilft bei der Installation und Verwaltung von Management Information Base (MIB)-Dateien, die Netzwerkobjekte verfolgen.
Öffnen Sie dann ein neues Terminal auf Ihrem lokalen Rechner und melden Sie sich bei dem Agenten-Server an:
- ssh your_username@agent_server_ip_address
Aktualisieren Sie auf dem Agenten-Server den Paketindex:
- sudo apt update
Installieren Sie dann den SNMP-Daemon
- sudo apt install snmpd
Beachten Sie, dass Sie das Paket snmp-mibs-downloader
nicht benötigen, da der Agenten-Server keine MIB-Dateien verwaltet.
Nachdem Sie nun diese Komponenten installiert haben, konfigurieren Sie Ihren Manager-Server.
Wie bereits erwähnt, wird der Großteil der Arbeit auf dem Agenten-Server stattfinden, sodass Ihre Konfiguration auf dem Manager-Server weniger aufwendig ist. Um sicherzustellen, dass SNMP-Tools die von Ihnen installierten zusätzlichen MIB-Daten verwenden können, müssen Sie nur eine Datei ändern.
Öffnen Sie auf Ihrem Manager-Server die Datei /etc/snmp/snmp.conf
in Ihrem Texteditor mit sudo-Berechtigungen. Dieses Tutorial verwendet nano
:
- sudo nano /etc/snmp/snmp.conf
In dieser Datei gibt es einige Kommentare und eine einzige unkommentierte Zeile. Damit der Manager die MIB-Dateien importieren kann, kommentieren Sie die Zeile mibs :
aus:
# As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loading them by commenting out the following line.
#mibs :
Speichern und schließen Sie snmp.conf
, indem Sie STRG+X
drücken, gefolgt von Y
und dann der Eingabetaste
, wenn Sie nano
verwenden.
Die Konfiguration des Manager-Servers ist nun abgeschlossen, aber Sie müssen diesen Server immer noch verwenden, um bei der Konfiguration Ihres Agenten-Servers zu helfen, was Sie im nächsten Schritt tun werden.
Als echtes Client-Server-System verfügt der Agenten-Server über keine der externen Tools, die zur Konfiguration seiner eigenen SNMP-Einrichtung erforderlich sind. Sie können einige Konfigurationsdateien ändern, um einige Änderungen vorzunehmen, aber die meisten Änderungen, die Sie vornehmen müssen, werden durch eine Verbindung zu Ihrem Agenten-Server von Ihrem Management-Server aus vorgenommen.
In diesem Tutorial verwenden Sie Version 3 des SNMP-Protokolls. Im Gegensatz zu SNMPv1 und v2 enthält bei SNMPv3 jede Nachricht Sicherheitsparameter, die verschlüsselt sind. In diesem Schritt konfigurieren Sie die SNMPv3-Authentifizierungs- und Zugriffskontrollregeln.
Um zu beginnen, öffnen Sie auf Ihrem Agenten-Server die Konfigurationsdatei des Daemons mit sudo-Berechtigungen:
- sudo nano /etc/snmp/snmpd.conf
Sie müssen einige Änderungen darin vornehmen. Diese werden hauptsächlich für das Bootstrapping Ihrer Konfiguration verwendet, damit Sie diese von Ihrem anderen Server aus verwalten können.
Zuerst müssen Sie die Anweisung agentAddress
ändern. Momentan ist sie so eingestellt, dass sie nur vom lokalen Rechner ausgehende Verbindungen zulässt. Sie müssen die aktuelle Zeile auskommentieren und die Zeile darunter, die alle Verbindungen ermöglicht, entkommentieren.
# Listen for connections from the local system only
#agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161
Anmerkung: Da das Zulassen aller Verbindungen auf diese Art keine optimale Sicherheitspraxis ist, empfiehlt es sich, diese bald wieder zu sperren, nachdem das Bootstrapping abgeschlossen ist.
Als Nächstes fügen Sie vorübergehend eine Zeile createUser
ein. Diese Anweisungen werden normalerweise nicht in dieser Datei aufbewahrt; Sie werden sie in Kürze wieder entfernen.
Der Benutzer, den Sie erstellen, wird als bootstrap bezeichnet und wird als Vorlage verwendet, in der Sie Ihren ersten tatsächlichen Benutzer erstellen. Die SNMP-Pakete führen dies durch das Klonen der Eigenschaften des Benutzers aus.
Wenn Sie einen neuen Benutzer definieren, müssen Sie den Authentifizierungstyp (MD5 oder SHA) angeben und eine Passphrase mit mindestens acht Zeichen bereitstellen. Wenn Sie vorhaben, die Übertragung zu verschlüsseln, wie Sie es in diesem Tutorial tun werden, müssen Sie auch das Datenschutzprotokoll (DES oder AES) und optional eine Datenschutzprotokoll-Passphrase angeben. Wenn keine Passphrase für das Datenschutzprotokoll angegeben wird, wird die Authentifizierungs-Passphrase auch für das Datenschutzprotokoll verwendet.
Fügen Sie diese Zeile createUser
am Ende der Datei hinzu:
...
createUser bootstrap MD5 temp_password DES
Nachdem Sie nun einen neuen Benutzer angegeben haben, können Sie die Zugriffsebene einrichten, die dieser Benutzer haben wird. In diesem Tutorial richten Sie diesen für Ihren Benutzer bootstrap als auch für den neuen Benutzer demo ein, den Sie anlegen werden. Sie werden Ihnen Lese- und Schreibberechtigungen erteilen, indem Sie die Anweisung rwuser
verwenden (die Alternative ist rouser
für den Nur-Lese-Zugriff).
Sie werden auch die Verwendung der Verschlüsselung erzwingen, indem Sie nach dem Benutzer priv
angeben. Wenn Sie den Benutzer auf einen bestimmten Teil der MIB beschränken möchten, können Sie am Ende der Zeile den höchsten Objektidentifikator (OID) angeben, auf den der Benutzer Zugriff haben soll.
Für die Zwecke dieses Tutorials werden Ihre beiden Zeilen wie folgt aussehen:
...
rwuser bootstrap priv
rwuser demo priv
Wenn Sie mit diesen Änderungen fertig sind, speichern und schließen Sie die Datei.
Um diese Änderungen zu implementieren, starten Sie den Dienst snmpd
auf Ihrem Agenten-Server neu:
- sudo systemctl restart snmpd
Der SNMP-Daemon horcht auf Port :161
auf Verbindungen. Konfigurieren Sie UFW, um Verbindungen vom Manager-Server zu diesem Port zu erlauben:
- sudo ufw allow from manager_server_ip_address to any port 161
Mehr über UFW erfahren Sie in Einrichten einer Firewall mit UFW unter Ubuntu 18.04.
Nachdem nun der Agenten-Server konfiguriert ist, können Sie sich über den Manager-Server mit Ihrem Agenten-Server verbinden, um die Verbindung zu überprüfen.
In diesem Schritt führen Sie einen Test durch, um sicherzustellen, dass Sie mit Ihrem Konto bootstrap eine Verbindung zum Agenten-Server herstellen können. Zuvor wird in diesem Tutorial jedoch ein wenig über die allgemeine Struktur des Sendens eines SNMP-Befehls gesprochen.
Wenn Sie die in dem Paket snmp
(die net-snmp
Software Suite) enthaltenen Tools verwenden, gibt es einige Muster, wie Sie die Befehle aufrufen müssen. Als Erstes müssen Sie sich bei dem SNMP-Daemon authentifizieren, mit dem Sie kommunizieren möchten. Dazu müssen in der Regel einige Informationen bereitgestellt werden. Die häufigsten sind die folgenden:
-v
: Dieses Flag wird zur Angabe der Version des SNMP-Protokolls verwendet, die Sie verwenden möchten. Dieses Tutorial verwendet v3.-c
: Dieses Flag wird verwendet, wenn Sie SNMP v1 oder v2-ähnliche Community-Strings zur Authentifizierung verwenden. Da Sie eine benutzerbasierte Authentifizierung im Stil von v3 verwenden, brauchen Sie dies nicht zu tun.-u
: Dieser Parameter wird verwendet, um den Benutzernamen anzugeben, als den Sie sich authentifizieren möchten. Um mit SNMP etwas zu lesen oder zu ändern, müssen Sie sich mit einem bekannten Benutzernamen authentifizieren.-l
: Dieser Parameter wird verwendet, um die Sicherheitsebene anzugeben, mit der Sie sich verbinden. Die möglichen Werte sind noAuthNoPriv
für keine Authentifizierung und keine Verschlüsselung, authNoPriv
für die Authentifizierung aber keine Verschlüsselung sowie authPriv
für die Authentifizierung und Verschlüsselung. Der Benutzername, den Sie verwenden, muss so konfiguriert sein, dass er auf der von Ihnen angegebenen Sicherheitsstufe funktioniert, sonst wird die Authentifizierung nicht erfolgreich sein.-a
: Dieser Parameter wird verwendet, um das verwendete Authentifizierungsprotokoll anzugeben. Die möglichen Werte sind MD5
oder SHA
. Dies muss mit den Informationen übereinstimmen, die beim Anlegen des Benutzers angegeben wurden.-x
: Dieser Parameter wird verwendet, um das verwendete Verschlüsselungsprotokoll anzugeben. Die möglichen Werte sind DES
oder AES
. Dies muss mit den Informationen übereinstimmen, die beim Anlegen des Benutzers angegeben wurden. Dies ist immer dann erforderlich, wenn die Berechtigungsspezifikation des Benutzers priv
dahinter enthält, wodurch die Verschlüsselung obligatorisch wird.-A
: Wird verwendet, um die Authentifizierungs-Passphrase anzugeben, die bei der Erstellung des Benutzers angegeben wurde.-X
: Dies ist die Verschlüsselungs-Passphrase, die bei der Erstellung des Benutzers angegeben wurde. Wenn keine Passphrase aber ein Verschlüsselungsalgorithmus angegeben wurde, wird die Authentifizierungs-Passphrase verwendet. Dies ist erforderlich, wenn der Parameter -x
angegeben wird oder wenn die Berechtigungsspezifikation eines Benutzers ein priv
dahinter hat, das eine Verschlüsselung erfordert.Anhand dieser Informationen können Sie Ihre Befehle erstellen. In Anbetracht der Art und Weise, wie Sie Ihren Benutzer bootstrap einrichten, werden die Befehle, die Sie mit diesem Konto verwenden, wie folgt aussehen:
snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host snmp_sub_command_or_options
Testen Sie von Ihrem Manager-Server aus, um sicherzustellen, dass Ihr Konto bootstrap verfügbar ist. Geben Sie Folgendes ein, um die Systeminformationen für den Agenten-Server anzuzeigen:
- snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address 1.3.6.1.2.1.1.1.0
Die Zeichenfolge 1.3.6.1.2.1.1.1.0
ist die OID, die für die Anzeige von Systeminformationen verantwortlich ist. Sie gibt die Ausgabe von uname -a
auf dem Remote-System zurück.
Dadurch erhalten Sie folgenden Output:
OutputSNMPv2-MIB::sysDescr.0 = STRING: Linux agent 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64
Nachdem Sie nun überprüft haben, dass Sie sich auf dem Server, auf dem der SNMP-Daemon ausgeführt wird, authentifizieren können, können Sie mit der Erstellung Ihres regulären Benutzerkontos fortfahren.
Obwohl Sie die Berechtigungen für das Benutzerkonto demo in der Datei snmpd.conf
angegeben haben, haben Sie diesen Benutzer noch nicht wirklich erstellt. In diesem Schritt verwenden Sie den Benutzer bootstrap als Vorlage für Ihren neuen Benutzer. Sie werden dies mit dem Tool snmpusm
tun, das für die Benutzerverwaltung verwendet wird.
Auf dem Manager-Server können Sie den Benutzer aus der Vorlage mithilfe des Tools snmpusm
und der folgenden allgemeinen Syntax anlegen.
snmpusm authentication_info agent_server_ip_address create new_user existing_user
Mit dem, was Sie über die zu übermittelnden Authentifizierungs-Flags wissen, und unter Nutzung des bereits vorhandenen Benutzerkontos (bootstrap) können Sie einen Benutzer erstellen, der zu den bereits definierten Benutzerrechten passt (demo).
Der Befehl sieht wie folgt aus:
- snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address create demo bootstrap
Sie erhalten die folgende Meldung:
OutputUser successfully created.
Sie haben nun einen voll funktionsfähigen Benutzer namens demo auf Ihrem Agenten-Server. Es verwendet jedoch nach wie vor die gleichen Authentifizierungsinformationen wie das Konto bootstrap. Um die Sicherheit zu erhöhen, können Sie das Passwort ändern. Dieses Mal verwenden Sie das Konto demo zur Authentifizierung. Denken Sie daran, dass Passwörter mindestens acht Zeichen lang sein müssen:
- snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address passwd temp_password new_password
Sie erhalten die folgende Meldung zurück:
OutputSNMPv3 Key(s) successfully changed.
Sie können Ihre neuen Berechtigungsnachweise und Ihr Passwort testen, indem Sie den Agenten-Server fragen, wie lange der SNMP-Dienst bereits ausgeführt wird. Sie verwenden den Befehl snmpget
, um einen einzelnen Wert von dem Agenten-Server zu erhalten.
Nutzen Sie diesmal die von Ihnen heruntergeladenen zusätzlichen MIB-Definitionen, um den Wert nach Namen anstelle der numerischen ID von OID zu erfragen.
- snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0
Sie erhalten einen Wert zurück, der das letzte Mal repräsentiert, als der entfernte SNMP-Daemon neu gestartet wurde:
OutputDISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (53309) 0:08:53.09
Sie haben nun ein funktionierendes Benutzerkonto namens demo. Im nächsten Schritt vereinfachen Sie das Arbeiten mit SNMP-Befehlen durch die Konfiguration des Client.
Sie haben zu diesem Punkt wahrscheinlich bemerkt, dass die Authentifizierungsdetails für alle Ihre SNMP-Befehle bei jeder Anfrage ziemlich statisch sind. Anstatt diese jedes Mal einzugeben, können Sie eine clientseitige Konfigurationsdatei erstellen, die die Berechtigungsnachweise enthält, mit denen Sie sich verbinden.
Die Client-Konfigurationsdatei kann an zwei verschiedenen Stellen abgelegt werden, je nachdem, wie weit Sie sie freigeben möchten.
Wenn Sie Ihre Anmeldedaten für jeden gültigen Benutzer auf Ihrem Management-Rechner freigeben möchten, können Sie Ihre Konfigurationsdetails in der globalen Datei snmp.conf
auf dem Manager-Server ablegen. Sie müssten diese Datei mit sudo-Berechtigungen öffnen:
- sudo nano /etc/snmp/snmp.conf
Wenn Sie jedoch die Berechtigungsnachweise für die Authentifizierung nur für Ihren Benutzer definieren möchten, können Sie ein verstecktes Verzeichnis .snmp
im Stammverzeichnis Ihres Benutzers auf dem Manager-Server erstellen und die Datei dort anlegen:
- mkdir ~/.snmp
- nano ~/.snmp/snmp.conf
Unabhängig von Ihrer Entscheidung, wo Sie Ihre Konfiguration ablegen, bleibt der Inhalt derselbe.
Die Befehle, die Sie zur Authentifizierung verwenden, sind in der folgenden Tabelle aufgeführt. In der rechten Spalte sehen Sie die Namen der Anweisungen, die zur Erstellung dieser Konfigurationsdetails innerhalb der Datei snmp.conf
verwendet werden:
Befehls-Flag | Beschreibung | Übersetzte snmp.conf -Anweisung |
---|---|---|
-u username |
Der SNMPv3-Benutzername, mit dem sich authentifiziert wird. | defSecurityName username |
-l authPriv |
Die Sicherheitsstufe, mit der sich authentifiziert wird. | defSecurityLevel authPriv |
-a MD5 |
Das zu verwendende Authentifizierungsprotokoll. | defAuthType MD5 |
-x DES |
Das zu verwendende Datenschutz (Verschlüsselungs)-Protokoll. | defPrivType DES |
-A passphrase |
Die Authentifizierungs-Passphrase für den angegebenen Benutzernamen. | defAuthPassphrase passphrase |
-X passphrase |
Die Datenschutz-Passphrase aus dem angegebenen Benutzernamen. | defPrivPassphrase passphrase |
Anhand dieser Informationen können Sie eine entsprechende Datei snmp.conf
erstellen. Für diesen Leitfaden sieht sie wie folgt aus:
defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase new_password
defPrivPassphrase new_password
Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei.
Sie können nun Befehle ausgeben, ohne die Authentifizierungsdetails anzugeben. Sie benötigen nur den SNMP-Befehl, den Host und die Befehlsargumente.
Anstatt einzugeben:
- snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0
Können Sie eingeben:
- snmpget agent_server_ip_address sysUpTime.0
Wie Sie sehen können, reduziert sich dadurch die Menge der Informationen, die Sie in jeder Anfrage bereitstellen müssen. Als Nächstes entfernen Sie das Konto bootstrap, um die Netzwerksicherheit zu erhöhen.
Nachdem Ihr reguläres Konto nun korrekt konfiguriert ist, können Sie das unsichere Konto bootstrap entfernen.
Öffnen Sie auf Ihrem Agenten-Server erneut die Datei /etc/snmp/snmpd.conf
mit sudo-Berechtigungen.
- sudo nano /etc/snmp/snmpd.conf
Suchen und kommentieren (oder entfernen) Sie beide Zeilen aus, die Sie zuvor hinzugefügt haben und die auf den Benutzer bootstrap verweisen:
...
#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv
...
Speichern und schließen Sie die Datei.
Starten Sie nun den SNMP-Daemon neu:
- sudo systemctl restart snmpd
Damit wird die Empfehlung erfüllt, keine Anweisung createUser
in der normalen Datei snmpd.conf
zu haben. Hierdurch werden auch Berechtigungen von dem temporären Benutzer entfernt.
Wenn Sie den Benutzer bootstrap vollständig aus der usmUserTable
entfernen möchten, können Sie dies tun, indem Sie diesen Befehl vom Manager-Server aus erteilen:
- snmpusm agent_server_ip_address delete bootstrap
Sie erhalten die folgende Antwort:
OutputUser successfully deleted.
Zu diesem Zeitpunkt haben Sie eine vollständig konfigurierte Client-Server-Einrichtung, die über das SNMP-Protokoll sicher kommunizieren kann. Sie können nun zusätzliche Daemons auf anderen Hosts hinzufügen und den Kontozugriff über Ihre gesamte Infrastruktur konfigurieren.
Für weitere Studien können Sie unser Tutorial Verwenden der Net-SNMP Tool-Suite zur Verwaltung und Überwachung von Servern verwenden, um mehr über SNMP-Tools und ihre Verwendung zum Abrufen von Werten nacheinander oder in großen Mengen sowie zum Ändern von Daten zu erfahren.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.