SNMP
版本:
SNMPv1:基于communities来实现,communities有三种方式read-only(只能从被管理端读取信息)、read-write(可以发送控制指令和读取被管理端信息)和trap(被监控端可以主动发送信息给监控端让其引起注意的)
SNMPv2:基于community-string-based的,而且这个版本也被叫做SNMPv2c
SNMPv3:由于v1、v2版本在安全性挺差,所以v3版本增强了认证和通信双方的安全
但是由于一些互联网设备由于不支持这些安全标准等,所以现在网络上使用最多的还是SNMPv1
MIBs:管理信息库,每一个标准的mibs都会提供一个标准的mibs库,这个标准的mibs叫MIB-II
大多数被监控对象名称和OID映射的关系表
SMI对象树:
MIB-II子树:
MIB-II组的主要描述:
system:定义系统运行时间、系统contact和系统名称等对象
interfaces:追踪每一个接口的状态信息,发送、接收、错误和丢弃等的信息
at:地址转换,提供了nat功能的信息
ip:追踪ip,包括ip路由等的信息
icmp:追踪诸如ICMP错误、丢弃等信息
tcp:TCP连接的状态信息(关闭、监听、synsent等信息)
udp:追踪UDP状态,数据包的进和出的信息等等
egp:追踪可用的关于EGP和保持一个EGP邻居表的状态信息
transmission:当前没有定义对象
snmp:SNMP相关管理和追踪的发送和接收的数据包信息
网络监控的内容:
1、故障管理
2、配置管理
3、记账管理,用来做审计处理的
4、性能管理,硬件使用的情况等
5、安全管理
只要我们启用了SNMP服务的话,默认就有两个community,一个是public(ro)和private(rw)
SNMP操作
get:获得一个指定的OID信息
getnext:获得一个指定节点下的所有节点的信息
getbulk(仅仅SNMPv2和SNMPv3才有):范围比getnext更广,可以获取到两级节点的信息
set:向对方发送控制指令
getresponse:获取响应的信息,由客户端发起的
trap:由trap端发起
notification(SNMPv2和SNMPv3):
inform(SNMPv2和SNMPv3):
report:(SNMPv2和SNMPv3):
主机配置
主机资源MIB定义一下几个组:
Host OBJECT IDENTIFIer ::= { MIB-2 25 }
子对象
hrSystem OBJECT IDENTIFIER ::{ host 1 } #系统的
hrStorage OBJECT IDENTIFIER ::{ host 1 } #存储
hrDevice OBJECT IDENTIFIER ::{ host 1 } #设备
hrSWRun OBJECT IDENTIFIER ::{ host 1 } #操作系统版本
hrSWRunPerf OBJECT IDENTIFIER ::{ host 1 } #系统的性能
hrSWInstalled OBJECT IDENTIFIER ::{ host 1 } #系统安装了哪些软件
两个安装包
net-snmp(被监控端Agent安装的)
net-snmp-utils(监控端NMS:command)
如果监控端使用trap的话,监控端还需要安装net-snmp
SNMP安装
[[email protected]]# yum install net-snmp net-snmp-utils -y
[root@Wiker ~]#service snmpd start
Starting snmpd: [ OK ]
获取关于主机相关的信息
[root@Wiker ~]#snmpget -v 2c -c public localhost host
HOST-RESOURCES-MIB::host= No Such Object available on this agent at this OID
获取本机所有的信息
[root@Wiker mibs]#snmpwalk -v 2c -c public localhost
SNMPv2-MIB::sysDescr.0= STRING: Linux Wiker.example.com 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 908:03:13 EST 2011 x86_64
SNMPv2-MIB::sysObjectID.0= OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance= Timeticks: (234238) 0:39:02.38
SNMPv2-MIB::sysContact.0= STRING: Root
SNMPv2-MIB::sysName.0= STRING: Wiker.example.com
SNMPv2-MIB::sysLocation.0= STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0= Timeticks: (13) 0:00:00.13
SNMPv2-MIB::sysORID.1= OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1
SNMPv2-MIB::sysORID.2= OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3= OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.4= OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5= OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6= OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7= OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8= OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORDescr.1= STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2= STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.3= STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.4= STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5= STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.6= STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.7= STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.8= STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORUpTime.1= Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.2= Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.3= Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.4= Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.5= Timeticks: (13) 0:00:00.13
SNMPv2-MIB::sysORUpTime.6= Timeticks: (13) 0:00:00.13
SNMPv2-MIB::sysORUpTime.7= Timeticks: (13) 0:00:00.13
SNMPv2-MIB::sysORUpTime.8= Timeticks: (13) 0:00:00.13
HOST-RESOURCES-MIB::hrSystemUptime.0= Timeticks: (322083) 0:53:40.83
HOST-RESOURCES-MIB::hrSystemUptime.0= No more variables left in this MIB View (It is past the end of the MIB tree)
获得特定的oid的信息,可以使用snmpget
[root@Wiker mibs]#snmpget -v 2c -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0
HOST-RESOURCES-MIB::hrSystemUptime.0= Timeticks: (366671) 1:01:06.71
定义获取关于tcp的状态信息:
首先可以查看下本机是否可以收集到关于tcp的状态信息
[root@Wiker ~]#snmpwalk -v 2c -c public localhost tcp
TCP-MIB::tcp = No Such Object available on this agent at this OID
在MIB-2库里面找到关于TCP的,然后找到TCP的标示符是多少
[root@Wiker ~]# cd/usr/share/snmp/mibs/
[root@Wiker mibs]#vim TCP-MIB.txt
-- the TCP basevariables group
tcp OBJECT IDENTIFIER ::= { mib-2 6 }
然后在snmp的配置文件里面定义关于tcp的状态信息收集
[root@Wiker ~]# vim/etc/snmp/snmpd.conf
# Make at least snmpwalk -v 1 localhost -c public system fastagain.
# name incl/excl subtree mask(optional)
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6.1.2.1.6
然后重启snmpd服务
[root@Wiker ~]#service snmpd restart
Stopping snmpd: [ OK ]
Starting snmpd: [ OK ]
查看关于tcp的信息
[root@Wiker ~]#snmpwalk -v 2c -c public localhost tcp
TCP-MIB::tcpRtoAlgorithm.0= INTEGER: other(1)
TCP-MIB::tcpRtoMin.0= INTEGER: 200 milliseconds
TCP-MIB::tcpRtoMax.0= INTEGER: 120000 milliseconds
TCP-MIB::tcpMaxConn.0= INTEGER: -1
TCP-MIB::tcpActiveOpens.0= Counter32: 41
TCP-MIB::tcpPassiveOpens.0= Counter32: 3
TCP-MIB::tcpAttemptFails.0= Counter32: 2
TCP-MIB::tcpEstabResets.0= Counter32: 0
TCP-MIB::tcpCurrEstab.0= Gauge32: 4
TCP-MIB::tcpInSegs.0= Counter32: 15131
TCP-MIB::tcpOutSegs.0= Counter32: 5634
TCP-MIB::tcpRetransSegs.0= Counter32: 1
TCP-MIB::tcpConnState.0.0.0.0.22.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.0.0.0.0.111.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.0.0.0.0.53781.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.25.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.199.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.631.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.5900.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.6010.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.6011.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.6012.0.0.0.0.0= INTEGER: listen(2)
TCP-MIB::tcpConnState.127.0.0.1.6013.0.0.0.0.0= INTEGER: listen(2)
…………………………..
更改 community默认设置,增加的安全性
[root@Wiker ~]# vim/etc/snmp/snmpd.conf
####
# First, map thecommunity name "public" into a "security name"
# sec.name source community
#com2secnotConfigUser default public
com2sec notConfigUser 127.0.0.1(来自于哪里的主机可以使用也是网段的话可以写成192.168.1.0/24) my-public(community的名字)
[root@Wiker ~]#service snmpd restart
Stopping snmpd: [ OK ]
Starting snmpd: [ OK ]
[root@Wiker ~]# snmpwalk -v 2c -c public localhost tcp #使用之前的用户名就会报错
Timeout: No Responsefrom localhost
[root@Wiker ~]# snmpwalk -v 2c -c my-public localhost tcp #更改成正确的community就可以收集信息了
TCP-MIB::tcpRtoAlgorithm.0= INTEGER: other(1)
TCP-MIB::tcpRtoMin.0= INTEGER: 200 milliseconds
TCP-MIB::tcpRtoMax.0= INTEGER: 120000 milliseconds
TCP-MIB::tcpMaxConn.0= INTEGER: -1
TCP-MIB::tcpActiveOpens.0= Counter32: 41
TCP-MIB::tcpPassiveOpens.0= Counter32: 3
TCP-MIB::tcpAttemptFails.0= Counter32: 2
TCP-MIB::tcpEstabResets.0= Counter32: 0
TCP-MIB::tcpCurrEstab.0= Gauge32: 4
TCP-MIB::tcpInSegs.0= Counter32: 15646
TCP-MIB::tcpOutSegs.0= Counter32: 6088
TCP-MIB::tcpRetransSegs.0= Counter32: 1
…………………………..
查看对方主机的关于一个协议(以tcp举例)的信息
[root@Wiker ~]#snmpnetstat -v 2c -c my-public -Can -Cp tcp 192.168.0.1
Active Internet (tcp)Connections (including servers)
Proto LocalAddress Remote Address (state)
tcp *.22 *.* LISTEN
tcp *.111 *.* LISTEN
tcp *.53781 *.* LISTEN
tcp 127.0.0.1.25 *.* LISTEN
tcp 127.0.0.1.199 *.* LISTEN
tcp 127.0.0.1.631 *.* LISTEN
tcp 127.0.0.1.5900 *.* LISTEN
tcp 127.0.0.1.6010 *.* LISTEN
tcp 127.0.0.1.6011 *.* LISTEN
tcp 127.0.0.1.6012 *.* LISTEN
tcp 127.0.0.1.6013 *.* LISTEN
tcp 172.16.1.254.53 *.* LISTEN
tcp 172.16.1.254.60159 172.16.1.1.22 ESTABLISHED
tcp 172.17.1.254.53 *.* LISTEN
tcp 172.18.1.254.53 *.* LISTEN
tcp 172.19.1.254.53 *.* LISTEN
tcp 192.168.0.1.22 192.168.0.66.54116 ESTABLISHED
tcp 192.168.0.1.22 192.168.0.66.56231 ESTABLISHED
tcp 192.168.0.1.22 192.168.0.66.59237 ESTABLISHED
tcp 192.168.122.1.53 *.* LISTEN