# SNMP Aktivieren

# VMware ESXi: SNMPv3 maximal sicher aktivieren und verfügbare Algorithmen prüfen

## Ziel

Diese Anleitung beschreibt, wie auf einem VMware ESXi-Host SNMPv3 sicher aktiviert wird. Dabei wird die stärkste von ESXi unterstützte SNMPv3-Kombination verwendet:

```
Authentifizierung: SHA1
Verschlüsselung: AES128
Sicherheitslevel: priv / authPriv
```

**Wichtiger Realitätscheck:** ESXi unterstützt für lokale SNMPv3-Benutzer nicht automatisch moderne Kombinationen wie SHA256 oder AES256. Die tatsächlich verfügbaren Algorithmen müssen immer direkt auf dem jeweiligen ESXi-Host geprüft werden. Nach aktuellem Stand ist bei ESXi für lokale SNMPv3-Benutzer die stärkste übliche Kombination `SHA1` mit `AES128` und dem Sicherheitslevel `priv`.

Beispielhost:

```
ESXi_1
```

Die Befehle werden direkt auf dem ESXi-Host als `root` ausgeführt.

---

## Sicherheitsprinzip

Die Konfiguration folgt diesen Sicherheitsregeln:

- SNMPv3 verwenden, nicht SNMPv1 oder SNMPv2c.
- SNMPv3 mit Authentifizierung und Verschlüsselung verwenden.
- Als stärkste ESXi-Standardkombination `SHA1` und `AES128` setzen.
- Sicherheitslevel `priv` verwenden.
- SNMP-Zugriff per ESXi-Firewall nur vom Monitoring-System erlauben.
- Keine SNMP-Passwörter, Auth-Hashes oder Priv-Hashes in BookStack speichern.
- SSH nur während der Einrichtung aktivieren und danach wieder deaktivieren.
- SNMPv1/v2c-Communities entfernen oder leer lassen.

---

## Voraussetzungen

- Zugriff auf den ESXi Host Client oder direkten Konsolenzugriff
- Root-Zugang oder administrativer ESXi-Benutzer
- Management-IP des ESXi-Hosts
- IP-Adresse des Monitoring-Systems
- SSH-Client auf dem Administrationsrechner
- Geplanter SNMPv3-Benutzername
- Starkes Authentifizierungsgeheimnis
- Starkes Privacy-Geheimnis

Beispielwerte in dieser Anleitung:

```
ESXi-Host:          192.168.1.50
Monitoring-System: 192.168.1.20
Administrations-PC: 192.168.1.10
SNMP-Benutzer:     snmp_monitor
```

**Nicht in BookStack dokumentieren:**

```
Auth-Passwort
Priv-Passwort
Auth-Hash
Priv-Hash
```

---

## Verfügbare SNMPv3-Algorithmen auf dem ESXi-Host prüfen

Bevor die Konfiguration gesetzt wird, müssen die tatsächlich unterstützten Werte direkt auf dem ESXi-Host geprüft werden.

SNMP-Konfigurationsoptionen anzeigen:

```bash
esxcli system snmp set --help
```

In der Ausgabe sind besonders diese Optionen wichtig:

```
--authentication
--privacy
--users
```

Typische unterstützte Werte bei ESXi:

```
Authentication:
  SHA1
  none
  reset

Privacy:
  AES128
  none
  reset

User Security Model:
  none
  auth
  priv
```

Bewertung der Werte:

