网络成瘾症

首页 » 常识 » 诊断 » 网络设备监控实现及SNMP协议
TUhjnbcbe - 2023/8/3 21:08:00

1.SNMP介绍

SNMP(简单网关协议,SimpleNetworkManagementProtocol)是专门设计用于在IP网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。SNMP的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB,改进后的协议就是著名的SNMP。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理。

基于TCP/IP的SNMP网络管理框架由3个主要部分组成,即管理信息结构SMI(StructureofManagementInformation)、管理信息库MIB和管理协议SNMP。

SMI:定义了SNMP框架所用信息的组织和标识,为MIB定义管理对象及使用管理对象提供模板。

MIB:定义了可以通过SNMP进行访问的管理对象的集合。

SNMP协议:定义了网络管理者如何对代理进程的MIB对象进行读写操作。

2.SNMP管理模型

SNMP的管理模型由SNMP管理站和SNMP代理组成,对网络的管理与维护是通过SNMP管理站与SNMP代理之间的交互工作完成的。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在被管理的网络节点之上,负责统计该节点的各项信息,并且与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。

下图是SNMP的管理模型,包括四个部分:网络管理系统NMS(NetworkManagementStation)、代理进程Agent、被管对象Managementobject和管理信息库MIB(ManagementInformationBase)四部分组成。

3.SNMP报文结构

目前SNMP有三个版本,分别是SNMPv1、SNMPv2c和SNMPv3。

SNMPv1是SNMP协议的最初版本,不过众多厂家依然支持实现SNMPv1。

SNMPv2是基于Community的SNMP实现。Community实质上就是密码。

SNMPv3是最新版本的SNMP。它对网络管理最大的贡献在于其安全性,增加了对认证和密文传输的支持。

SNMPv1/v2c报文结构

报文中的主要字段定义如下:

版本:表示SNMP的版本,如果是SNMPv1报文则对应字段值为0,SNMPv2c则为1。

团体名:用于在Agent与NMS之间完成认证,字符串形式,用户可自行定义。团体名包括“可读”和“可写”两种,执行GetRequest、GetNextRequest操作时,采用“可读团体名”进行认证;执行Set操作时,则采用“可写团体名”认证。

SNMPv1/SNMPv2cPDU:包含PDU类型、请求标识符、变量绑定列表等信息。

SNMPv3报文结构

SNMP报文中的主要字段定义如下:

版本:表示SNMP的版本,SNMPv3报文则对应字段值为2。

报头数据:主要包含消息发送者所能支持的最大消息尺寸、消息采用的安全模式等描述内容。

安全参数:包含SNMP实体引擎的相关信息、用户名、认证参数、加密参数等安全信息。

ContextEngineID:SNMP唯一标识符,和PDU类型一起决定应该发往哪个应用程序。

ContextName:用于确定ContextEngineID对被管理设备的MIB视图。

SNMPv3PDU:包含PDU类型、请求标识符、变量绑定列表等信息。

4.SNMPv1/v2工作原理

SNMPv1和SNMPv2c的工作原理基本一致,如下图。

下面以Get操作来说明SNMP的工作原理:假定NMS想要获取被管理设备MIB节点sysContact的值,使用可读团体名为public,过程如下所示:

NMS:向Agent发送Get请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为public;PDU中PDU类型为Get类型,绑定变量填入MIB节点名sysContact。

Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,向NMS发送响应;如果查询不成功,Agent会向NMS发送出错响应。

5.SNMPv3工作原理

SNMPv3提出了一个新的体系结构,即SNMPv3实体。SNMPv3实体可以分为SNMPv3引擎(SNMPv3Engine)和SNMPv3应用程序(SNMPv3Application),引擎与应用程序均由多个小模块组成。

SNMPv3由于采用了用户安全模块USM(User-basedSecurityModel)和基于视图的访问控制模块VACM(View-basedAccessControlModel),在安全性上得到了提升。

USM:提供身份验证和数据加密服务。实现这个功能要求NMS和Agent必须共享同一密钥。

  

