SNMP:简单网络管理协议:
管理者使用161,被管理者使用162
age使用161把
(一)SNMP协议的版本包括:
SNMPv1、SNMPv2c、SNMPv3
(二)SNMP组成:
(1)网络管理系统nms:{是管理者的角色,可以发出,可以接受snmp报文}
①nms在网络中扮演管理者角色,是一个采用snmp协议对网络设备进行管理/监视的系统,运行在nms服务器上。
②nms可以向设备上的agent发出请求,查询或修改一个或多个具体的参数值。
③nms可以接收设备上的agent主动发送的trap信息,以获知被管理设备当前的状态。
(2)代理进程agent:{查mib,响应nms}
①agent是被管理设备中的一个代理进程,用于维护被管理设备的信息数据并响应来自nms的请求,把管理数据汇报给发送请求的nms。
②agent接收到nms的请求信息后,通过mib表完成相应指令后,并把操作结果响应给nms。
③当设备发生故障或者其它事件时,设备会通过agent主动发送信息给nms,向nms报告设备当前的状态变化。
(3)被管对象management object:
①management object指被管理对象。每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件(如一块接口板),也可以是某些硬件,软件(如路由选择协议)及其的配置参数的集合。
(4)管理信息库mib:{定义了mib对应的变量就是数值对应的操作}
mib是一个数据库,指明了被管理设备所维护的变量(即能够被agent查询和设置的信息)。mib在数据库中定义了被管理设备的一系列属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等。
通过mib,可以完成以下功能:
①agent通过查询mib,可以获知设备当前的状态信息。
②agent通过修改mib,可以设置设备的状态参数
(5)总结:
每个被管理设备中都包含驻留在设备上的Agent进程、MIB和多个被管对象。NMS通过与运行在被管理设备上的Agent交互,由Agent通过对设备端的MIB的操作,完成NMS的指令
(三)SNMP报文处理过程:
Agent通过UDP端口161接收来自NMS的Request报文,Agent接收到报文后,其基本处理过程如下:
1、解码:依据ASN.1基本编码规则,生成用内部数据结构表示的报文。如果此过程出现错误导致解码失败,则丢弃该报文,不做进一步处理。
2、比较SNMP版本号:将报文中的版本号取出,与本Agent支持的SNMP版本号比较。如果不一致,则丢弃该报文,不做进一步处理。
3、团体名验证:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与Agent所在设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个Trap报文。SNMPv1提
供较弱的安全措施,在版本3中这一功能被加强。
4、提取PDU:从通过验证的ASN.1对象中提出协议数据单元PDU。如果失败,丢弃报文,不做进一步处理。
5、处理PDU:根据不同的PDU,SNMP协议实体进行不同的处理。得到管理变量在MIB树中对应的节点,从相应的模块中得到管理变量的值,形成Response报文,编码发回网管站。
6、网管站得到响应报文后,经过同样的处理,最终显示结果。
(四)报文组成结构:
(1)snmpv1/snmpv2c报文主要由版本、团体名、snmp pdu三部分构成:
①版本:表示snmp的版本,如果是snmpv1报文则对应字段值为0,snmpv2c则为1。
②团体名:用于在agent与nms之间完成认证,字符串形式,用户可自行定义。团体名包括“可读”和“可写”两种,执行getrequest、getnextrequest操作时,采用“可读团体名”进行认证;执行set操作时,则采用“可写团体名”认证。
③ PDU:snmpv1/snmpv2c pdu:包含pdu类型、请求标识符、变量绑定列表等信息。其中snmpv1 pdu包括getrequest pdu、getnextrequest pdu、setrequest pdu、response pdu和trap pdu几种类型,snmpv2c pdu在snmpv1的基础上新增了getbulkrequest pdu和informrequest pdu两种类型。
(2)snmpv1/snmpv2c操作类型:
1、get-request:
假定nms想要获取被管理设备mib节点“系统联系人”{syscontact}的值,使用可读团体名为public,过程如下所示:
①nms:向agent发送get请求报文。报文中各字段的设置如下:版本号为所使用的snmp版本;团体名为public;pdu中pdu类型为get类型,绑定变量填入mib节点名syscontact。
②agent:首先对报文中携带版本号和团体名进行认证,认证成功后,agent根据请求查询mib中的syscontact节点,得到syscontact的值并将其封装到response报文中的pdu,向nms发送响应;如果查询不成功,agent会向nms发送出错响应。
2、get-next-request:
假定nms想要获取被管理设备mib节点syscontact的下一个节点sysname值,使用可读团体名为public,过程如下所示:
①nms:向agent发送getnext请求报文。报文中各字段的设置如下:版本号为所使用的snmp版本;团体名为public;pdu中pdu类型为getnext类型,绑定变量填入mib节点名syscontact。
②agent:首先对报文中携带版本号和团体名进行认证,认证成功后,agent根据请求查询mib中的syscontact的下一个节点sysname,得到sysname的值并将其封装到response报文中的pdu,向nms发送响应;如果查询不成功,agent会向nms发送出错响应。
3、set-request:
假定nms想要设置被管理设备mib节点sysname的值为huawei,使用可写团体名为private,过程如下所示:
①nms:向agent发送set请求报文。报文中各字段的设置如下:版本号为所使用的snmp版本;团体名为private;pdu中pdu类型为set类型,绑定变量填入mib节点名syscontact和需要设置的值huawei。
②agent:首先对报文中携带版本号和团体名进行认证,认证成功后,agent根据请求设置管理变量在管理信息库mib中对应的节点,设置成功后向nms发送响应;如果设置不成功,agent会向nms发送出错响应。
4、trap操作:
trap不属于nms对被管理设备的基本操作,它是被管理设备的自发行为。当被管理设备达到告警的触发条件时,会通过agent向nms上运行的nms发送trap消息,告知设备侧出现的异常情况,便于网络管理人员及时处理。例如被管理设备热启动后,agent会向nms发送warmstart的trap。这种trap信息是受限制的。只有在设备端的模块达到模块预定义的告警触发条件时,agent才会向管理进程报告,这种方法有其好处是仅在严重事件发生时才发送trap信息,减少报文交互产生的流量。
(3)SNMPv2c新增两种报文类型:
1、getbulk操作:
基于getnext实现,相当于连续执行多次getnext操作。在nms上可以设置被管理设备在一次getbulk报文交互时,执行getnext操作的次数。
2、inform操作:
inform操作也是被管理设备向nms主动发送告警。与trap告警不同的是,被管理设备发送inform告警后,需要nms进行接收确认。如果被管设备没有收到确认信息则:
①将告警暂时保存在inform缓存中。
②重复发送该告警,直到nms确认收到该告警或者发送次数达到最大重传次数。
③被管设备上会生成相应的告警日志,由此可知,使用inform告警可能会占用较多的系统资源。
(7)总结:
1、nms发送get报文,里面会携带一个明确的oid值,告知被管理设备,被管理设备收到之后,就会查询id里面的对应的信息,并且通过respone报文告知nms
2、修改报文会通过:set报文里面携带一个oid,告知被管理id设备,去修改那一个过得配置,如果修改成功,被管理设备会通过reposn报文告知nms当前配置消失了
3、trap:会将自己的告警信息主动通过age送给nms
(五)snmpv3:
(1)报文结构:
(1)版本:表示snmp的版本,snmpv3报文则对应字段值为2。
(2)报头数据:主要包含消息发送者所能支持的最大消息尺寸、消息采用的安全模式等描述内容。
(3)安全参数:包含snmp实体引擎的相关信息、用户名、认证参数、加密参数等安全信息。
(4)SNMPv3 PDU:SNMPv3的PDU包含3部分内容。其中有以下3点:
①context egineid:snmp唯一标识符,和pdu类型一起决定应该发往哪个应用程序。
②context name:用于确定context egineid对被管理设备的mib视图。
③pdu data:包含pdu类型、请求标识符、变量绑定列表等信息。其中snmpv3 pdu包括getrequest pdu、getnextrequest pdu、setrequest pdu、response pdu、trap pdu、getbulkrequest pdu和informrequest pdu几种类型。
(2)snmpv3的结构:
1、基于snmp的nms提供了一个通用的实现模型,即snmpv3实体。snmpv3实体可以分为snmpv3引擎和snmpv3应用程序,引擎与应用程序均由多个小模块组成。
2、snmpv3由于采用了用户安全模块usm(user-based security model)和基于视图的访问控制模块vacm(view-based access control model),在安全性上得到了提升。
3、usm:身份验证:提供身份验证和数据加密服务,身份验证是指agent或nms接到信息时首先必须确认信息是否来自有权限的nms或agent并且信息在传输过程中未被改变,这是一种使用安全哈希函数和密钥来产生信息验证码的有效工具。snmp使用的hmac可以分为两种:hmac-md5-96和hmac-sha-96。前者的哈希函数是md5,使用128位authkey作为输入。后者的哈希函数是sha-1,使用160位authkey作为输入。
4、加密:加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。加密的过程与身份验证类似,也需要管理站和代理共享同一密钥来实现信息的加密和解密。snmp使用以下三种加密算法:
des:使用56bit的密钥对一个64bit的明文块进行加密。
3des:使用三个56bit的des密钥(共168bit密钥)对明文进行加密。
aes:使用128bit、192bit或256bit密钥长度的aes算法对明文进行加密
这三个加密算法的安全性由高到低依次是:aes、3des、des,安全性高的加密算法实现机制复杂,运算速度慢。为充分保证设备安全,建议选择安全性更高的aes算法。
5、vacm{类似于一个权限列表一样}:对用户组或者团体名实现基于视图的访问控制。用户必须首先配置一个视图,并指明权限,v1v2只能设置读写的视图,可以设置用户只读的用户节点可以写,使用默认的读和写,是最大权限的进行管理,这样就会导致很大的问题,无法确定到这该用户访问多少权限合适而v1v2是不能实现的。用户可以在配置用户或者用户组或者团体名的时候,加载这个视图达到限制读写操作、inform或trap的目的。
(3)snmpv3的工作原理:{可以理解为先发一个空模板,得到agent的安全模板,在将这个模板填入数值就可以}
snmpv3的实现原理和snmpv1/snmpv2c基本一致,唯一的区别是snmpv3增加了身份验证和加密处理。
1、假定nms想要获取被管理设备mib节点syscontact的值,使用认证加密方式
2、nms:向agent发送不带安全参数的get请求报文,向agent获取context egineid、context name和安全参数(snmp实体引擎的相关信息)。
3、agent:响应nms的请求,并向nms反馈请求的参数。
4、nms:再次向agent发送get请求报文,报文中各字段的设置如下:
①版本:snmpv3版本。
②报头数据:指明采用认证、加密方式。
③安全参数:nms通过配置的算法计算出认证参数和加密参数。将这些参数和获取的安全参数填入相应字段。
④pdu:将获取的context egineid和context name填入相应字段,pdu类型设置为get,绑定变量填入mib节点名syscontact,并使用已配置的加密算法对pdu进行加密。
⑤agent:首先对消息进行认证,认证通过后对pdu进行解密。解密成功后,agent根据请求查询mib中的syscontact节点,得到syscontact的值并将其封装到response报文中的pdu,并对pdu进行加密,向nms发送响应。如果查询不成功或认证、解密失败,agent会向nms发送出错响应。
(4)snmpv3的配置用户组和名的方式:
1、采用snmp自身的安全模块usm配置的用户组和用户名。
2、采用aaa配置的本地用户名组和用户名作为snmpv3的用户组和用户名。
(5)SNMPv3优点:
①适应性强:适用于多种操作环境,既可以管理最简单的网络,又能够满足复杂网络的管理需求。
②方便管理:SNMP框架体系由多个功能相对独立的子系统或应用程序集合而成,因而可以很方便地对其进行管理。例如,若系统发生了故障,可以根据发生故障的功能类型,定位到相应的子系统。
③扩展性好:通过SNMP实体,可以很方便地进行系统扩展。比如,为了应用新的安全协议,就可以在安全子系统中为其定义单独的模块,从而在SNMP中支持该协议。
④数据完整性:数据不会在未被授权方式下修改,数据顺序的改动也不会超出许可范围。
⑤数据来源验证:确认所收到的数据来自哪个用户。snmpv3定义的安全性是基于用户的,它验证的是生成消息的用户,而不是具体生成消息的应用程序。
⑥数据核实性检查:当nms或agent接收到消息时,对消息的生成时间进行检查,如果消息时间与系统当前时间的差超出了指定的时间范围,该消息就不被接受。这可以防止消息在网络传输过程中被恶意更改,或收到并处理恶意发送的消息。