====== Simple Network Management Protocol ======
===== Historia SNMP =====
http://www.cs.put.poznan.pl/ddwornikowski/sieci/pizsk/snmp3.html
===== Protokół SNMP =====
Protokół SNMP działa na protokole UDP, korzysta z dwóch standardowych portów: 161 oraz 162 (snmp i snmptrap).
Pozwala na odczytywanie i ustawianie danych pod wskazanym identyfikatorem obiektu (OID). OID to sekwencja liczb, np. 1.3.6. \\
W SNMP dane mogą być tylko typu 'INTEGER', 'OCTET STRING', 'NULL' lub 'OBJECT IDENTIFIER'. Można też tworzyć sekwencje złożone z danych tych typów – listy i tabele.
SNMP definiuje dwie role - **agent** i manager. Agent działa na zarządzanym urządzeniu i udostępniającego dane o nim po protokole SNMP.
SNMP wspiera następujące żądania kierowane do **agenta** snmp:
* get (pobierz) - pobiera wskazany OID
* getnext (pobierz następny) - pobiera kolejny obiekt po podanym OID - ta opcja pozwala "przejść" przez wszystkie dostępne obiekty bez wiedzy jakie są dostępne.
* getbulk (od SNMPv2) - optymalizacja powyższego
* set (ustaw)
SNMP pozwala też na wysyłanie komunikatów powiadomień **trap** przez agenta pod ustalony w konfiguracji agenta adres. Takie potwierdzenia są wysyłane jednokrotnie bez kontroli dostarczenia. \\
W SNMPv2 wprowadzono komunikat **inform** którego działanie jest identyczne jak trap, ale po odebraniu odsyłane jest potwierdzenie odbioru.
===== MIB i OID =====
Protokół SNMP definiuje tylko //jak// przesyłać dane. Bazy MIB określają //co oznaczają// dane i jak //interpretować// wartości. \\
http://www.cs.put.poznan.pl/ddwornikowski/sieci/pizsk/snmp3.html \\
https://tools.ietf.org/html/rfc1155
//Zadanie 1.// Przejrzyj przykładowe bazy MIB: \\
''less /usr/share/snmp/mibs/RFC1155-SMI.txt'' \\
https://tools.ietf.org/html/rfc1156#section-5 \\
''less /usr/share/snmp/mibs/IP-MIB.txt''
//Zadanie 2.// Przejrzyj bazy MIB używając dedykowanych narzędzi
* http://ireasoning.com/mibbrowser.shtml [ [[http://www.ireasoning.com/download/mibfree/mibbrowser.zip|link do pobrania]] ], w wersji darmowej ograniczenia na ilość załadowanych plików MIB
* Program ''tkmib'' (część net-snmp, przerywa walk na nieznanych OID)
* Program [[ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/jimfunk/openSUSE_Factory/x86_64/mbrowse-0.4.3-1.39.x86_64.rpm|mbrowse]] (nie wyświetla tabel)
//Zadanie 3.// Znajdź jaki numeryczny OID ma ''SNMPv2-MIB::sysName.0'' i co znajduje się pod ''.1.3.6.1.2.1.5.8''
Część drzewa MIB jest ustandaryzowana. Większość producentów sprzętu tworzy własne poddrzewa w przeznaczonej do tego gałęzi ''SNMPv2-SMI::enterprises'' / ''.1.3.6.1.4.1'' .
===== SNMP i bezpieczeństwo =====
Wersja 1 i 2c //nie// posiada żadnego mechanizmu poza wysyłaną otwartym tekstem nazwą **community**.
Community pozwalają tylko na ograniczenie dostępu tylko do odczytu lub do odczytu i zapisu.
Wersja 3 wprowadza zabezpieczenia: szyfrowanie (symetryczne) i/lub autoryzację (priv / auth / authpriv).
Wprowadza też możliwość ograniczania widoku – konkretny użytkownik ma dostęp tylko do wskazanych gałęzi drzewa MIB.
===== NET-SNMP - narzędzia =====
Pakiet NET-SNMP to najpopularniejszy zestaw demonów i narzędzi SNMP na Linuksa.
Do dostępu do serwera SNMP, NET-SNMP zawiera komendy:
* ''snmpget'' - pobranie pojedynczej wartości o podanym OID
* ''snmpgetnext'' - pobranie następnej wartości po podanym OID
* ''snmpset'' - ustawienie wartości
* ''snmpwalk'' - przejście całego (pod)drzewa
* ''snmpbulkwalk'' - efektywniejszy walk; działa od SNMPv2
* ''snmptable'' - wyświetlenie tabel
I wspomniany wcześniej graficzny ''tkmib'' \\
Dodatkowo dostępne jest też ''snmptranslate'' które tłumaczy OIDy.
===== Odpytywanie agentów =====
Dla wersji 2c protokołu SNMP przykładowe polecenie to: \\
''snmpgetnext -v 2c -c public //150.254.32.65// //ip//''\\
''snmpgetnext -v 2c -c public //150.254.32.65// //.1.3.6//''
//Zadanie 4.// Narzędziem graficznym i konsolowym, z adresu ''150.254.32.65'', z community ''public'':
* odczytaj pojedynczą wartość - opis systemu ''SNMPv2-MIB::sysDescr''
* znajdź i odczytaj nazwę hosta
* przejdź (walk) poddrzewo ''system''
* znajdź i przejdź listę interfejsów
* znajdź i wyświetl jako tabelę listę adresów IP
* przejdź całe drzewo, zwróć uwagę na nieznane wartości z poddrzewa ''.1.3.6.1.4.1.14988''
* załaduj brakującą MIB: http://download2.mikrotik.com/Mikrotik.mib
===== NET-SNMP - demon SNMPD =====
NET-SNMP zawiera demona (agenta) SNMP. \\
Konfiguracja znajduje się w** ''/etc/snmp/snmpd.conf'' ** \\
Strona ''man snmpd.conf'' zawiera szczegółowy opis składni tego pliku.
//Zadanie 5.// Umieść w pliku konfiguracyjnym poniższą treść:
rocommunity public 127.0.0.1
Następnie uruchom demona snmpd poleceniem: ''systemctl start snmpd'' i odpytaj go lokalnie.
Ponowne załadowanie konfiguracji snmpd: ''systemctl reload snmpd'' \\
Ponowne uruchomienie snmpd: ''systemctl restart snmpd'' \\
__Uwaga__ Błędy w konfiguracji nie są zgłaszane na konsolę, tylko zapisywane do pliku ''/var/log/net-snmpd.log''
//Zadanie 6.// Zmień konfigurację snmpd tak, by możliwy był pełen dostęp (read-write) z innych komputerów. Wyłącz koledze interfejs sieciowy wlan0.
//Zadanie 7.// Skonfiguruj moduł UCD tak, by przez SNMP był dostępny poziom zajętości dysków i poziom obciążenia komputera (load) \\ http://www.cs.put.poznan.pl/ddwornikowski/sieci/pizsk/snmp3.html#rozszerzenie-ucd
===== SNMP USM =====
//Zadanie 8.// Dodaj do pliku konfiguracyjnego użytkownika SNMP w wersji 3, np:
createUser myUser MD5 "doscdlugiehaslo" DES doscdlugiehaslo
rwuser myUser
Następnie odpytaj SNMP, na przyład:\\
''snmpwalk -v3 -u myUser -a MD5 -A doscdlugiehaslo -x DES -X doscdlugiehaslo -l authPriv localhost system'' \\
Za pomocą programu wireshark porównaj wymianę informacji w SNMPv2c i SNMPv3.
===== trap i inform =====
SNMP poza aktywnym oczekiwaniem pozwala generować automatycznie powiadomienia.
//Zadanie 9.// Dodaj generowanie przykładowych powiadomień rozszerzając plik ''/etc/snmp/snmpd.conf'' o:
agentSecName myUser
trapcommunity public
trap2sink 127.0.0.1
linkUpDownNotifications yes
defaultMonitors yes
monitor -r 1s pingi != IP-MIB::icmpInMsgs
Zastąpienie ''trap2sink'' przez ''informsink'' spowoduje wysyłanie komunikatów inform (które są powtarzane w przypadku braku potwierdzenia odbioru).
Do odbierania powiadomień można użyć demona ''snmptrapd'' dostarczanego z NET-SNMP.\\
Plik konfiguracyjny tego demona to: ''/etc/snmp/snmptrapd.conf'' \\
Dokumentacja w podręczniku systemowym: ''man snmptrapd.conf''
//Zadanie 10.// Dodaj do pliku konfiguracyjnego** ''snmptrapd.conf'' **poniższe ustawienia, a następnie uruchom demona poleceniem ''systemctl start snmptrapd'' i przetestuj ich działanie. Do śledzenia logów systemowych użyj ''journalctl -f''. Uwaga: aby program ''xmessage'' miał uprawnienia aby coś wyświetlić, musisz ze zwykłego użytkownika wydać polecenie ''xhost +''
disableAuthorization yes
traphandle default logger
#traphandle default wall
#traphandle default sh -c "DISPLAY=:0 xmessage -file -"
#traphandle IF-MIB::linkDown sh -c "DISPLAY=:0 xmessage -file -"
#traphandle IF-MIB::linkUp sh -c "DISPLAY=:0 xmessage -file -"
//Zadanie 11.// Wysyłaj powiadomienia na komputer kolegi.
Aby ręcznie wygenerować powiadomienie (trap lub inform), można użyć np: \\
''snmptrap -v 2c -c public [-Ci] 127.0.0.1 0 warmStart''
===== SNMP VACM =====
//Zadanie 12.// Pozwól na dostęp po SNMPv1 i SNMPv2c tylko do wybranego poddrzewa, korzystając z materiałów na:
http://www.cs.put.poznan.pl/ddwornikowski/sieci/pizsk/snmp3.html#model-vacm \\ Następnie ustaw też widok wybranemu użytkownikowi.
===== CISCO =====
MIBy urządzeń CISCO znajdziesz na: ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz \\
Do wszytania dużej ilości plików MIB warto ustawić zmienną środowiskową ''MIBDIRS'', np. ''esport MIBDIRS=:/usr/share/snmp/mibs'', lub wyedytować plik /etc/snmp/snmp.conf. \\
Przykładowe polecenie wczytujące MIBy z bieżącego katalogu w tkmib: ''MIBDIRS=`pwd`:/usr/share/snmp/mibs tkmib'' \\
Opis poleceń konfiguracyjnych SNMP na CISCO znajduje się [[https://www.cisco.com/c/en/us/td/docs/ios/12_2/configfun/configuration/guide/ffun_c/fcf014.html|tutaj]].
//Zadanie 13.// Wykonaj najprostszą (niezabezpieczona) konfigurację routera CISCO i zobacz co można podejrzeć przez SNMP:
enable
configure terminal
snmp-server community public ro
snmp-server community private rw
interface GigabitEthernet 0/0
ip address …
no shut
//Zadanie 14.// Włącz wybrany interfejs na routerze CISCO przez SNMP
//Zadanie 15.// Dodaj generację powiadomień, wygeneruj i odbierz przykładowe powiadomienie:
snmp-server host traps version 2c public
snmp-server enable traps snmp linkup linkdown
//Zadanie 16.// Dodaj użytkownika (SNMPv3) dostosowujący przykładowe polecenia:
snmp-server group someGroup v3 priv
snmp-server user myUser someGroup v3 auth md5 12345678 priv des56 12345678
Sprawdź działanie konfiguracji. Możesz skorzystać z przykładowego zapytania: \\
''snmpbulkwalk -v3 -u myUser -A 12345678 -a md5 -X 12345678 -x DES -l authpriv system''
===== Mikrotik =====
//Zadanie 17.// Odpytując 150.254.32.65, znajdź:
* mapowania IP-MAC serwera DHCP
* statystyki interfejsów
* bramę domyślną
* wyświetl licznik ruchu przez interfejs który jest bramą domyślną
//Zadanie 18.// Skonfiguruj SNMP na Mikrotiku (dostęp i powiadomienia).