În exercițiul 03. [15p] Configurare server SNMP pe echipamente CISCO 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.
Pe statia gateway
, vom instala pachetul snmpd
care conține serverul de SNMP:
root@gateway:~# apt-get install snmpd
Î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:
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)
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:
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
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
):
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
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
:
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
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
:
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
Conform comentariilor din snmpd.conf
ieșirea scriptului este exportată prin proprietatea NET-SNMP-EXTEND-MIB::nsExtendOutput1Table
:
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
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
.