Beitragsbaum

 

 

Für was SNMPv3?

Diese Frage stellt man sich dann, wenn man bereits ein SNMP Protokoll implementiert hat.

Wieso soll ich dat auf SNMPv3 umstellen, dat macht auch so wat es soll mit SNMPv2c

ist zwar richtig, allerdings will man ja sein Netzwerk optimieren und auch die Sicherheit weitestgehend erhöhen. Mit so einer Einstellung würden wir heute alle noch auf 10BaseT arbeiten oder 802.1d im Netzwerk einsetzen. Man merkt schnell, die Aussage ist relativ bescheiden. Aber zurück zum Thema…

Mit der Version 3 der SNMP Protokollfamilie hat sich der Kommunikationsprozess geändert. Mit den Vorgängerversionen wurden SNMP Communities erstellt, in denen die einzelnen Netzwerkgeräte hinzugefügt wurden. In puncto Security ein reines disaster, da der community string, also der Name der Community auch gleichzeitig das Passwort darstellt. Jeder der den Community String kennt, kann teil der SNMP Community werden. Mit der Version 1 wurde der String unverschlüsselt übertragen, somit war es ein leichtes Spiel dieses mitzusniffen. Durch die Nachfolgerversion 2 wurde vom Konzept her nichts geändert bis auf die verschlüsselte Übertragung des Strings. Erst mit SNMPv3 kam die eigentliche Implementierung der Sicherheit durch die Angabe eines definierten Nutzers mit dazugehörigem Passwort und ein Verschlüsselungsverfahren des Traffics.

 

Vorbereitung

Man sollte sich vorab überlegen, wie die SNMP Konfiguration aussehen soll. Welche credentials sollen verwendet werden, wie soll die ACL aussehen oder welche Verschlüsselung des Traffics soll verwendet werden?

 

Welche Optionen gibt es denn überhaupt?

  • Access List (ACL) um die Zugriffe einzuschränken
  • ReadOnly User setzen für reine Leserechte und Abfrage der MIB’s
  • User Authentication anhand von Username und Passwort
  • Verschlüsselung des Traffics (MD5, SHA oder AES)

 

In diesem Beispiel möchte ich gerne den Username snmpagent mit dem Passwort jhZGHVvg4g! verwenden. Außerdem eine ACL generieren welche den Zugriff für SNMPv3 Abfragen nur von gezielten IP-Adressen aus erlaubt. Die Verschlüsselung sollte am besten AES oder SHA sein und den Keyphrase h6vT8jHrWq89lnc für die Verschlüsselung haben.

Wichtig wäre für die Funktionalität des SNMPv3 auf den Netzwerkgeräten außerdem ein Test. Am besten hat man von Anfang an Zugriff auf den SNMP-Server um die Konfiguration auch zu simulieren. Die beiden SNMP-Server haben die IP-Adresses 10.200.200.100 und 10.200.200.200 in diesem Beispiel. Falls das Fundament ein Linux OS ist, kann man hier auf den SNMPWALK oder SNMPGET zurückgreifen. Eine Testabfrage kann in dem Fall sysName.0 sein für die Ausgabe des Hostnamen.

 

Konfigurationsbeispiel

Für die Konfiguration von SNMPv3 wäre es sinnvoll, dass man Zugriff auf den SNMP-Server hat, welcher auch später die Agents abfragt. Somit hat man die Möglichkeit die Konfiguration auch gleich zu testen und auf Funktion zu überprüfen. Die Konfiguration für IOS/IOS-XE ist gleich, nur für NX-OS ändert sich ein bisschen was.

IOS/IOS-XE

Zuerst logging monitor. Ich will sehen was passiert und nicht blind sein. Glaubt mir, dass kann euch vor manch Fehlern und Problematiken bewahren.

# logging monitor

 

Als Nächstes würde ich den SNMP-Service abschalten. Ich will eine saubere Konfiguration ohne Altlasten. Das alte Protokoll wird nicht mehr gebraucht.

(config)# no snmp-server

 

Danach lege ich eine Standard ACL mit dem Namen snmpv3mon an. Leider lässt sich nur eine Standard ACL mit der SNMP-Konfiguration binden. Wieso auch immer das so ist, allerdings wird eine Extended ACL vom OS nicht untersützt. Cisco halt.

Ich möchte das der Zugriff von meinen beiden SNMP-Servern gestattet ist. Verwendet wird hier ein Wildcard und keine Subnetzmaske. Die IP-Adressen müssen genau matchen und werden als Host definiert durch 0.0.0.0 oder für das Verständnis 255.255.255.255 (/32) als Subnetzmaske. Außerdem möchte ich gerne jeglichen anderen Zugriff von den nicht erlaubten IP’s verwerfen und loggen. Somit wird in den Logs ein unerlaubter Zugriffsversuch dokumentiert.

(config)# ip access-list standard snmpv3mon
(config-std-nacl)# remark snmpv3 access monitoring
(config-std-nacl)# permit 10.200.200.100 0.0.0.0
(config-std-nacl)# permit 10.200.200.200 0.0.0.0
(config-std-nacl)# deny any log

 

Nun beginnt die eigentliche SNMP Konfiguration. Zunächst muss eine SNMPv3 Gruppe mit dem Namen snmpv3grp erstellt werden. Man definiert die Version des Protokolls v3 und die Zugriffsrechte priv für das Security Level authPriv, welches die Verschlüsselung des Passworts (auth) und die Verschlüsselung des Traffics (priv) definiert. Als Letztes binden wir noch unsere angelegte ACL an die Konfiguration mit access snmpv3mon.

