概念
是一种在IP网络中管理网络节点(如服务器、工作站、路由器、交换机等)的标准协议
简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个协议(application layer protocol)、(database schema)和一组资源对象。
SNMP的目标是管理Internet上众多厂家生产的软硬件平台
SNMP为协议,是TCP/IP协议族的一部分。它通过(UDP)来操作
原理:
- 被管理的设备
- SNMP代理
- 网络管理系统(NMS)
- 网络中被管理的每一个设备都存在一个管理信息库(MIB)用于收集并储存管理信息。通过SNMP协议,NMS能获取这些信息。被管理设备,又称为网络单元或网络节点,可以是支持SNMP协议的路由器、交换机、服务器或者主机等等。
- SNMP代理是被管理设备上的一个网络管理软件模块,拥有本地设备的相关管理信息,并用于将它们转换成与SNMP兼容的格式,传递给NMS。
- NMS运行应用程序来实现监控被管理设备的功能。另外,NMS还为网络管理提供大量的处理程序及必须的储存资源。
风险
MIB(
Management Information Base,管理信息库):是一个类似DNS的倒状的树状结构的映射关系,如下图:
由上图可见,MIB是以树状结构来组织数据的,每一个节点表示一个被管理的对象,每一个对象都可以从根开始找出一条唯一的路径,这个路径就是OID,如图中的system的OID就是(.1.3.6.1.2.1.1)。
SNMP协议命令:
这里只讨论在类linux上的实现,在linux上SNMP协议的实现是通过安装相应的软件包实现的,可以采用源码安装方式,也可以采用rpm包的安装方式,在Yum源中一个是net-snmp,另一个是net-snmp-utils,Agent只安装net-snmp包,NMS只安装net-snmp-utils包即可,如果NMS也要被监控,那net-snmp也需要安装。Agent端监听在UDP的161端口,NMS监听在UDP的162(如果要接受trap操作)。
我这里的实验环境:两台linux主机,nod0(192.168.0.200)为NMS,nod1(192.168.0.201)为Agent,系统都为CentOS 6.4 x86_64。
在Agent--即各个网络设备(如路由器,防火墙,主机)可以去查看一下配置文件“/etc/snmp/snmpd.conf”此配置文件多数是注释掉的,作为一个被监控端通常会被配置到的信息如下,
关于访问控制的,即哪个主机或网段可以从Agent上获取到信息:
1 2 3 | # First, map the community name "public" into a "security name" # sec.name source community com2sec notConfigUser default public 默认是以community为public来验证NMS发起的信息获取是不是以community为public发起的,如果是,则把要收集的信息获取后发送给NMS,如果不是,则拒绝响应。这里的community表示“社区、团体”,在此处就把它看成一个当作验证的密码。“source”默认为default,为了安全应该把“community”和"source"的两个值都做修改,如: # First, map the community name "public" into a "security name" # sec.name source community com2sec notConfigUser 192.168.0.0 /24 testpublic 关于MIB访问控制的: # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) view systemview included .1.3.6.1.2.1.1 这部分是定义哪些MIB节点是可以访问的 incl 表示包含 excl 表示排除 mask 表示掩码 关于snmp的命令有许多,此处只挑选几个做说明: [root@nod0 ~] # snmp snmpbulkget snmpd snmpget snmpnetstat snmptable snmptrap snmpvacm snmpbulkwalk snmpdelta snmpgetnext snmpset snmptest snmptrapd snmpwalk snmpconf snmpdf snmpinform snmpstatus snmptranslate snmpusm snmpget命令:用snmp get操作向网络实体发起一个获取请求,此命令最后必须跟上至少一个OID snmpget [COMMON OPTIONS] [-Cf] OID [OID]... - v 1|2c|3 specifies SNMP version to use -c COMMUNITY 指定community 举例: [root@nod0 ~] # snmpget -v 2c -c testpublic 192.168.0.201 SNMPv2-MIB::sysName.0 SNMPv2-MIB::sysName.0 = STRING: nod1 #获取到192.168.0.201的主机名 snmpwalk命令:用snmp getnext请求指定MIB的子树 - v 1|2c|3 specifies SNMP version to use -c COMMUNITY 指定community 举例: [root@nod0 ~] # snmpwalk -v 2c -c testpublic 192.168.0.201 interfaces #获取远程主机MIB中interfaces子树的全部信息 IF-MIB::ifNumber.0 = INTEGER: 2 IF-MIB::ifIndex.1 = INTEGER: 1 IF-MIB::ifIndex.2 = INTEGER: 2 IF-MIB::ifDescr.1 = STRING: lo IF-MIB::ifDescr.2 = STRING: eth0 IF-MIB::ifType.1 = INTEGER: softwareLoopback(24) IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6) IF-MIB::ifMtu.1 = INTEGER: 16436 IF-MIB::ifMtu.2 = INTEGER: 1500 IF-MIB::ifSpeed.1 = Gauge32: 10000000 IF-MIB::ifSpeed.2 = Gauge32: 0 IF-MIB::ifPhysAddress.1 = STRING: IF-MIB::ifPhysAddress.2 = STRING: 0:c:29:c6:f7:7a IF-MIB::ifAdminStatus.1 = INTEGER: up(1) IF-MIB::ifAdminStatus.2 = INTEGER: up(1) IF-MIB::ifOperStatus.1 = INTEGER: up(1) IF-MIB::ifOperStatus.2 = INTEGER: up(1) IF-MIB::ifLastChange.1 = Timeticks: (0) 0:00:00.00 IF-MIB::ifLastChange.2 = Timeticks: (0) 0:00:00.00 IF-MIB::ifInOctets.1 = Counter32: 0 IF-MIB::ifInOctets.2 = Counter32: 7789122 IF-MIB::ifInUcastPkts.1 = Counter32: 0 IF-MIB::ifInUcastPkts.2 = Counter32: 7687 IF-MIB::ifInNUcastPkts.1 = Counter32: 0 IF-MIB::ifInNUcastPkts.2 = Counter32: 0 IF-MIB::ifInDiscards.1 = Counter32: 0 IF-MIB::ifInDiscards.2 = Counter32: 0 IF-MIB::ifInErrors.1 = Counter32: 0 IF-MIB::ifInErrors.2 = Counter32: 0 IF-MIB::ifInUnknownProtos.1 = Counter32: 0 IF-MIB::ifInUnknownProtos.2 = Counter32: 0 IF-MIB::ifOutOctets.1 = Counter32: 0 IF-MIB::ifOutOctets.2 = Counter32: 484581 IF-MIB::ifOutUcastPkts.1 = Counter32: 0 IF-MIB::ifOutUcastPkts.2 = Counter32: 5040 IF-MIB::ifOutNUcastPkts.1 = Counter32: 0 IF-MIB::ifOutNUcastPkts.2 = Counter32: 0 IF-MIB::ifOutDiscards.1 = Counter32: 0 IF-MIB::ifOutDiscards.2 = Counter32: 0 IF-MIB::ifOutErrors.1 = Counter32: 0 IF-MIB::ifOutErrors.2 = Counter32: 0 IF-MIB::ifOutQLen.1 = Gauge32: 0 IF-MIB::ifOutQLen.2 = Gauge32: 0 IF-MIB::ifSpecific.1 = OID: SNMPv2-SMI::zeroDotZero IF-MIB::ifSpecific.2 = OID: SNMPv2-SMI::zeroDotZero snmpbulkwalk命令:用snmp getbulk对指定对象的MIB上的树进行查询,用法与snmpwalk一样。 snmptranslate命令:这个命令可以让名称性的OID转换为数字型 举例: [root@nod0 ~] # snmptranslate -On -IR system (-On表示以数字格式输出,-IR表示随机访问MIB) .1.3.6.1.2.1.1 [root@nod0 ~] # snmptranslate -Onf -IR system (-f表示列出名称型的OID) .iso.org.dod.internet.mgmt.mib-2.system |