This is an old revision of the document!
Cilj ovog dokumenta je da uputi čitaoca u osnovne mehanizme funkcionisanja monitoring-a mreže pomoću SNMP-a kao i u ispravan način podešavanja SNMP-a u mreži sa stanovišta sigurnosti. Opisan je opšti princip rada sa SNMP promenjivim vrednostima kao i tipovi promenjivih sa kojima se korisnici mogu susretati. U dokumentu su dati primeri pokretanja SNMP-a verzije V2c i V3 na raznim mrežnim uređajima. Opisani su razni primeri očitavanja parametara sa udaljenih uređaja pomoću programa koji se koriste za testiranje SNMP agenata. Ovaj dokument je namenjen svim administratorima koji žele na ispravan način da pokrenu SNMP protokol u mreži a žele da očuvaju privatnost i sigurnost mreže koju nadgledaju.
Razvoj mrežnih uređaja i novih kompleksnih protokola doveo je do toga da se današnji mrežni sistemi ne mogu održavati bez dobrog programa za nadzor, kontrolu i konfigurisanje mreže. Dosta današnjih mrežnih sistema se oslanja na monitoring pomoću SNMP protokola. Sam SNMP protokol je dizajniran tako da veoma malo opterećuje mrežu. Naziva se prostim protokolom zato što koristi proste (nestrukturirane) tipove podataka. Ovaj protokol aplikativnog nivoa OSI modela sastavni je deo TCP/IP steka protokola. Sastoji se od skupa standarda kojima se definišu: način upravljanja mrežom, baze podataka za čuvanje informacija i strukture korišćenih podataka.
Oslanja se na UDP, mada je moguće podesiti i rad preko TCP-a, što nije preporučljivo u velikim mrežama.
Monitoring mrežnih uređaja pomoću SNMP-a se obično vrši tako što se na mrežnom uređaju pokrene SNMP agent i to tako da odgovara na periodične zahteve koje dobija od servera koji prikuplja podatke (NMS Server). SNMP agent saznaje od uređaja informacije neophodne za upravljanje, prevodi ih u oblik koji propisuje SNMP, u tom obliku ih prosleđuje NMS-u. U slučaju kada dođe do neke bitne promene na uređaju SNMP agent generiše SNMP Trap poruku i na taj način se brzo, bez čekanja na upit od NMS-a, obaveštava NMS o promeni u mreži. SNMP agent osluškuje upite po UDP portu 161, a Trap-ove šalje po UDP portu 162, tako da prilikom pokretanja monitoringa u mreži potrebno je da se omogući komunikacija izmedu mrežnih uredaja i NMS servera po ovim portovima (access lists, IP tables ….).
Informacije koje se mogu očitati sa udaljenog uređaja su definisane u MIB (Management Information Base) bazi podataka. U MIB bazi su varijable hijerarhijski definisane u formi stabla, i te varijable sam proizvođač uređaja kreira. Svaka od ovih varijabli u MIB bazi je jednoznačno određena svojim OID (Object Identifier) identifikatorom. Postoje i univerzalne varijable koje su definisane na svim mrežnim uređajima. Rad sa ovim varijablama će biti opisan pojedinačno za svaki uređaj.
Tipovi podataka su podeljeni u dve grupe:
Tipovi podataka su nasleđeni od SNMP V1 i za V2c i V3 su samo dodati novi tipovi.
Za svaku OID vrednost se definiše tip dostupnosti i tip može biti:
Veoma je bitno proučiti tip vrednosti koju SNMP agent vraća. Zato je u MIB bazi podataka za svaku OID vrednost definisan tip podatka kao i opis tog tipa podatka, odnosno šta on predstavlja.
Razvoj SNMP protokola se ogleda kroz tri verzije i danas je najzastupljenija druga verzija, SNMP V 2c. Usled potrebe za implementaciju sigurnosti u mreži razvijena je SNMP V3 koja uvodi autentifikaciju i enkripciju.
SNMP V2c (RFC 1901-1908) Kod verzije 2c se autentifikacija vrši pomoću community stringa i on se šalje u čistom tekstu preko mreže. U slucaju da neko “uhvati” ovaj saobraćaj pomoću neke sniffing aplikacije, može vrlo lako otkriti community string i na taj način biti u mogućnosti da ugrozi ispravan rad mreže.
SNMP V3(RFC 3411-3418) SNMPv3 pruža tri važna servisa: autentifikaciju, privatnost i kontrolu pristupa. SNMPv3 uvodi važne bezbednosne aspekte:
U tabeli 1 je dat prikaz verzija SNMP-a sa stanovišta sigurnosti u mreži.
SNMP Security modeli i nivoi | ||||
---|---|---|---|---|
Model | Nivo | Autentifikacija | Enkripcija | Princip rada |
v1 | noAuthNoPriv | Community String | - | Koristi Community string za autentifikaciju. |
v2c | noAuthNoPriv | Community String | - | Koristi Community string za autentifikaciju. |
v3 | noAuthNoPriv | Username | - | Koristi Username za autentifikaciju. |
v3 | authNoPriv | MD5 ili SHA | - | Autentifikacija se bazira na HMAC-MD5 ili HMAC-SHA algoritmu. Umesto password-a se šalje MD5 ili SHA hash |
v3 | authPriv | MD5 ili SHA | DES | Autentifikacija se bazira na HMAC-MD5 ili HMAC-SHA algoritmu. Omogućuje DES 56-bitnu enkripciju u okviru autentifikacije baziranu na CBC-DES (DES-56) standardu. |
Iz tabele se vidi fleksibilnost SNMP V3 protokola u izboru nivoa sigurnosti u mreži. U daljem tekstu ce biti opisana implementaija SNMP V2c i SNMP V3 na raznim mrežnim uredajima.
Pomoću sledeće komande,koja se koristi u konfiguracionom modu, pokreće se SNMP agent na ruteru.
SNMPTEST(config)#snmp-server community publicro ro acl10 |
---|
String koji se koristi kao autentifikacija publicro predstavlja vid zaštite tako da će ruter odgovoriti samo onom uređaju koji mu pošalje zahtev koji sadrži baš ovaj string. Opcija ro na naglašava da je moguće samo očitati podatke a ne i menjati ih (ro-read only). Takođe je moguće i menjati pojedine varijable (wr-write komanda) što može dovesti do promene rada rutera (restart rutera), zato je veoma bitno da se ne koriste default-ne vrednosti za community string i da se SNMP upiti ograniče samo na mogućnost očitavanja a ne i menjanja varijabli. Konačno na kraju komande je definisana access lista acl10 pomoću koje se može definisati pristup SNMP agentu na uređaju samo sa određenih ip adresa.
Da bi se ispravno podesio i snmp trap mod rada potrebno je definisati community string za trap mod, pokrenuti SNMP-trap i definisati destination adresu na koju će se slati trap poruke.
1.SNMPTEST(config)#snmp-server enable traps |
---|
2.SNMPTEST(config)#snmp-server host myNMSserver.com version 2c publicro |
U ovom primeru je definisana verzija 2c SNMP protokola. Da bi se uvela sigurnost u monitoring mreže koristi se SNMP V3 protokol. Pomoću sledećih komanda se pokreće SNMP V3 protokol na Cisco uređajima.
1.SNMPTEST(config)#snmp-server view MYGROUPV interfaces included |
---|
2.SNMPTEST(config)#snmp-server group MYGROUP v3 auth read MYGROUPV |
3.SNMPTEST(config)#snmp-server user peraperic MYGROUP v3 auth md5 perapass priv des56 pera1234 |
4.SNMPTEST(config)#snmp-server enable traps |
5.SNMPTEST(config)#snmp-server host 192.168.10.1 version 3 auth MYGROUP |
U prvoj komandi se definišu vrednosti u MIB bazi OID-ova koji mogu biti očitani sa uređaja. U ovom slučaju je omogućeno očitavanje OID-a (interface) koji opisuju stanje interfejsa na uređaju. Ako se ne definiše ovakva grupa predpostavlja se da je dozvoljen pogled na sve vrednosti u MIB bazi. Druga komanda definiše grupu MYGROUP koja koristi SNMP V3 protokola i koja koristi autentifikaciju. Ova grupa ima mogućnost očitavanja podataka iz MIB baze i to samo onih koji su definisani u “pogledu“ MYGROUPV. Treća komanda definiše korisnika peraperic koji pripada grupi MYGROUP koji koristi SNMP V3, autentifikaciju pomoću md5 algoritma i ima password perapass. Poslednjom opcijom u komandi 3 “pera1234“ se definiše passphrase koja se koristi za enkripciju SNMP saobraćaja. Četvrta komanda pokreće SNMP Trap mod rada. Peta komanda definiše NMS server koji će prikupljati trap poruke. U ovom slučaju prilikom komunikacije između NMS i Cisco uređaja koristiće se SNMP V3 i pravila koja su definisana pomoću grupe MYGROUP. Provera izvršavanja SNMP upita se može uraditi direktno sa NMS servera. U slučaju Linuxa to je moguće uraditi sledećom komandom.
snmpwalk –v 3 –u peraperic – l authPriv –a MD5 –A perapass –x DES –X pera1234 CiscoIPadd |
---|
Kao rezultat ove komande dobiće se tabela koja opisuje stanje interfejsa na Cisco uređaju.
Korišćenje enkripcije saobraćaja dosta opterećuje resurse uređaja (Procesor i Memoriju) tako da pojedini uređaji nemaju implementiran modul za enkripciju. Takvi uređaji ne podržavaju SNMP V3. U sledećoj listi je dat spisak Cisco platformi koje podržavaju SNMP V3.
•Cisco 700 series |
---|
•Cisco 1000 series |
•Cisco 1600 series |
•Cisco 2500 series |
•Cisco 2500 series access servers |
•Cisco 3600 series |
•Cisco 3800 series |
•Cisco 4000 series |
•Cisco 4500 series |
•Cisco AS5100 access server |
•Cisco AS5200 universal access server |
•Cisco AS5300 access server |
•Cisco 7000 series |
•Cisco 7200 series |
•Cisco 7500 series |
Preko SNMP-a se najčešce monitorišu OID vrednosti koje opisuju stanje interfejsa na uređaju i OID vrednosti koje opisuju stanje memorije i procesora uređaja, mada je moguć monitoring i ostalih parametara od interesa. Obično svaki proizvođač opreme definiše svoje OID vrednosti koje opisuju ove parametare. U Tabeli 1 je dat primer očitavanja ifTable (.1.3.6.1.2.1.2.2 ) OID tabele. Ove OID vrednosti se često koriste i svi tipovi mrežnih uređaja ih moraju podržavati.
ifTable - Tabela koja opisuje trenutno stanje svih interfejsa | |||
---|---|---|---|
ifType | 6 | 6 | 1 |
ifMtu | 1500 | 1500 | 1500 |
ifSpeed | 100000000 | 100000000 | 4294967295 |
ifPhysAddress | c8 00 08 c4 00 00 | c8 00 08 c4 00 01 | - |
ifAdminStatus | up(1) | down(2) | up(1) |
ifOperStatus | up(1) | down(2) | up(1) |
ifLastChange | 0 hours, 4 minutes, 17 seconds. | 0 hours, 0 minutes, 9 seconds. | 0 hours, 0 minutes, 0 seconds. |
ifInOctets | 939 | 0 | 0 |
ifInUcastPkts | 3 | 0 | 0 |
ifInNUcastPkts | 8 | 0 | 0 |
ifInDiscards | 0 | 0 | 0 |
ifInErrors | 0 | 0 | 0 |
ifInUnknownProtos | 0 | 0 | 0 |
ifOutOctets | 5525 | 0 | 0 |
ifOutUcastPkts | 25 | 0 | 0 |
ifOutNUcastPkts | 12 | 0 | 0 |
ifOutDiscards | 0 | 0 | 0 |
ifOutErrors | 0 | 0 | 0 |
ifOutQLen | 0 | 0 | 0 |
ifSpecific | .0.0 | .0.0 | .0.0 |
U Cisco menadžment modulu .1.3.6.1.4.1.9.9 mogu se naci OID-ovi od intersa za nadzor nad Cisco uredajima.
U slučaju podešavanja SNMP protokola na Linux operativnim sistemima prvo je potrebno instalirati SNMP deamona na server. U sledećem primeru biće opisana instalacija na CentOS 5.3 operativnom sistemu pomoću YUM komande. Sledeća komanda omogućuje automatizovanu instalaciju SNMP deamona i korisnih komandi za kontrolu rada SNMP-a.
yum install net-snmp net-snmp-utils |
---|
Sledeći korak je podešavanje servisa da se automatski pokreće prilikom startovanja servera. Potrebno je uneti sledeću komandu.
chkconfig snmpd on |
---|
Sledeća stavka je podešavanje community stringa i OID objekata koji mogu biti očitani sa servera. Potrebno je editovati fajl snmpd.conf koji se obično nalazi u direktorijumu /etc/snmp/ i izmeniti sledeće redove. U redu
com2sec notConfigUser default public |
---|
potrebno je promeniti defaultni community string public u željeni community string.
U redu:
view systemview included .1.3.6.1.2.1.1 |
---|
se vidi de su uključeni svi OID-ovi koji se nalaze ispod čvora .1.3.6.1.2.1.1 u MIB drvetu. Pomoću komande excluded moguće je isključiti pojedine OID vrednosti, odnosno uvesti ograničenja u prikazu MIB baze. Ovde je potrebno definisati OID vrednosti koje će server vraćati kao odgovor na SNMP upite. Ako NMS zatraži OID koji nije ovde definisan server neće odgovoriti NMS-u. U slučaju da želimo da omogućimo očitavanje svih OID vrednosti potrebno je uneti sledeći red:
view systemview included .1 |
---|
Na taj nacin su uključene sve vrednosti koje se nalaze ispod cvora .1 u MIB stablu, odnosno celo stablo.
Sada je potrebno pokrenuti servis sledećom komandom:
service snmpd start |
---|
Proveru je moguće uraditi pomoću sledeće komande:
snmpwalk –v 2c –c mojcommunity 127.0.0.1 |
---|
Kao rezultat će se prikazati cela MIB tabela (drvo), ili deo MIB tabele, koji je definisan prethodnim komandama za ograničenje prilikom očitavanja MIB baze.
Instalacija SNMP V3 agenta je ista kao za prethodnu verziju 2c, samo je sada potrebno pokrenuti verziju SNMP V3. Potrebno je editovati fajl snmpd.conf, i dodati sledeće komande.
syslocation MojGradiliLokacija |
---|
syscontact mojemail@provajder.com |
view mojpogled included .1.3.6.1.2.1.2.2 |
createUser john MD5 john1234 DES john5678 |
rouser john priv -V mojpogled |
Prva dva parametra, syslocation i syscontact su podaci koji služe da daju opšte informacije o serveru. Oni nisu značajni za ispravan rad SNMP protokola ali su bitni za administratore servera koji će imati pored osnovnih informacija o stanju servera i informaciju o lokaciji servera i kontakt osobi kojoj se mogu obratiti u slučaju pojave problema. Syslocation i Syscontact su neki od parametara koji se mogu naći na svim uređajima koji podržavaju SNMP protokol. Treći red definiše pogled, odnosno skup OID vrednosti iz MIB stabla. U ovom slučaju je definisana tabela interfejsa servera. Moguće je dodati više tabela ili pomoću komande exclude iskljuciti neke OID vrednosti. Ova ograničenja su veoma bitna zato što je pomocu SNMP–a moguće i postaviti neke parametre a to direktno može uticati na ispravan rad uredaja. Četvrta komanda kreira user-a john čiji je password john1234. Prlikom autentifikacije koristi se MD5 algoritam, a saobraćaj je enkriptovan pomocu DES algoritma. Passphrase koji se koristi prilikom enkripcije je john5678. Peta komanda user-u john daje read only (rouser) privilegije i to samo nad mojpogled pogledom na MIB bazu koji je definasn u trećoj komandi. Provera podešavanja SNMP V3 na serveru je moguća pomoću komande:
snmpwalk -v 3 -u john -l authPriv -a MD5 -A john1234 -x DES -X john5678 serveripaddr |
---|
Za ispravnu instalaciju SNMP protokola potreban je instalacioni disk instalirane verzije Windows server 2003 koga treba staviti u CD citac. Zatim u prozoru Windows Components wizard-a kliknuti na Next i pratiti korake instalacije.
Po konfigurisanju kliknuti na OK.
- Zatim kliknuti na Add, u odeljku Trap destinations.
- U polju Host name, IP or IPX address upisati IP adresu 10.0.10.2 kliknuti Add.
Upisano ime ili adresa hosta pojavice se u Trap destinations listi. - Kliknuti OK na kraju..
Intersantno je primetiti da windows 2000 ne podržava SNMP V3. U slučaju potrebe za SNMP V3 na Windows server je potrebno instalirati SNMP V3 agenta nekog drugog proizvođača, ta rešenja se mogu naći na internetu i besplatna su.
Pre implementacije monitoring sistema u mrežu potrebno je definisati parametre koji će se nadgledati. MIB baza pruža veliki broj OID parametara i pitanje je kako odabrati vrednosti koje nam pružaju najbitnije informacije o stanju mrežnih urežaja i linkova. Tendencija u IT svetu je da se koriste standardne IETF MIB baza koje treba svaki proizvođač uređaja treba da podržava. Parametri koji se najčešće prate kod mrežnih uređaja kao što su router-i i switc-evi su:
Instalacija SNMP-a koja se najčešće koristi kod linux operativnih sistema je net-snmp paket aplikacija. Programi koji služe za testiranje SNMP agenta na udaljenom uređaju se nalaze u net-snmp-utils paketu. Instalacija paketa se vrši pomoću sledeće komande:
yum install net-snmp-utils |
---|
Tom komandom se instalira niz aplikacija od kojih su za testiranje najbitnije snmpget i snmpwalk.
Razlika između ove dve komande je u tome što snmpget kao vrednost vraća samo OID vrednost koja je zadata u komandi dok snmpwalk uzima zadatu OID vrednost i kao rezultat vraća sve OID vrednosti koje se nalaze ispod nje u drvetu u MIB bazi.
Primer 1:
Verzija 2c | |
---|---|
snmpwalk -v 2c -c 192.168.10.5 .1.3.6.1.2.1.31.1.1.1.1 |
Verzija 3 | |
---|---|
snmpwalk –v 3 –u peraperic –l authPriv –a MD5 –A perapass –x DES –X pera1234 192.168.10.5 .1.3.6.1.2.1.31.1.1.1.1 |
Verzija 2c kao autentifikaciju koristi samo community string, dok verzija tri koristi i autentifikaciju i enkripciju.
Kao rezultat dobiće se tabela ifXName interfejsa koji postoje na uređaju. OID koji je zadat u komandi .1.3.6.1.2.1.31.1.1.1.1 predstavlja prvu kolonu u ifXTable tabeli. Umesto cele OID vrednosti moguće je koristiti i skraćenu verziju ifXTable.1.1.1.
Kao rezultat dobija se:
IF-MIB::ifName.1 = STRING: VL1 |
---|
IF-MIB::ifName.2 = STRING: Fa0/1 |
IF-MIB::ifName.3 = STRING: Fa0/2 |
IF-MIB::ifName.4 = STRING: Fa0/3 |
IF-MIB::ifName.5 = STRING: Fa0/4 |
IF-MIB::ifName.6 = STRING: Fa0/5 |
IF-MIB::ifName.7 = STRING: Fa0/6 |
IF-MIB::ifName.8 = STRING: Fa0/7 |
IF-MIB::ifName.9 = STRING: Fa0/8 |
Iz ove tabele se vidi gde se može javiti problem prilikom očitavanja SNMP vrednosti. Pošto uređaji mogu imati različit broj interfejsa SNMP agent sam dodaje indekse na kraju tabele IF-MIB::ifName.INDEX. U ovom slučaju postoji devet interfejsa i indeksi uzimaju vrednost od 1 do 9. U nekim slučajevima će se desiti da indeksi uzimaju neke drugačije vrednosti (recimo od 101 do 109), i tada se mora voditi računa o vrednostima indeksa. To se često sreće kod očitavanja memorije na Linux i Windows serverima. Takođe se može naći primer gde se indeksi dinamički menjaju. Primer je CDP tabela kod Cisco uređaja. Kada dođe do promene u CDP tabeli (link padne, izgubi se neighbour, pa se link vrati) u CDP-SNMP tabeli se prvo izbriše neighbour pa kada se ponovo uspostavi veza neighbour se vrati u CDP-SNMP tabelu ali sa novim indeksom.
Primer 2:
Verzija 2c | |
---|---|
snmpget -v 2c -c 192.168.10.5 ifXTable.1.1.1 |
Verzija 3 | |
---|---|
snmpget –v 3 –u peraperic –l authPriv –a MD5 –A perapass –x DES –X pera1234 192.168.10.5 ifXTable.1.1.1 |
Pomoću snmpget komande mogli bi samo da očitamo samo jednu vrednost recimo naziv prvog interfejsa u tabeli.
Kao rezultat dobija se:
IF-MIB::ifName.1 = STRING: Fa0/1 |
---|
Kod Windows operativnih sistema razvijen je veliki broj aplikacija koje se koriste za testiranje SNMP protokola. RCUB je razvio java aplikaciju (SNMPManager) koja se može pokretati na svim operativnim sistemima i koristi se za očitavanje SNMP vrednosti sa udaljenih uređaja. U daljem radu je objašnjen rad sa SNMPManager aplikacijom.
Prilikom startovanja aplikacije otvara se prozor u kome se zahteva od korisnika da unese ip adresu udaljenog uređaja i community string
koji je konfigurisan na njemu. (Za sada aplikacija podržava samo V1 i V2c).
Aplikacija se koristi tako što se u MIB drvetu sa leve strane izabere željeni element i selektuje opcija request kao što je prikazano na Slici 2. U desnom panelu će se dobiti SNMP odgovor udeljenog uređaja za izabranu OID vrednost u drvetu. Ispod MIB drveta se nalazi description panel u kome se može videti opis selektovane OID vrednosti.