MCP-Server
Übersicht
Der Zabbix-MCP-Server ist ein Prozess, der es KI-Agenten ermöglicht, mithilfe des Model Context Protocol (MCP) mit Zabbix zu arbeiten. Der MCP-Server kommuniziert mit MCP-Clients und der Zabbix-API.
Mit dem MCP-Server kann ein KI-Agent:
- Hostgruppen, Vorlagengruppen, Hosts, Vorlagen, Datenpunkte, LLD-Regeln, Schnittstellen, Makros, Auslöser, Probleme, Wartungszeiträume und Daten aus dem Datenpunktverlauf abrufen (mit Ausnahme binärer Datenpunkte);
- Probleme aktualisieren: Kommentare hinzufügen, bestätigen oder die Bestätigung aufheben, den Schweregrad ändern, unterdrücken oder die Unterdrückung aufheben oder Probleme schließen;
- Wartungszeiträume erstellen, aktualisieren und löschen.
Zabbix-API-Tokens werden zur Autorisierung verwendet; die Tokens werden mit jeder Anfrage gesendet. Der Zugriff ist durch die Berechtigungen des Tokenbesitzers eingeschränkt: Nur Daten aus Hostgruppen, die für diesen Benutzer verfügbar sind, sind sichtbar, und Aktionen, zu deren Ausführung der Benutzer nicht berechtigt ist, werden abgelehnt.
Der MCP-Server ist zustandslos: Zwischen Anfragen wird keine Sitzung aufrechterhalten.
Der Zabbix-MCP-Server funktioniert möglicherweise mit älteren oder neueren Zabbix-Versionen. Die Kompatibilität wird jedoch offiziell nur für dieselbe Zabbix-Version unterstützt, die auch der MCP-Server selbst verwendet.
Siehe auch:
Installation
Das offizielle Paket zabbix-mcp-server ist im Zabbix-Repository verfügbar.
Um den Zabbix MCP server aus den Quellen zu installieren, erstellen Sie ihn mit make.
Um den Zabbix MCP server zu konfigurieren, aktualisieren Sie die Parameter der Konfigurationsdatei des MCP servers.
Mindestens die Parameter FrontendURL und AllowedIP müssen festgelegt werden.
Die standardmäßige Konfigurationsdatei (zabbix_mcp_server.conf) befindet sich unter /etc/zabbix/; sie verweigert den Zugriff auf die Tools, die am häufigsten sensible Daten offenlegen. Um ein Tool zu aktivieren, entfernen Sie die entsprechende Zeile DenyTool.
Siehe auch: Bewährte Sicherheitspraktiken
Ausführung
Um den MCP-Server zu starten, führen Sie folgenden Befehl aus:
zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf
Um die Konfigurationsdatei zu überprüfen und den Vorgang zu beenden, ohne den Server zu starten, verwenden Sie die Option -T:
zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf -T
Die folgenden Befehlszeilenoptionen werden unterstützt:
| Option | Beschreibung |
|---|---|
-c <file> |
Der Pfad zur Konfigurationsdatei. Der Standardwert ist /etc/zabbix/zabbix_mcp_server.conf. |
-T |
Die Konfigurationsdatei validieren und den Vorgang beenden. |
-h |
Hilfeinformationen anzeigen. |
-V |
Die Versionsnummer anzeigen. |
Wenn der MCP-Server aus den Quellen installiert wird, muss eine systemd-Unit manuell erstellt werden, zum Beispiel:
[Unit]
Description=Zabbix MCP server
After=network-online.target
[Service]
User=zabbix
ExecStart=/usr/local/sbin/zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
Verbinden eines MCP-Clients
Jeder MCP-Client, der den Streamable-HTTP-Transport unterstützt, kann mit dem MCP-Server verbunden werden. Die folgenden Einstellungen sind erforderlich:
| Einstellung | Wert |
|---|---|
| Transport | Streamable HTTP |
| URL | https://<host>:<ListenPort>/mcp |
| Header | Authorization: Bearer <Zabbix API token>, mit jeder Anfrage gesendet |
Jeder Benutzer muss sein eigenes API-Token konfigurieren.
Um die Einrichtung zu überprüfen, senden Sie eine einzelne Anfrage an den MCP-Server:
curl -sS https://mcp.example.com:8443/mcp \
-H "Authorization: Bearer $ZABBIX_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Der HTTP-Statuscode 200 und eine Liste der verfügbaren Tools in der Antwort bestätigen, dass der MCP-Server erreichbar ist und das Token akzeptiert; die Liste zeigt, welche Tools verfügbar sind.
Andere Statuscodes weisen auf die folgenden Probleme hin:
400- derAccept-Header enthält nicht beide vom Transport benötigten Medientypen;401- derAuthorization-Header mit dem Token fehlt;403- die Clientadresse ist nicht im ParameterAllowedIPaufgeführt.
Genehmigung und Tool-Zugriff
Wenn der MCP-Client die Formularabfrage unterstützt, muss jede Änderung vom Benutzer genehmigt werden, bevor sie an Zabbix gesendet wird. Der MCP-Client zeigt dem Benutzer an, was geändert wird, und die Änderung wird nur angewendet, wenn der Benutzer sie bestätigt. Wenn der Benutzer die Anfrage ablehnt oder verwirft, wird in Zabbix nichts geändert. Eine Genehmigung ist fünf Minuten lang und nur für die exakt angezeigte Änderung gültig. Innerhalb dieses Zeitraums kann die Genehmigung wiederverwendet werden.
Wenn der MCP-Client keine Formularabfrage unterstützt (einschließlich Clients, die nur URL-Abfragen unterstützen), werden Änderungen sofort und ohne Genehmigung angewendet. Beschränken Sie in diesem Fall die Schreib-Tools und die Berechtigungen der Zabbix-API.
Eine Genehmigung ist besonders wichtig, da die Tool-Ausgabe nicht vertrauenswürdigen Text aus überwachten Systemen enthalten kann, der einen Agent beeinflussen könnte.
Verwenden Sie AllowTool, DenyTool, AllowToolRegexp und DenyToolRegexp, um zu steuern, welche Tools der MCP-Server bereitstellt. Verweigerte Tools können weder aufgerufen noch aufgelistet werden, und auf die zugehörigen Ressourcen kann nicht zugegriffen werden.
Die Regeln AllowTool, DenyTool, AllowToolRegexp und DenyToolRegexp beschränken den MCP-Zugriff, ändern jedoch nicht die Berechtigungen des Zabbix-Tokens. Wenn die Frontend-Adresse einem KI-Agent offengelegt wird, kann der Agent versuchen, direkte API-Aufrufe zu senden. Halten Sie den Speicherort des Zabbix-Frontends und die Konfiguration des MCP-Servers für den Agent unzugänglich, damit Anfragen über den MCP-Server und dessen Sicherheitskontrollen geleitet werden müssen.
Best Practices für die Sicherheit
API-Tokens
Authentifizierung und Autorisierung werden vollständig von Zabbix übernommen. Der MCP-Client sendet mit jeder Anfrage ein Zabbix-API-Token; der MCP-Server leitet es weiter, ohne es zu speichern oder zu protokollieren, während Zabbix das Token validiert, Berechtigungen durchsetzt und Aktionen im Audit-Protokoll erfasst.
Verwenden Sie für jeden Agent und Benutzer ein separates, mit den geringstmöglichen Berechtigungen ausgestattetes und ablaufendes Token. Speichern Sie Tokens an einem sicheren Ort und wechseln Sie API-Tokens regelmäßig.
TLS-Verschlüsselung
Um zu verhindern, dass Token im Klartext übertragen werden, setzen Sie TLSAccept=cert und geben Sie das Zertifikat sowie den Schlüssel (TLSCertFile und TLSKeyFile) an, oder betreiben Sie den MCP-Server hinter einem vertrauenswürdigen TLS-terminierenden Reverse-Proxy und setzen Sie TLSAccept=unencrypted.
Unverschlüsseltes HTTP ist nur in einem vertrauenswürdigen Netzwerk akzeptabel.
Zugriffsbeschränkungen
Beschränken Sie den Parameter AllowedIP auf die Adressen vertrauenswürdiger MCP-Clients und verwenden Sie Zabbix-Berechtigungen, um einzuschränken, was API-Token tun können.
Der MCP-Server bietet keine Ratenbegrenzung für Anfragen. Jede MCP-Anfrage führt normalerweise zu einem Zabbix-API-Aufruf, obwohl ein in einer Schleife ausgeführter Agent dennoch eine erhebliche Last erzeugen kann.
Schutz sensibler Daten
Datenpunktschlüssel können Zugangsdaten enthalten (zum Beispiel in SSH-, JMX-, ODBC- und HTTP-Agent-Datenpunkten), Makrowerte können Passwörter und Community-Strings enthalten, Schnittstellen geben interne Adressen preis, und Werte von Protokoll- oder Textdatenpunkten können beliebige Daten enthalten.
Aus diesem Grund sind die Tools item_get, lld_get, interface_get, macro_get und history_get in der ausgelieferten Konfigurationsdatei standardmäßig deaktiviert.
Um zu verhindern, dass sensible Makrowerte dem LLM-Anbieter des verbundenen Agents offengelegt werden, verwenden Sie geheime Makros; ihre Werte werden von der API niemals zurückgegeben.