Průzkum a ověření možností SNMPv3 na Cisco IOS Pavel Burda Abstrakt: Cílem projektu je praktická konfigurace nejnovější verze SNMP protokolu na Cisco zařízeních. Projekt obsahuje také porovnání a ověření jeho nových vlastností oproti předchozím verzím. Klíčová slova: Cisco, IOS, SNMP 1 Úvod...2 2 Základní princip SNMP...3 3 Přínos SNMPv3...3 4 Konfigurace Cisco IOS...3 5 SNMP správce software...5 5.1 Net-SNMP...5 5.2 Free SNMP Manager for Windows...6 6 Analýza provozu v síti...9 6.1 SNMP požadavek (request)...9 6.2 SNMP odpověď (response)...10 7 Reference...10 listopad 2009 1/10
1 Úvod Simple Network Management Protocol (SNMP) je jednoduchý standardizovaný protokol, který slouží k získávání nebo nastavování hodnot na určitém zařízení. Jeho podporu má velká řada zařízení, například aktivní síťové prvky, tiskárny, přístupové body nebo i osobní počítače a servery (ty jej mohou získat instalací speciálního softwaru). Hodnoty můžeme získávat na vyžádání nebo v pravidelném intervalu. Ty pak lze ukládat do databáze spolu s časem a následně vykreslit do grafu. Při správě sítě pak můžeme využít zobrazení hodnot vytížení procesoru a paměti, průběh teploty nebo datový tok na rozhraní prvku a spoustu dalších. Illustration 1: http://de.wikipedia.org/wiki/simple_network_management_protocol listopad 2009 2/10
2 Základní princip SNMP Hlavní dvě entity protokolu tvoří: správce (management console) posílá dotazy agentovi (agentům) a poté zpracovává jejich odpovědi (obvykle nabízí administrátorovi grafické uživatelské prostředí) agent (managed device) posílá správci odpovědi na dotazy a případně tzv. trapy (informace odeslaná správci bez požadavku) Obvykle spolu správce s agentem komunikuji způsobem dotaz-odpověď. Agent však může správci posílat také informace, aniž by na ně byl dotazován. Využije k tomu tzv. trapy (pasti na události). Příkladem takových informací může být selhání jednoho z redundantních zdrojů v routeru nebo došel papír v tiskárně. Správce však musí trapy podporovat (naslouchat jim) a agent musí mít nakonfigurované podmínky, kdy a jaké trapy bude správci posílat. Ve všech třech verzích SNMP spolu správci a agenti komunikují pomocí UDP protokolu (rychlé a nespolehlivé doručování) na portech 161 (agent) a 162 (správce). Jako zdrojový port se pro komunikaci vždy zvolí náhodný dynamický port. Kvůli nespolehlivosti UDP protokolu se od SNMP verze 2 zavedla kontrola doručení. Každá proměnná v SNMP je jednoznačně identifikována pomocí OID - Object Identifier. OID je tvořeno posloupností čísel oddělených tečkou. OID jsou uspořádány do stromové struktury, která je uložena v MIB databázi [4]. Tato databáze obsahuje také jména a popisy jednotlivých proměnných (OID). Originální MIB databáze je popsaná v RFC 1066 a později byla rozšířena o MIB-2 v RFC 1213. Výrobci prvků si však mohou přidávat svá vlastní proprietární rozšíření, např. Cisco MIB databáze jsou k dispozici na adrese ftp://ftp.cisco.com/pub/mibs/. Příkladem OID může být třeba hodnota 1.3.6.1.2.1.2.2.1.6.1, které odpovídá textová verze z MIB databáze iso.org.dod.internet.mgmt.mib-2.interfaces.iftable.ifentry.ifphysaddress. Pokud známe čísla OID, se kterými chceme pracovat, pak MIB databázi nepotřebujeme. Obvykle však bývá součástí SNMP správce, aby uživateli usnadnil hledání proměnných. 1 Přínos SNMPv3 Třetí verze protokolu byla schválena v roce 2004 a je popsána v RFC 3411 3418. Předchozí dvě verze byly označeny jako Obsolete a neměly by se již používat (přesto jsou stále podporovány i v nových verzích Cisco IOS). Hlavním přínosem třetí verze je zvýšení bezpečnosti. Konkrétně nabízí následující služby: autentizace (authentication) správce je povinen se přihlásit svým uživ. jménem a heslem (které se přenášejí v hash formě oproti community řetězci přenášeném v čistém textu) soukromí (privacy) veškeré zprávy mezi správcem a agentem jsou šifrované řízení přístupu (access control) pomocí ACL lze omezit přístup správce k agentovi Pouhé nastavení SNMP verze 3 však ještě neznamená, že se tyto služby budou využívat. Na Cisco prvcích je potřeba nastavit SNMP bezpečnostní úroveň (level): noauthnopriv místo autentizace je pouze ověřeno uživatelské jméno; data nejsou šifrována authnopriv provede autentizaci pomocí jména a hesla (MD5, SHA); data nejsou šifrována authpriv - provede autentizaci pomocí jména a hesla (MD5, SHA); data jsou šifrována 56-bitovým DES algoritmem V tomto projektu jsem použil úroveň authnopriv, protože konfigurovaný router (IOS) nepodporuje úroveň authpriv. 1 Konfigurace Cisco IOS SNMP agenta jsem nastavil na Cisco routeru 2610 s IOS verze 12.3(19). Vytvoření pohledu (view) SNMP view je mapování přístupových práv na SNMP objekty. Ty mohou mít odlišná práva v různých pohledech. SNMP objektem rozumíme buď community řetězec nebo uživatelskou skupinu. V tomto příkladu listopad 2009 3/10
vytvořím pohled RESTRICTED omezený na MIB podstrom system s OID 1.3.6.1.2.1.1. Pro ukázku jsem také z pohledu odebral list systemu - sysuptime s OID 1.3.6.1.2.1.1.3: snmp-server view RESTRICTED system included snmp-server view RESTRICTED sysuptime excluded Příkaz jako parametr akceptuje i konkrétní OID. Vytvoření SNMP community Slouží jako vazba mezi správcem a agentem, nastavil jsem na COMMUNITY. Dále určuje, zda správce může proměnné číst nebo také nastavovat z důvodů bezpečnosti se doporučuje pouze čtení, v příkladu jsem nastavil čtení i zápis: snmp-server community COMMUNITY rw Vytvoření skupiny Každý uživatel musí patřit do skupiny, proto je tento krok povinný. Je zde také nastavena verze protokolu, SNMP bezpečnostní úroveň, pohled a omezení přístupu pomocí standardního ACL. Následujícími příkazy se vytvoří skupina ADMIN vyžadující autentizaci a omezující přístup k agentovi pouze ze sítě 10.1.1.0/26, jejich pohled bude neomezený. Dále se vytvoří skupina USERS s omezeným přístupem (pohled RESTRICTED pro čtení), která však nevyžaduje autentizaci a nepoužívá ACL pro omezení přístupu. Celkem lze skupině přiřadit až 3 pohledy pro čtení, zápis a notifikace (trapy). Pokud bychom chtěli zprávy šifrovat (a měli podporu v IOSu), pak bychom místo parametru auth, použili priv : access-list 1 permit 10.1.1.0 0.0.0.63 snmp-server group ADMIN v3 auth access 1 snmp-server group USERS v3 noauth read RESTRICTED Vytvoření uživatele Do skupiny ADMIN jsem přiřadil uživatele burda s heslem bigsecret a do omezené skupiny USERS uživatele guest bez hesla. Pozor, tyto řádky se neobjeví ve výpisu show running-config : snmp-server user burda ADMIN v3 auth md5 bigsecret snmp-server user guest USERS v3 Nastavení SNMP trapu IOS můžeme nastavit tak, aby automaticky posílal zprávy nastavenému správci: snmp-server enable traps snmp-server host 10.1.1.22 COMMUNITY Pokud chceme posílat pouze vybrané události, můžeme přidat parametry: snmp-server enable traps frame-relay snmp-server enable traps bgp Ověření konfigurace R0# show snmp 1808 SNMP packets input 0 Bad SNMP version errors 0 Unknown community name 0 Illegal operation for community name supplied 0 Encoding errors 1794 Number of requested variables 0 Number of altered variables 4 Get-request PDUs 1794 Get-next PDUs 0 Set-request PDUs 0 Input queue packet drops (Maximum queue size 1000) R0#sh snmp view v1default ciscomgmt.252 - excluded volatile active RESTRICTED system - included nonvolatile active listopad 2009 4/10
R0#sh snmp user User name: burda Engine ID: 80000009030000070EE3FCA0 storage-type: nonvolatile active User name: guest Engine ID: 80000009030000070EE3FCA0 storage-type: nonvolatile active R0#sh snmp group groupname: ADMIN readview : v1default notifyview: <no notifyview specified> row status: active access-list: 1 groupname: USERS readview : RESTRICTED notifyview: <no notifyview specified> row status: active groupname: COMMUNITY readview : v1default notifyview: <no notifyview specified> row status: active groupname: COMMUNITY readview : v1default notifyview: <no notifyview specified> row status: active security model:v3 auth writeview: <no writeview specified> security model:v3 noauth writeview: <no writeview specified> security model:v1 writeview: v1default security model:v2c writeview: v1default Skupiny COMMUNITY vytvořil IOS automaticky jednu pro SNMPv1 a druhou pro SNMPv2c. Jejich název je vždy stejný jako community řetězec a při smazání community jsou odstraněny i tyto skupiny. 2 SNMP správce software SNMP správců existuje spousta, rozdělit je můžeme na komerční a free verze. Já jsem vyzkoušel open source implementaci Net-SNMP pro Linux [2] a Free SNMP Manager pro Windows [3] oba podporují SNMP verze 3. 2.1 Net-SNMP V Linux distribuci Fedora 11 jsem nainstaloval RPM balíčky: net-snmp net-snmp-utils net-snmp-gui Lze využít grafického klienta tkmib, který obsahuje MIB databázi [4] a umí se na hodnoty z MIB ptát agenta. Další možností je použití příkazové řádky. Následující příkaz vypíše všechny podporované MIB proměnné a jejich hodnoty v mém případě jich bylo 897. Parametrem lze určit pouze ty, které nás zajímají: [burda@nero ~]$ snmpwalk -v3 -l authnopriv -c COMMUNITY -u burda -a MD5 -A bigsecret 10.1.1.28 Několik vybraných řádků z výstupu snmpwalk (uptime systému, načtený IOS soubor, sériové číslo routeru): DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (667356) 1:51:13.56 SNMPv2-SMI::mib-2.16.19.6.0 = STRING: "flash:c2600-i-mz.123-19.bin" SNMPv2-SMI::mib-2.47.1.1.1.1.2.1 = STRING: "2610 chassis, Hw Serial#: JAD7410U6N (3369435056), Hw Revision: 0x203" Zatímco snmpwalk si poradí jen s jednoduchými proměnnými, utilita snmptable dokáže zpracovat i tabulky, např. routing table: [burda@nero ~]$ snmptable -v3 -l authnopriv -c COMMUNITY -u burda -a MD5 -A bigsecret 10.1.1.28.1.3.6.1.2.1.4.21 SNMP table: RFC1213-MIB::ipRouteTable iproutedest iprouteifindex iproutemetric1 iproutenexthop iproutetype iprouteproto iprouteage iproutemask iprouteinfo 0.0.0.0 0 0 10.1.1.1 indirect local 51 0.0.0.0 SNMPv2-SMI::zeroDotZero 10.1.1.0 1 0 10.1.1.28 direct local 0 255.255.255.192 SNMPv2-SMI::zeroDotZero listopad 2009 5/10
V konfiguraci routeru jsem povolil SNMP také pro zápis, takže lze vyzkoušet i utilitu snmpset. V příkladu se nastaví nový hostname routeru na Router0. Za OID SNMPv2-MIB::sysName.0 je parametr s, který označuje proměnnou typu řetězec a nakonec hodnota proměnné: [burda@nero ~]$ snmpset -v3 -l authnopriv -c COMMUNITY -u burda -a MD5 -A bigsecret 10.1.1.28 SNMPv2-MIB::sysName.0 s Router0 Ověření funkce SNMP pohledů (views) Pomocí utility snmpwalk jsem se pokusil z routeru získat hodnotu sysuptime (OID 1.3.6.1.2.1.1.3). Nejdříve jako uživatel burda ze skupiny ADMIN: [burda@nero ~]$ snmpwalk -v3 -l authnopriv -c COMMUNITY -u burda -a MD5 -A bigsecret 10.1.1.26 1.3.6.1.2.1.1.3 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1159792) 3:13:17.92 Poté jsem použil uživatelské jméno guest bez autentizace (skupina USERS): [burda@nero ~]$ snmpwalk -v3 -l NoauthNoPriv -c COMMUNITY -u guest 10.1.1.26 1.3.6.1.2.1.1.3 SNMPv2-MIB::sysUpTime = No Such Object available on this agent at this OID Přístup byl odepřen. Uživatel guest má skutečně přístup pouze k položkám z podstromu system kromě sysuptime. Proto např. sysname funguje: [burda@nero ~]$ snmpwalk -v3 -l authnopriv -c COMMUNITY -u burda -a MD5 -A bigsecret 10.1.1.26 1.3.6.1.2.1.1.5 SNMPv2-MIB::sysName.0 = STRING: R0 Pomocí pohledů lze tedy efektivně rozlišovat úrovně oprávnění pro uživatelské skupiny. Skupiny s více právy pak můžeme více zabezpečit pomocí autentizace uživatelů a šifrování SNMP zpráv. 2.2 Free SNMP Manager for Windows Tento program jsem nainstaloval do Windows Vista Home Edition. Po spuštění je potřeba nastavit verzi SNMP a přístupové údaje: listopad 2009 6/10
V pravé části okna lze v MIB databázi nalistovat požadovanou proměnnou a vyžádat si její hodnotu: Samozřejmě i zde je možné nechat si vypsat složitější datové struktury jako například tabulku rozhraní routeru: listopad 2009 7/10
SNMP Manager obsahuje i funkci nastavení SNMP trapu - hlídání hodnoty libovolné proměnné. Při překročení nastaveného limitu vypíše varování na obrazovku nebo odešle email administrátorovi: listopad 2009 8/10
3 Analýza provozu v síti Pomocí programu Wireshark jsem zachytil komunikaci mezi SNMP správcem a agentem. 3.1 SNMP požadavek (request) Z dat SNMP protokolu lze mimo jiné zjistit jeho verzi, informace o použití šifrování a autentizace, jméno uživatele a OID požadované proměnné: listopad 2009 9/10
3.2 SNMP odpověď (response) Odpověď obsahuje především hodnotu proměnné (v tomto případě hostname routeru): 4 Reference [1] http://www.cisco.com/en/us/docs/ios/12_2/configfun/configuration/guide/fcf014.html [2] http://www.net-snmp.org/ [3] http://www.dart.com/psnet_free.aspx [4] http://en.wikipedia.org/wiki/management_information_base [5] http://en.wikipedia.org/wiki/simple_network_management_protocol listopad 2009 10/10