This shows you the differences between two versions of the page.
saisp:labs:03:contents:04 [2014/03/09 14:25] mihai.carabas created |
saisp:labs:03:contents:04 [2014/03/10 17:46] (current) alexandru.carp |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 04. SNMP server pe Linux ==== | + | ==== 04. [15p] SNMP server pe Linux ==== |
- | * SNMP - tutorial | + | În exercițiul [[saisp:labs:03:contents:03|]] am configurat serverul de SNMP pe rutere CISCO. După cum am precizat anterior SNMP este implementat în general pe toate echipamentele, inclusiv pe sistemele Linux. |
- | * activare SNMP server pe linux | + | |
- | * crearea unei noi intrari care sa exporte valorile obtinute in urma executiei unui script custom | + | |
+ | Pe statia ''gateway'', vom instala pachetul ''snmpd'' care conține serverul de SNMP:<code bash> | ||
+ | root@gateway:~# apt-get install snmpd | ||
+ | </code> | ||
+ | În mod implicit acesta ascultă doar pe ''localhost''. Trebuie să modificăm linia ''agentAddress udp:127.0.0.1:161'' în ''agentAddress udp:161'' (pe orice intefață) din fișierul de configurare al ''snmpd'' (''/etc/snmp/snmpd.conf'') și să resetăm daemonul (''/etc/init.d/snmpd restart''). | ||
+ | |||
+ | Dorim să realizăm o interogare de pe stația ''monitor'' către stația ''gateway'' prin care să listăm toate interfețele:<code> | ||
+ | root@monitor:~# snmpwalk -v2c -c public 192.168.1.3 IF-MIB::ifName | ||
+ | IF-MIB::ifName = No more variables left in this MIB View (It is past the end of the MIB tree) | ||
+ | </code> | ||
+ | Acest comportament e cauzat tot de o configurație a daemonului ''snmpd''. În fișierul de configurare pe linia în care se specifică comunitatea (parola) ''rocommunity public default -V systemonly'' se observă opțiunea ''-V systemonly'' care limitează proprietățile expuse doar la cele legate de starea sistemului (exemplu: uptime-ul), ''systemonly'' fiind un subset de OID-uri definit mai sus în fișier. | ||
+ | |||
+ | Eliminăm acea opțiune, resetăm serviciul ''snmpd'' și refacem interogarea:<code bash> | ||
+ | root@gateway:~# cat /etc/snmp/snmpd.conf |grep rocomm | ||
+ | # rocommunity public default -V systemonly | ||
+ | rocommunity public default | ||
+ | root@gateway:~# /etc/init.d/snmpd restart | ||
+ | [....] Restarting network management services:: snmpd | ||
+ | |||
+ | root@monitor:~# snmpwalk -v2c -c public 192.168.1.3 IF-MIB::ifName | ||
+ | IF-MIB::ifName.1 = STRING: lo | ||
+ | IF-MIB::ifName.2 = STRING: eth0 | ||
+ | IF-MIB::ifName.3 = STRING: eth1 | ||
+ | </code> | ||
+ | |||
+ | Cuvântul cheie ''default'' din linia ce configurează comunitatea ''public'' permite oricărei adresă IP să facă interogarea. Dacă dorim securizarea interogării la o clasă de adrese IP (192.168.1.0/24 în cazul nostru) putem înlocui ''default'' cu clasa respectivă (''192.168.1.0/24''):<code bash> | ||
+ | root@gateway:~# cat /etc/snmp/snmpd.conf|grep 192. | ||
+ | rocommunity public 192.168.1.0/24 | ||
+ | root@gateway:~# /etc/init.d/snmpd restart | ||
+ | [....] Restarting network management services:: snmpd | ||
+ | |||
+ | root@monitor:~# snmpwalk -v2c -c public 192.168.1.3 IF-MIB::ifName | ||
+ | IF-MIB::ifName.1 = STRING: lo | ||
+ | IF-MIB::ifName.2 = STRING: eth0 | ||
+ | IF-MIB::ifName.3 = STRING: eth1 | ||
+ | |||
+ | root@gateway:~# snmpwalk -v2c -c public 192.168.0.3 | ||
+ | Timeout: No Response from 192.168.0.3 | ||
+ | root@gateway:~# tail -1 /var/log/syslog | ||
+ | Mar 9 19:11:51 gateway snmpd[4984]: Connection from UDP: [192.168.0.3]:55453->[192.168.0.3]:161 | ||
+ | </code> | ||
+ | Se observă că la interogarea folosind adresa IP sursă ''192.168.0.3'', serverul nu mai răspunde (automat se folosește adresa IP sursă ''192.168.0.3'' când facem interogarea de pe aceeași mașină către aceeași adresă IP). | ||
+ | |||
+ | SNMP este un protocol extensibil putând adăuga noi proprietăți care să fie exportate serverelor de management/monitorizare. Putem crea script-uri custom care să preia valori din sistem și să le expună prin SNMP. | ||
+ | |||
+ | Creați un script pe stația ''gateway'' care întoarce numărul de intrări din ''passwd'':<code bash> | ||
+ | root@gateway:~# cat /tmp/getUserNo | ||
+ | #!/bin/bash | ||
+ | |||
+ | echo Numarul de utilizatori din sistem este: $(getent passwd | wc -l) | ||
+ | |||
+ | root@gateway:~# chmod +x /tmp/getUserNo | ||
+ | root@gateway:~# /tmp/getUserNo | ||
+ | Numarul de utilizatori din sistem este: 26 | ||
+ | </code> | ||
+ | |||
+ | Dorim să exportăm rezultatul acestui script prin SNMP pentru ca stația ''monitor'' să poată să îl preia. În fișierul ''/etc/snmp/snmpd.conf'' avem la dispoziție comanda ''extend'' (''/extend''). Vom adăuga o nouă intrare de tipul ''extend-sh'':<code> | ||
+ | root@gateway:~# cat /etc/snmp/snmpd.conf |grep getUser | ||
+ | extend-sh userNo /tmp/getUserNo | ||
+ | root@gateway:~# /etc/init.d/snmpd restart | ||
+ | [....] Restarting network management services:: snmpd | ||
+ | </code> | ||
+ | Conform comentariilor din ''snmpd.conf'' ieșirea scriptului este exportată prin proprietatea '' NET-SNMP-EXTEND-MIB::nsExtendOutput1Table'':<code bash> | ||
+ | root@monitor:~# snmpwalk -v2c -c public 192.168.1.3 NET-SNMP-EXTEND-MIB::nsExtendOutput1Table|grep userNo | ||
+ | NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."userNo" = STRING: Numarul de utilizatori din sistem este: 26 | ||
+ | NET-SNMP-EXTEND-MIB::nsExtendOutputFull."userNo" = STRING: Numarul de utilizatori din sistem este: 26 | ||
+ | NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."userNo" = INTEGER: 1 | ||
+ | NET-SNMP-EXTEND-MIB::nsExtendResult."userNo" = INTEGER: 0 | ||
+ | </code> | ||
+ | |||
+ | După cum se vede scriptul este executat, iar output-ul acestuia este trimis prin SNMP. Adăugați un nou user pe stația ''gateway'' și executați interogarea de mai sus. Observați modificarea valorii la ''27''. | ||
+ | <solution -hidden> | ||
+ | <code bash> | ||
+ | root@gateway:~# adduser test | ||
+ | [...] | ||
+ | root@monitor:~# snmpwalk -v2c -c public 192.168.1.3 NET-SNMP-EXTEND-MIB::nsExtendOutput1Table|grep userNo | ||
+ | NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."userNo" = STRING: Numarul de utilizatori din sistem este: 27 | ||
+ | </code> | ||
+ | </solution> |