(config)# snmp-server group snmpv3grp v3 priv access snmpv3mon

 

Jetzt muss der User samt Passwort noch angegeben werden, mit dem die Authentifizierung statt findet. Gebunden wird dieser mit der neu angelegten Gruppe und der Protokollversion. Zusätzlich definiert man die Verschlüsselungen samt Passwort und Keyphrase. Als Letztes folgt wieder die Angabe der ACL.

(config)# snmp-server user snmpagent snmpv3grp v3 auth sha jhZGHVvg4g! priv aes 128 h6vT8jHrWq89lnc access snmpv3mon

 

… und das war es auch schon. Relativ unkomplitziert und einfach zu konfigurieren. Nun kann man den Test vom SNMP-Server starten. In meinem Beispiel verwende ich ein Linux OS mit SNMPGET und der Object ID (OID) sysName.0 um mir den Hostnamen ausgeben zu lassen.

snmpget -v3 -l authPriv -u snmpagent -a SHA -A „jhZGHVvg4g!“ -x AES -X „h6vT8jHrWq89lnc“ 10.10.10.1 sysName.0

 

Der Output sollte dann ähnlich dieser sein. Nicht verwirren lassen von dem SNMPv2-MIB da dies nur der Name des Management Information Base (MIB) ist, welches dem sysName.0 zugeordnet ist.

SNMPv2-MIB::sysName.0 = STRING: switch.mgmt.loc

 

NX-OS

Bei NX-OS sieht die Syntax widerum anders aus. Für die SNMP-Konfiguration werden so genannte SNMP-Roles festgelegt. Man kann zu den zwei per default vorhandene Rollen, weitere individual definieren. Die zwei vordefinierten Rollen sind:

  • Network-Operator – Standardgruppe für SNMP-Users wenn keine spezielle Gruppe vordefiniert oder gesetzt wird.
  • Network-Admin – Diese Gruppe erlaubt es anderen SNMP-Usern eine Rolle zuzuweisen.

 

Auch hier wieder als aller Erstes logging monitor aktivieren.

# logging monitor

 

Der zweite Schritt ändert sich auch nicht. Die vorhandene SNMP-Konfiguration löschen.

(config)# no snmp-server

 

Auf NX-OS habe ich die Möglichkeit auch eine Extended anstatt eine Standard ACL anzulegen. Das ermöglicht mir noch sauber zu regulieren. Der Name der ACL bleibt gleich snmpv3mon und der Remark auch. Der feine Unterschied ist nur, dass ich nun auf die Ports genau filtern kann.

Ich möchte auch hier das der Zugriff von meinen beiden SNMP-Servern gestattet ist. Verwendet wird hier Subnetzmaske anstatt der Wildcard bei IOS/IOS-XE. Die IP-Adressen müssen genau matchen und werden als Host definiert durch 255.255.255.255 (/32) als Subnetzmaske oder für das Verständnis 0.0.0.0 als Wildcard. Desweiteren lege ich auch die Ports/Service fest, über welche die Abfrage erfolgt. Außerdem möchte ich gerne jeglichen anderen Zugriff von den nicht erlaubten IP’s verwerfen und loggen. Somit wird in den Logs ein unerlaubter Zugriffsversuch dokumentiert.

(config)# ip access-list snmpv3mon
(config-acl)# 10 remark snmpv3 access monitoring
(config-acl)# 50 permit udp 10.200.200.100/32 any eq snmp log
(config-acl)# 60 permit udp 10.200.200.100/32 any eq snmptrap log
(config-acl)# 70 permit udp 10.200.200.200/32 any eq snmp log
(config-acl)# 80 permit udp 10.200.200.200/32 any eq snmptrap log
(config-acl)# 90 deny ip any any log

 

Danach wird der User samt Rolle angelegt. Im Endeffekt wird hier keine SNMP-Gruppe sondern die SNMP-Rolle zugewiesen. Der eigentliche Unterschied zwischen den OS Varianten. Daraufhin folgt dann jeweils die Angabe des Auth und des Privs.

(config)# snmp-server user snmpagent network-operator auth sha sha jhZGHVvg4g! priv aes-128 h6vT8jHrWq89lnc

 

Als Letztes binden wir die vorher konfigurierte ACL an den SNMP-Server und SNMP-User.

(config)# snmp-server user snmpagent use-ipv4acl snmpv3mon

 

Damit ist die Konfiguration abgeschlossen und man kann diese erneut testen.

snmpget -v3 -l authPriv -u snmpagent -a SHA -A „jhZGHVvg4g!“ -x AES -X „h6vT8jHrWq89lnc“ 10.10.10.1 sysName.0

 

Auch hier sollte der Output ähnlich dieser sein.

SNMPv2-MIB::sysName.0 = STRING: switch.mgmt.loc

 

Fazit

SNMPv3 ist auf den Netzwerkgeräten schnell eingerichtet. Allerdings bleibt die Anpassung auf dem verwendeten Monitoring System aus. Hierfür müssen gegebenfalls noch die MIB’s von Cisco runtergeladen und eingespielt werden. Die Cisco verwendeten MIB’s fangen immer mit der OID 1.3.6.1.4.1.9 an. Dabei steht die 9 für den Hersteller Cisco. Beispielsweise lässt sich unter folgendem Link eine genauere Auflistung und Beschreibung dazu finden: OID tree Cisco

 

over & out,

jonsch