W poprzednim artykule o SNMP poruszyliśmy kwestie ściśle teoretyczne. Czymże jednak jest teoria bez praktyki? Dzisiaj przyjrzymy się nie tylko temu jak skonfigurować SNMP (co jest stosunkowo proste), ale również temu jak to robić mając na uwadze bezpieczeństwo sieci. Źle skonfigurowany protokół SNMP może naprawdę napsuć krwi! Na koniec przyjrzymy się pokrótce dostępnym na rynku rozwiązaniom software’owym do monitorowania sieci przy użyciu SNMP. Miłej lektury!
Wprowadzenie
SNMP nie należy do skomplikowanych protokołów. Wszystkie konfiguracje w tym artykule będą na przykładzie routera Cisco, a wykorzystywany system to IOS. Z premedytacją nie podaję tutaj konkretnego modelu urządzenia oraz wersji IOS gdyż sposób konfiguracji SNMP niemalże się wcale nie zmienił na przestrzeni lat i w więszkości przypadków jest niezależny od tych dwóch składowych. Ponadto pomijam konfigurację SNMP v1 gdyż jest to standard, który już dawno wyszedł z użycia. Ruszajmy!
UWAGA! Zanim przejdziesz do dalszej części artykułu upewnij się, że jest Ci znana terminologia związana z SNMP. Została ona opisana w pierwszej części artykułu.
Cykl artykułów o SNMP
Artykuły publikowane w ramach cyklu o SNMP można czytać niezależnie, ale najlepsze efekty osiągniesz, jeśli zapoznasz się z nimi po kolei. Cały cykl składa się z następujących artykułów:
Konfiguracja SNMP v2c
1. Konfigurację zaczynamy od włączenia SNMP oraz zdefiniowania read-only community string z poziomu priviledged exec mode:
Router(config)#snmp-server enable
Router(config)#snmp-server community public RO
W tym przypadku community string ma wartość „public”.
2. Jeżeli z jakichś powodów potrzebujesz mieć możliwość konfigurowania urządzenia za pomocą SNMP to należy skonfigurować również read-write community string:
Router(config)#snmp-server community private RW
W tym przypadku RW community string ma wartość „private”. Odradzam jednak taką konfigurację ze względów bezpieczeństwa.
3. Jeżeli chcemy mieć możliwość wysyłania trapów, to należy również skonfigurować serwer SNMP, do którego będziemy je wysyłać. Zakładam, że serwer jest osiągalny.
Router(config)#snmp‐server host 10.1.0.254 version 2c public
W komendzie powyżej podajemy oczywiście IP serwera SNMP. Zauważ ponadto, że definiujemy w tej komendzie wersję SNMP jaką chcemy używać w komunikacji z serwerem (2c) oraz podajemy read-only community string („public”).
4. SNMP na urządzeniu umożliwia nam skonfigurowanie dodatkowych parametrów, które mogą nam pozwolić w lepszej identyfikacji / dokumentacji urządzenia:
Router(config)#snmp‐server location Wroclaw
Router(config)#snmp‐server contact info@nastykusieci.pl
Możemy przykładowo wskazać lokalizację urządzenia oraz adres e-mail osoby odpowiedzialnej za nie.
5. Samo skonfigurowanie serwera SNMP nie wystarczy do wysyłania trapów! Należy jeszcze włączyć tą funkcjonalność:
Router(config)#snmp‐server enable traps
Komenda powyżej uruchomi wszystkie rodzaje trapów jakie obsługuje urządzenie. Konkretne rodzaje trapów mogą się różnić w zależności od modelu urządzenia. Możemy zobaczyć jakie trapy zostały uruchomione wyświetlając running-config:
Router#show run | include traps
snmp‐server enable traps vrrp
snmp‐server enable traps ds1
snmp‐server enable traps tty
snmp‐server enable traps eigrp
[...]
Możemy oczywiście być o wiele bardziej granularni i zamiast włączać wszystkie trapy uruchomić tylko te przez nas wybrane:
Router(config)#snmp-server enable traps frame-relay
Router(config)#snmp-server enable traps bgp
Router(config)#snmp-server enable traps snmp
6. Mamy również możliwość wysyłania różnych trapów do osobnych serwerów SNMP (NMS). Na przykład:
Router(config)#snmp‐server host 10.1.0.254 version 2c public snmp bgp
Router(config)#snmp‐server host 10.2.0.138 version 2c public snmp frame-relay
Podsumowując podstawowa konfiguracja SNMP v2c prezentuje się następująco:
Router(config)#snmp-server enable
Router(config)#snmp-server community public RO
Router(config)#snmp‐server host 10.1.0.254 version 2c public
Router(config)#snmp‐server location Wroclaw
Router(config)#snmp‐server contact info@nastykusieci.pl
Router(config)#snmp‐server enable traps
Konfiguracja SNMP v3
SNMP v3 bazuje na zupełnie innym modelu zabezpieczeń. Spośród trzech trybów konfiguracji, tutaj skupimy się na trybie auth-priv (więcej informacji na ten temat w pierwszym artykule).
1. Konfigurację zaczynamy od włączenia SNMP, uruchomienia trapów oraz skonfigurowania informacji opcjonalnych:
Router(config)#snmp-server enable
Router(config)#snmp‐server enable traps
Router(config)#snmp‐server location Wroclaw
Router(config)#snmp‐server contact info@nastykusieci.pl
2. W następnym kroku definiujemy grupę SNMP. Grupy SNMP używamy po to aby mapować użytkowników SNMP (users) z widokami SNMP (views). O widokach porozmawiamy w dalszej części artykułu. W tym miejscu musisz natomiast wiedzieć, że w SNMP v3 obligatoryjne jest skonfigurowanie użytkowników. Dlatego też musimy najpierw skonfigurować grupę, do której następnie podwiążemy użytkowników:
Router(config)#snmp-server group TEST_GROUP v3 priv
W przykładzie powyżej nadaliśmy grupie nazwę „TEST_GROUP”. Warto zauważyć, że określamy tu również wersję SNMP oraz tryb zabezpieczenia w przypadku wersji 3. Poza „priv” (oferującym szyfrowanie i uwierzytelnianie) można również skonfigurować „auth” (samo uwierzytelnianie) lub „noauth” (brak zabezpieczeń, co jest równoznaczne z używaniem community string’ów). Jeżeli nie podasz ostatniego argumentu to domyślnie zostanie użyty tryb „noauth”!
3. W dalszym kroku tworzymy użytkownika SNMP, którego mapujemy do utworzonej wcześniej grupy:
Router(config)#snmp‐server user TEST_USER TEST_GROUP v3 auth md5 STRONG_PASSWORD priv aes 128 ENCRYPT_KEY
Configuring snmpv3 USM user, persisting snmpEngineBoots. Please Wait...
Powyżej stworzyliśmy użytkownika „TEST_USER”, którego zmapowaliśmy do grupy „TEST_GROUP”. Wskazaliśmy, że używana będzie wersja 3. SNMP. Uwierzytelniania będziemy dokonywać za pomocą hash’a MD5, a hasłem użytkownika będzie „STRONG_PASSWORD”. Na koniec jako metodę szyfrowania wskazujemy AES-128, a klucz szyfrowania konfigurujemy jako „ENCRYPT_KEY”.
Ważne: skonfigurowani użytkownicy nie są widoczni w running-config. W celu wyświetlenia użytkowników należy użyć „show snmp users”.
4. W celu wysyłania trapów musimy oczywiście wskazać serwer SNMP. Ponieważ używamy SNMP v3, konieczne jest również wskazanie użytkownika:
Router(config)#snmp-server host 10.1.0.254 version 3 TEST_USER
Podsumowując podstawowa konfiguracja SNMP v3 prezentuje się następująco:
Router(config)#snmp-server enable
Router(config)#snmp‐server location Wroclaw
Router(config)#snmp‐server contact info@nastykusieci.pl
Router(config)#snmp‐server enable traps
Router(config)#snmp-server group TEST_GROUP v3 priv
Router(config)#snmp‐server user TEST_USER TEST_GROUP v3 auth md5 STRONG_PASSWORD priv aes 128 ENCRYPT_KEY
Router(config)#snmp-server host 10.1.0.254 version 3 TEST_USER
Chyba nie było tak źle? SNMP nie wymaga zapamiętania zbyt wielu komend i jest stosunkowo prosty. Oczywiście wszędzie tam gdzie możesz należy używać SNMP v3.