<table id="bkmrk-algo-tabelle"><thead><tr><th>Bereich</th><th>Wert</th><th>Bewertung</th></tr></thead><tbody><tr><td>Authentication</td><td>none</td><td>Nicht sicher, nicht verwenden</td></tr><tr><td>Authentication</td><td>MD5</td><td>Falls vorhanden: veraltet, nicht verwenden</td></tr><tr><td>Authentication</td><td>SHA1</td><td>Stärkste übliche ESXi-Option für SNMPv3 Authentication</td></tr><tr><td>Privacy</td><td>none</td><td>Nicht sicher, nicht verwenden</td></tr><tr><td>Privacy</td><td>AES128</td><td>Stärkste übliche ESXi-Option für SNMPv3 Privacy</td></tr><tr><td>Security Level</td><td>none</td><td>Nicht sicher, nicht verwenden</td></tr><tr><td>Security Level</td><td>auth</td><td>Authentifiziert, aber nicht verschlüsselt</td></tr><tr><td>Security Level</td><td>priv</td><td>Authentifiziert und verschlüsselt, verwenden</td></tr></tbody></table>

Für eine sichere ESXi-SNMPv3-Konfiguration wird daher verwendet:

```
SHA1 + AES128 + priv
```

---

## Aktuelle SNMP-Konfiguration prüfen

Vor Änderungen zuerst die aktuelle Konfiguration anzeigen:

```bash
esxcli system snmp get
```

Wichtige Felder:

```
Authentication
Privacy
Enable
Engineid
Communities
Users
Remoteusers
Targets
V3targets
```

Wenn unter `Communities` noch Werte eingetragen sind, kann SNMPv1 oder SNMPv2c verwendet werden. Für eine sichere SNMPv3-only-Konfiguration sollten Communities entfernt werden.

---

## SSH-Dienst auf ESXi temporär aktivieren

SSH wird nur für die Einrichtung benötigt. Danach sollte SSH wieder deaktiviert werden.

### Variante 1: Über den ESXi Host Client

Im Browser den ESXi Host Client öffnen:

```
https://<ESXI-IP>/ui
```

Danach anmelden und den SSH-Dienst starten. Je nach ESXi-Version befindet sich der Dienst unter:

```
Host > Verwalten > Dienste
```

Dort den Dienst auswählen:

```
TSM-SSH
```

### Variante 2: Über die ESXi Shell

SSH-Dienst aktivieren:

```bash
vim-cmd hostsvc/enable_ssh
```

SSH-Dienst starten:

```bash
vim-cmd hostsvc/start_ssh
```

SSH-Firewall-Regel aktivieren:

```bash
esxcli network firewall ruleset set --ruleset-id sshServer --enabled true
```

SSH-Status prüfen:

```bash
/etc/init.d/SSH status
```

---

## SSH-Login testen

Vom Administrationsrechner aus per SSH verbinden:

```bash
ssh root@<ESXI-IP>
```

Beispiel:

```bash
ssh root@192.168.1.50
```

Bei der ersten Verbindung muss der Host-Key geprüft und bestätigt werden.

---

## SSH-Firewall auf Administrations-IP einschränken

Wenn SSH während der Einrichtung erreichbar sein muss, sollte der Zugriff nicht von überall erlaubt sein. Der Zugriff sollte nur von der Administrations-IP oder vom Administrationsnetz erlaubt werden.

Aktuelle erlaubte IPs für SSH anzeigen:

```bash
esxcli network firewall ruleset allowedip list --ruleset-id sshServer
```

Zugriff von allen IPs deaktivieren:

```bash
esxcli network firewall ruleset set --ruleset-id sshServer --allowed-all false
```

Administrations-IP erlauben:

```bash
esxcli network firewall ruleset allowedip add --ruleset-id sshServer --ip-address <ADMIN-IP>
```

Beispiel:

```bash
esxcli network firewall ruleset allowedip add --ruleset-id sshServer --ip-address 192.168.1.10
```

Ergebnis prüfen:

```bash
esxcli network firewall ruleset allowedip list --ruleset-id sshServer
```

---

## SNMPv1/v2c-Communities entfernen

Für eine SNMPv3-only-Konfiguration sollten keine Community Strings gesetzt sein.

```bash
esxcli system snmp set --communities reset
```

Danach prüfen:

```bash
esxcli system snmp get
```

Das Feld `Communities` sollte leer sein.

---

