SNMP to protokół do zarządzania urządzeniami w sieci, istnieją trzy wersje:
- SNMPv1 – opublikowany w 1988 roku, opisany w RFC 1157, bezpieczeństwo oparte jest na tak zwanych communities, które są pewnego rodzaju nieszyfrowanymi hasłami. Dostępne komunikaty:
- Get – żądanie odczytu wartości zmiennej, może zawierać kilka identyfikatorów zmiennych, wtedy o ile nie wystąpi błąd, to odpowiedź będzie zawierać wartości wszystkich zmiennych.
- GetNext – żądanie odczytu następnej zmiennej i jej wartości
- Set – żądanie ustawienia wartości zmiennej
- Response – odpowiedź na żądanie
- Trap
- SNMPv2 – określana także SNMPv2c, opisana w dokumencie RFC 1901, wprowadza dodatkowo komunikaty:
- GetBulk – żądanie odczytu wartości kilku kolejnych zmiennych, jeżeli agent nie będzie w stanie przetworzyć żądania ze względu na zbyt duży jego rozmiar, to Get przekaże błąd, a GetBulk przekaże tyle wartości ile się zmieści w odpowiedzi. Pozwala także pobierać w jednym żądaniu wartości kolejnych zmiennych, których nazwy się nie zna (wykorzystanie GetNext wymagałoby wysyłania żądania dla każdej zmiennej).
- Info
- SNMPv3 – wspierająca uwierzytelnianie oraz szyfrowanie.
Wykorzystywane porty:
- port 161 – wysyłanie i odbieranie żądań
- port 162 – komunikaty trap
Protokół SNMP zakłada istnienie w zarządzanej sieci dwóch rodzajów urządzeń: zarządzających i zarządzanych. Urządzenie (komputer) jest zarządzającym (tzw. NMS, ang. Network Management Station), gdy jest na nim uruchomiony manager SNMP (zarządca SNMP). Urządzenie jest zarządzane, jeśli działa na nim agent SNMP.
W procesie zarządzania używane są bazy MIB (ang. Management Information Base – baza informacji zarządzania), czyli zbiory zmiennych, które manager SNMP w zależności od uprawnień może odczytać lub zmienić. W tym celu manager SNMP kontaktuje się z agentem na danym zarządzanym urządzeniu wykorzystując jedno z dwóch wcześniej skonfigurowanych haseł:
- public_community – hasło odczytu
- private_community – hasło zapisu
Odczyt zmiennej daje menagerowi określoną informację o stanie danego elementu sieci, podczas gdy zapis do zmiennej pozwala na sterowanie zachowaniem urządzenia.
Każdy komunikat SNMP dotyczy określonej zmiennej, tzw. OID (ang. Object IDentifier). Dla przykładu zmienna OID o nazwie sysUpTime (czas pracy urządzenia od ostatniego włączenia) ma postać 1.3.6.1.2.1.1.3.0, co odpowiada jej adresowi w drzewie MIB.
Oprócz operacji odczytu i zapisu zmiennych w agencie przez managera istnieje również możliwość takiego skonfigurowania agenta, aby sam poinformował danego managera o zmianie swojego stanu w przypadku zajścia określonego zdarzenia. Odbywa się to przy pomocy wysyłanego przez agenta komunikatu Trap lub (od wersji drugiej protokołu SNMP) przy pomocy komunikatu Inform.
Budowa komunikatów protokołu SNMP zdefiniowana jest przy pomocy notacji zwanej Abstract Syntax Notation One (oznaczanej ASN.1). Sposobem kodowania struktur danych komunikatów SNMP jest uproszczony BER.
Pakiet net-snmp
fedora 20, SLC 6
yum install net-SNMP
Pakiet net-snmp zawiera agenta SNMP(snmpd), bibliotekę programistyczną SNMP, oraz narzędzia SNMP do pracy z linii komend.
Do nauki najlepiej uruchomić sobie demona/agenta SNMP u siebie na komputerze:
/etc/init.d/snmpd start
Uwaga! jeśli dostęp do portu 161 nie jest zablokowany na firewallu/iptables to w ten sposób udostępniamy kopalnie wiedzy dla potencjalnych włamywaczy!
Gdybyśmy chcieli wykorzystać SNMP do monitorowania pracy tego komputera przez zdalną maszynę to należało odpowiednio edytować plik konfiguracyjny: /etc/snmp/snmpd.conf
ale nie będzie to częścią tego artykułu.
snmpwalk – automatycznie ściąga całą zawartość poddrzewa MIT od podanego węzła, a więc:
snmpwalk -v 2c localhost -c public
snmpwalk -v 2c localhost -c public 1
pokażą większość informacji jakie odpytywane urządzenie (w tym wypadku localhost, a wiec nasz komputer) udostępnia przez SNMP.