身份验证:身份验证是指Agent或NMS接到信息时首先必须确认信息是否来自有权限的NMS或Agent并且信息在传输过程中未被改变。RFC中定义了HMAC,这是一种使用安全哈希函数和密钥来产生信息验证码的有效工具,在互联网中得到了广泛的应用。SNMP使用的HMAC可以分为两种:HMAC-MD5-96和HMAC-SHA-96。前者的哈希函数是MD5,使用位authKey作为输入。后者的哈希函数是SHA-1,使用位authKey作为输入。

加密:加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。加密的过程与身份验证类似,也需要管理站和代理共享同一密钥来实现信息的加密和解密。SNMP使用以下三种加密算法:DES、3DES、AES

VACM:对用户组或者团体名实现基于视图的访问控制。用户必须首先配置一个视图,并指明权限。用户可以在配置用户或者用户组或者团体名的时候,加载这个视图达到限制读写操作、Inform或Trap的目的。

SNMPv3的实现原理和SNMPv1/SNMPv2c基本一致,唯一的区别是SNMPv3增加了身份验证和加密处理。下面以Get操作为例介绍下SNMPv3的工作原理。

假定NMS想要获取被管理设备MIB节点sysContact的值,使用认证加密方式,过程下图所示:

NMS:向Agent发送不带安全参数的Get请求报文,向Agent获取ContextEngineID、ContextName和安全参数。

Agent:响应NMS的请求,并向NMS反馈请求的参数。

NMS:再次向Agent发送Get请求报文,报文中各字段的设置如下:  

版本:SNMPv3版本。

报头数据:指明采用认证、加密方式。

安全参数:NMS通过配置的算法计算出认证参数和加密参数,并填入相应字段。

PDU:将获取的ContextEngineID和ContextName填入相应字段,PDU类型设置为Get,绑定变量填入MIB节点名sysContact,并使用已配置的加密算法对PDU进行加密。

Agent:首先对消息进行认证,认证通过后对PDU进行解密。解密成功后,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,并对PDU进行加密,向NMS发送响应。如果查询不成功或认证、解密失败,Agent会向NMS发送出错响应。

6.SNMPV3的Java实现

在发起Snmp请求时,需要先建立SNMPSession。如下代码示例:

UserTargettarget=newUserTarget();target.setAddress(GenericAddress.parse(sb.toString()));target.setRetries(retries);target.setTimeout(timeout);target.setVersion(SnmpConstants.version3);target.setSecurityLevel(SecurityLevel.AUTH_PRIV);target.setSecurityName(newOctetString(user));SnmpSessionsession=newSnmpSession();session.setTarget(target);session.addUsmUser(newOctetString(user),oidAuthProtocol,octAuthPassphrase,oidPrivProtocol,octPrivPassphrase);

和SnmpV1/V2C最大的区别在于,创建SnmpV3Session时需要加入UsmUser安全认证模式。代码实现如下:

publicvoidaddUsmUser(OctetStringoctSecurityName,OIDoidAuthProtocol,OctetStringoctAuthPassphrase,OIDoidPrivProtocol,OctetStringoctPrivPassphrase){USMusm=newUSM(SecurityProtocols.getInstance(),newOctetString(MPv3.createLocalEngineID()),0);SecurityModels.getInstance().addSecurityModel(usm);snmp.getUSM().addUser(octSecurityName,newUsmUser(octSecurityName,oidAuthProtocol,octAuthPassphrase,oidPrivProtocol,octPrivPassphrase));}

7.PIGOSS的实现和扩展SNMP指标

可以支持Snmp进行数据采集的工具和产品很多,但是能很好支持SnmpV3的工具并不多。PIGOSS监控管理系统支持对市面上常用网络设备的监控,支持SNMP轮巡的数据采集,兼容SNMPv1,SNMPv2c和SNMPv3。

对于自动发现,可以采用SNMPScan方式对设备进行Snmp扫描,获取设备的Sysoid,从而对设备类型进行识别。

如果对于“陌生“的设备,如果支持SNMP,PIGOSS提供了SNMP扩展指标来进行数据采集和监控。只需要配置这个设备的oid,定义一个自定义的SNMP指标,就可以完成对这个设备的监控。如下图:

1
查看完整版本: 网络设备监控实现及SNMP协议