## SNMPv3-Authentifizierung und Verschlüsselung setzen

Jetzt werden die stärksten von ESXi unterstützten Standardwerte gesetzt:

```bash
esxcli system snmp set --authentication SHA1
esxcli system snmp set --privacy AES128
```

Alternativ als Kurzform:

```bash
esxcli system snmp set -a SHA1 -x AES128
```

Konfiguration prüfen:

```bash
esxcli system snmp get
```

Erwartete Werte:

```
Authentication: SHA1
Privacy: AES128
```

---

## SNMP Engine ID prüfen

Die SNMPv3-Hashes werden an die Engine ID des ESXi-SNMP-Agents gebunden. Deshalb sollte die Engine ID vor der Hash-Erzeugung geprüft werden.

```bash
esxcli system snmp get
```

In der Ausgabe das Feld prüfen:

```
Engineid
```

**Wichtig:** Wenn die Engine ID später geändert wird, passen die bereits erzeugten SNMPv3-Hashes nicht mehr. Dann müssen Auth-Hash und Priv-Hash neu erzeugt werden.

---

## Starke geheime Werte vorbereiten

Für SNMPv3 werden zwei verschiedene geheime Werte empfohlen:

- **Auth-Secret:** Wird für die Authentifizierung verwendet.
- **Priv-Secret:** Wird für die Verschlüsselung verwendet.

Empfehlung:

- Mindestens 20 Zeichen
- Großbuchstaben
- Kleinbuchstaben
- Zahlen
- Sonderzeichen
- Auth-Secret und Priv-Secret niemals identisch wählen
- Nicht in BookStack speichern
- Nicht in Tickets, Chatverläufen oder Screenshots ablegen

---

## SNMPv3-Hashes erzeugen

ESXi speichert beim Benutzer nicht die Klartext-Geheimnisse, sondern lokalisierte Hashes. Diese werden mit dem folgenden Befehl erzeugt.

**Sicherheitswarnung:** Die Klartext-Geheimnisse sollten nicht dauerhaft dokumentiert werden. Nach der Hash-Erzeugung dürfen weder Geheimnisse noch Hashes in BookStack eingetragen werden.

Hash-Erzeugung starten:

```bash
esxcli system snmp hash --auth-hash '<AUTH-SECRET>' --priv-hash '<PRIV-SECRET>' --raw-secret
```

Beispiel mit Platzhaltern:

```bash
esxcli system snmp hash --auth-hash 'AUTH_SECRET_NICHT_DOKUMENTIEREN' --priv-hash 'PRIV_SECRET_NICHT_DOKUMENTIEREN' --raw-secret
```

Beispielausgabe:

```
Authhash: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Privhash: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
```

**Wichtig:** Die hier gezeigten Hashes sind Platzhalter. Echte Hashes dürfen nicht in dieser Anleitung gespeichert werden.

---

## SNMPv3-Benutzer mit höchstem Sicherheitslevel setzen

Der SNMPv3-Benutzer wird mit Auth-Hash, Priv-Hash und Sicherheitslevel `priv` gesetzt.

Format:

```
BENUTZERNAME/AUTH-HASH/PRIV-HASH/priv
```

Befehl:

```bash
esxcli system snmp set --users snmp_monitor/<AUTH-HASH>/<PRIV-HASH>/priv
```

Beispiel mit Platzhaltern:

```bash
esxcli system snmp set --users snmp_monitor/FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/priv
```

Der Sicherheitslevel `priv` bedeutet:

- Authentifizierung ist aktiv.
- Verschlüsselung ist aktiv.
- Das entspricht SNMPv3 `authPriv`.

---

## ESXi-Firewall für SNMP einschränken

SNMP sollte nur vom Monitoring-System erreichbar sein. Nicht vom gesamten Netz. Nicht vom Internet. Nicht von irgendeinem vergessenen Testsystem, das seit 2017 niemand mehr anfassen wollte.

SNMP-Firewall-Regel prüfen:

