SNMP
SNMP, czyli Simple Network Management Protocol to bez wątpienia jeden z popularniejszych protokołów do monitoringu sieci i urządzeń, pomimo tego, że jego pierwsza wersja ukazała się w 1988 roku, to i tak znajdziemy go praktycznie w każdym urządzeniu podłączonym do sieci. Usługa działa na porcie 161 i 162 UDP/TCP. Niestety pomimo swojego sędziwego wieku i powszechności, sporo administratorów o nim zapomina, co niesie za sobą sporo zagrożeń, ale o tym w następnym poście.
Jak to działa?
Każde urządzenie wspierające protokół SNMP posiada usługę agenta, która odpowiedzialna jest za odpowiadanie na zapytania od SNMP Managera. Role managera może pełnić dowolny system monitoringu stanu urządzeń, np. Zabbix, LibreNMS, czy zwykły system z zainstalowanym odpowiednim pakietem SNMP. Agent może zostać odpytany o bieżące obciążenie interfejsów, uptime urządzenia, czy nawet jego nazwę. Parametrów o jakie możemy odpytać agenta jest bardzo dużo, dlatego każdy z nich posiada swój identyfikator OID. Object Identifier zbudowany jest z samych liczb oddzielonych kropkami np. 1.3.6.1.2.1.1.5.0. posiada ustrukturyzowany format.
OID może przechowywać klika typów wartość:
- Integer: liczba,
- OctetString: ciąg znaków,
- Counter: licznik który się zwiększa, kiedy przekroczy max liczbę(32bit bądź 64bit) zaczyna liczyć od zera,
- Gauge: to samo co Counter ale możne się tez odejmować.
Każdy ważny OID zaczyna się od 1.3. i jest częścią bazy MIB, czyli zbioru wszystkich OIDów danego urządzenia. Baza MIB nie jest zapisywana na urządzeniu, tylko dostarczona w postaci pliku tekstowego z rozszerzeniem .mib. Pamiętaj, że sama baza MIB nie jest potrzebna do konfiguracji SNMP, służy bardziej do szybszego zidentyfikowana OIDów. Przedstawia drzewo OIDów w postaci tekstowej. MIBy mogą także zawierać dodatkowe informacje, przygotowane przez producenta.
Wersje SNMP
SNMP może pracować w trybie read-only oraz write. Występuje w trzech wersja v1, v2c, v3. Na potrzeby monitoringu urządzeń komunikację ograniczamy na tylko do odczytu. Należy podejść z dużą ostrożnością przy konfigurowaniu komunikacji z poziomem write, ponieważ za pomocą edycji wartości OIDów możemy zmieniać parametry urządzenia. Niektóre systemy klasy NAC wykorzystują tą możliwość do przełączania vlanów na switchu.
SNMP v1
Z racji swojego wieku wersja SNMP v1 posiada pewne ograniczenia, które skutecznie eliminują ją z powszechnego użytku. W przypadku wersji 1 liczniki, czyli countery przechowują tylko 32 bitowe wartości. Co w praktyce nie pozwala nam monitorować interfejsów większych niż 1G, licznik po przekroczeniu maksymalnej wartości jest zerowany. Dodatkowym argumentem jest niski poziom bezpieczeństwa przesyłanych danych. Komunikacja między agentem na urządzeniu a systemem monitoringu nie jest szyfrowana, jedyne zabezpieczenie to tak zwany “community string“, który jest przesyłany otwartym tekstem, z domyślną wartością “public” dla read oraz “private” dla write. Jedyną forma zabezpieczanie jest konfiguracja konkretnych adresów IP z jakich może przychodzić komunikacja, ale to także jest złudne zabezpieczenie, wystarczy podszyć się pod serwer monitoringu, wykorzystując technikę IP Spoofingu.
SNMP v2c
Krok wyżej jest snmp w wersji v2c, działające ze zwiększoną liczbą counterów do 64 bitów, co pozwala na monitoring portów powyżej 1G, jednak kwestie bezpieczeństwa pozostały bez zmian. Dodatkowo w wersji drugiej dodano bulk queries, które pozwalają na grupowanie zapytań w jednej odpowiedzi, co znacząco wpływa na obciążenie sieci, ponieważ nie musimy tak często odpytywać urządzeń.
SNMP v3
W wersji 3 zadbano o bezpieczeństwo komunikacji:
- hasło nie jest przesyłane otwartym tekstem, ale z wykorzystaniem funkcji haszujących MD5/SHA-1
- uwierzytelnienie za pomocą loginu i hasła
- szyfrowanie pakietów za pomocą DES/3DES/AES
- dodanie unikalnego numer EngineID
SNMP v3 wspiera 3 rodzaje ustawień:
- noauthnopriv: bark szyfrowania oraz uwierzytelniania loginem i hasłem. Jedyną forma bezpieczeństwa jest username, czyli rozwiązanie podobne jak community string w wersji v2c
- authnopriv: brak szyfrowania, ale wymagane jest login i hasło
- authpriv: najbezpieczniejsza forma, oprócz loginu i hasła cały komunikacja jest zaszyfrowana
Komunikaty SNMP
Podstawowe komunikaty, które wykorzystuje SNMP:
- SNMP GET: komunikacja wychodzi z systemu monitoringu w stronę agenta na urządzeniu i odpowiedzialna jest za odczytanie jednej wartości OID’a.
- SNMP SET: pamiętasz wspominaną wcześniej opcje write? za pomocą snmp set możemy zmodyfikować wartość konkretnego OIDu
- SNMP WALK: przejście przez całe drzewo OIDów
- SNMP TRAP: komunikacja od agenta do systemu monitoringu z wykorzystanie portu tcp 162(przy snmp v3). Informacje są wysyłane w przypadku zmiany wartości OID’a. Taka zmianą może być na przykład odłączenie kabla od portu w switchu.
Jak to wygląda w praktyce?
Teoria, teoria, ale sprawdźmy jak to wygląda w praktyce. W pierwszej kolejności zaczniemy od konfiguracji agenta na urządzeniu. Wykorzystam dwa testowe urządzenia Router Mikrotika i switch Cisco.
Przechodzimy na IP->SNMP i dodajemy nazwę użytkownika i hasło, ponieważ skorzystamy z agenta w wersji 3. W następnym kroku definiujemy klucze dla AuthKey i PrivKey. Dodatkowo podając adres IP systemu monitoringu ograniczamy możliwość zapytań do jednego urządzenia. Następnie przechodzimy na IP->firewall i w rules dodajemy regułę zezwalająca na odpytywanie na porcie 161/UDP.
W przypadku switcha Cisco z serii Small Buisness, konfiguracja wygląda nieco inaczej. Zaczynamy od uruchomienia usługi SNMP, przechodząc na TCP/UDP Services i zaznaczeniu SNMP. W następnym kroku zmieniamy widok na zaawansowany. Po zmianie widoku zmieni się odcień strony oraz w sekcji MENU pojawią się dodatkowe opcje. Klikamy na SNMP i dodajmy konto użytkownika i wybieramy rodzaj komunikacji.
Bezpieczeństwo SNMP
Kilka porad jak zwiększyć bezpieczeństwo komunikacji po SNMP:
- Zacznij używać SNMP w wersji 3, jeżeli z jakiś względów nie możesz tego zrobić, zmień community string z public na dowolnie inna nazwę,
- Ogranicz dostęp do agenta SNMP dla konkretnych adresów IP,
- Przygotują polityki na firewallu, tak, aby tylko konkretne adresy IP mogły używać portów 161 i 162,
- Upewnij się, że komunikacja write jest na pewno wyłączona.
Podsumowanie
Protokół SNMP jest idealnym narzędziem do monitoringu przeróżnych urządzeń sieciowych oraz IoT, a w połączeniu z wysyłaniem TRAPów, można na jego bazie zbudować bardzo dobry system monitoringu. Oczywiście nie musisz wymyślać koła na nowo i warto skorzystać z gotowych rozwiązań, które wspierają SNMP. Godnym polecenia na pewno jest Zabbix, LibreNMS, Observium, Cacti, są to systemy które posiadają pre definiowane szablony do obsługi wielu urządzeń. Pamiętaj tylko, aby nie iść na skróty, jeżeli Twoje urządzenia wspierają SNMP w wersji 3, to z niego skorzystaj, ale zrezygnuj z wariantu noAuthnoPriv, nie różni się zbytnio od SNMP v2c. Stawiaj bezpieczeństwo zawsze na pierwszym miejscu.