SNMP

版本:

SNMPv1:基于communities来实现,communities有三种方式read-only(只能从被管理端读取信息)、read-write(可以发送控制指令和读取被管理端信息)和trap(被监控端可以主动发送信息给监控端让其引起注意的)


SNMPv2:基于community-string-based的,而且这个版本也被叫做SNMPv2c


SNMPv3:由于v1v2版本在安全性挺差,所以v3版本增强了认证和通信双方的安全


但是由于一些互联网设备由于不支持这些安全标准等,所以现在网络上使用最多的还是SNMPv1


SNMP_第1张图片

MIBs:管理信息库,每一个标准的mibs都会提供一个标准的mibs库,这个标准的mibsMIB-II

大多数被监控对象名称和OID映射的关系表


SMI对象树:

SNMP_第2张图片

MIB-II子树:

SNMP_第3张图片

MIB-II组的主要描述:

SNMP_第4张图片

system:定义系统运行时间、系统contact和系统名称等对象

interfaces:追踪每一个接口的状态信息,发送、接收、错误和丢弃等的信息

at:地址转换,提供了nat功能的信息

ip:追踪ip,包括ip路由等的信息

icmp:追踪诸如ICMP错误、丢弃等信息

tcpTCP连接的状态信息(关闭、监听、synsent等信息)

udp:追踪UDP状态,数据包的进和出的信息等等

egp:追踪可用的关于EGP和保持一个EGP邻居表的状态信息

transmission:当前没有定义对象

snmpSNMP相关管理和追踪的发送和接收的数据包信息


网络监控的内容:

1、故障管理

2、配置管理

3、记账管理,用来做审计处理的

4、性能管理,硬件使用的情况等

5、安全管理


SNMP_第5张图片



只要我们启用了SNMP服务的话,默认就有两个community,一个是public(ro)privaterw


SNMP操作

get:获得一个指定的OID信息

SNMP_第6张图片

getnext:获得一个指定节点下的所有节点的信息

getbulk(仅仅SNMPv2SNMPv3才有):范围比getnext更广,可以获取到两级节点的信息

set:向对方发送控制指令

getresponse:获取响应的信息,由客户端发起的

trap:由trap端发起

notificationSNMPv2SNMPv3):

informSNMPv2SNMPv3):

report:(SNMPv2SNMPv3):


主机配置

主机资源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(监控端NMScommand

如果监控端使用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 (configure /etc/snmp/snmp.local.conf)

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