```bash
esxcli network firewall ruleset list --ruleset-id snmp
```

Aktuelle erlaubte IPs anzeigen:

```bash
esxcli network firewall ruleset allowedip list --ruleset-id snmp
```

Zugriff von allen IPs deaktivieren:

```bash
esxcli network firewall ruleset set --ruleset-id snmp --allowed-all false
```

Nur das Monitoring-System erlauben:

```bash
esxcli network firewall ruleset allowedip add --ruleset-id snmp --ip-address <MONITORING-IP>
```

Beispiel:

```bash
esxcli network firewall ruleset allowedip add --ruleset-id snmp --ip-address 192.168.1.20
```

SNMP-Firewall-Regel aktivieren:

```bash
esxcli network firewall ruleset set --ruleset-id snmp --enabled true
```

Ergebnis prüfen:

```bash
esxcli network firewall ruleset allowedip list --ruleset-id snmp
```

Erwartet ist, dass nur die Monitoring-IP oder das freigegebene Monitoring-Netz angezeigt wird.

---

## SNMP-Dienst aktivieren

Nachdem Authentifizierung, Verschlüsselung, Benutzer und Firewall gesetzt sind, wird SNMP aktiviert.

```bash
esxcli system snmp set --enable true
```

Status prüfen:

```bash
esxcli system snmp get
```

Erwartete Werte:

```
Enable: true
Authentication: SHA1
Privacy: AES128
Users: snmp_monitor/.../.../priv
Communities:
```

Das Feld `Communities` sollte leer sein.

---

## SNMPv3 testen

### Test auf dem ESXi-Host

Der ESXi-interne Test kann verwendet werden, um die SNMP-Konfiguration zu prüfen:

```bash
esxcli system snmp test -u snmp_monitor -A '<AUTH-SECRET>' -X '<PRIV-SECRET>' --raw-secret
```

Hinweis: Der Test ist besonders für Trap- oder Inform-Konfigurationen relevant. Bei reinem SNMP-Polling sollte zusätzlich vom Monitoring-System aus getestet werden.

### Test vom Monitoring-System

Vom Monitoring-System aus kann SNMPv3 beispielsweise mit einem SNMP-Client getestet werden.

```bash
snmpwalk -v3 -l authPriv -u snmp_monitor -a SHA -A '<AUTH-SECRET>' -x AES -X '<PRIV-SECRET>' <ESXI-IP> 1.3.6.1.2.1.1
```

Beispiel:

```bash
snmpwalk -v3 -l authPriv -u snmp_monitor -a SHA -A '<AUTH-SECRET>' -x AES -X '<PRIV-SECRET>' 192.168.1.50 1.3.6.1.2.1.1
```

Wenn der Test erfolgreich ist, sollten SNMP-Systeminformationen des ESXi-Hosts zurückgegeben werden.

---

## Komplette Konfiguration prüfen

SNMP-Konfiguration anzeigen:

```bash
esxcli system snmp get
```

SNMP-Firewall-Regel prüfen:

```bash
esxcli network firewall ruleset list --ruleset-id snmp
```

Erlaubte SNMP-Quell-IP prüfen:

```bash
esxcli network firewall ruleset allowedip list --ruleset-id snmp
```

SSH-Status prüfen:

```bash
/etc/init.d/SSH status
```

---

## SSH nach der Einrichtung wieder deaktivieren

Wenn SSH nicht dauerhaft benötigt wird, sollte der Dienst nach der SNMP-Konfiguration wieder deaktiviert werden.

SSH stoppen:

```bash
vim-cmd hostsvc/stop_ssh
```

SSH deaktivieren:

```bash
vim-cmd hostsvc/disable_ssh
```

SSH-Firewall-Regel deaktivieren:

```bash
esxcli network firewall ruleset set --ruleset-id sshServer --enabled false
```

Status prüfen:

```bash
/etc/init.d/SSH status
```

---

## Beispiel: Komplette sichere SNMPv3-Konfiguration

Die folgenden Befehle zeigen den Ablauf mit Platzhaltern. Echte Geheimnisse und Hashes nicht in BookStack speichern.

```bash
esxcli system snmp set --help
esxcli system snmp get

esxcli system snmp set --communities reset
esxcli system snmp set --authentication SHA1
esxcli system snmp set --privacy AES128

esxcli system snmp hash --auth-hash '<AUTH-SECRET>' --priv-hash '<PRIV-SECRET>' --raw-secret

esxcli system snmp set --users snmp_monitor/<AUTH-HASH>/<PRIV-HASH>/priv

esxcli network firewall ruleset set --ruleset-id snmp --allowed-all false
esxcli network firewall ruleset allowedip add --ruleset-id snmp --ip-address <MONITORING-IP>
esxcli network firewall ruleset set --ruleset-id snmp --enabled true

esxcli system snmp set --enable true

esxcli system snmp get
esxcli network firewall ruleset list --ruleset-id snmp
esxcli network firewall ruleset allowedip list --ruleset-id snmp
```

---

## Härtungs-Checkliste

<table id="bkmrk-haertung-tabelle"><thead><tr><th>Prüfpunkt</th><th>Sollwert</th></tr></thead><tbody><tr><td>SNMP-Version</td><td>Nur SNMPv3 verwenden</td></tr><tr><td>Communities</td><td>Leer oder zurückgesetzt</td></tr><tr><td>Authentication</td><td>SHA1</td></tr><tr><td>Privacy</td><td>AES128</td></tr><tr><td>SNMPv3 Security Level</td><td>priv / authPriv</td></tr><tr><td>SNMP-Firewall</td><td>Nur Monitoring-IP erlaubt</td></tr><tr><td>SSH</td><td>Nach Einrichtung deaktiviert</td></tr><tr><td>Geheimnisse</td><td>Nicht in BookStack gespeichert</td></tr><tr><td>Hashes</td><td>Nicht öffentlich dokumentiert</td></tr><tr><td>Management-Netz</td><td>Separates Management-VLAN empfohlen</td></tr></tbody></table>

---

## Fehlerbehebung

### Algorithmus wird nicht akzeptiert

Wenn ein Algorithmus nicht akzeptiert wird, zuerst die unterstützten Werte anzeigen:

```bash
esxcli system snmp set --help
```

Nur Werte verwenden, die dort explizit aufgeführt sind.

### Monitoring-System erreicht ESXi nicht

Firewall-Regel und erlaubte IPs prüfen:

```bash
esxcli network firewall ruleset list --ruleset-id snmp
esxcli network firewall ruleset allowedip list --ruleset-id snmp
```

Die IP des Monitoring-Systems muss in der erlaubten Liste stehen.

### SNMPv3-Login schlägt fehl

Mögliche Ursachen:

- Auth-Secret oder Priv-Secret falsch eingegeben
- Auth-Hash oder Priv-Hash vertauscht
- Engine ID wurde nach der Hash-Erzeugung geändert
- Monitoring-System verwendet nicht `authPriv`
- Monitoring-System verwendet nicht `SHA` und `AES`
- SNMP-Firewall erlaubt die Monitoring-IP nicht

---

## Sicherheitshinweise

- SNMPv3 mit `priv` verwenden.
- SNMPv1 und SNMPv2c nicht verwenden.
- Keine Community Strings konfigurieren.
- Keine Passwörter oder Hashes in BookStack speichern.
- SNMP-Zugriff per Firewall auf Monitoring-Systeme begrenzen.
- Management-IP nicht aus normalen Client-Netzen erreichbar machen.
- SSH nur temporär aktivieren.
- Nach der Einrichtung SSH wieder deaktivieren.
- SNMP-Zugangsdaten regelmäßig nach internem Sicherheitskonzept rotieren.
- Bei Änderung der Engine ID SNMPv3-Hashes neu erzeugen.