SNMPv3
SNMPv3报文结构
SNMPv3定义了新的报文格式,其报文结构如图1-6所示。
SNMPv3报文中的主要字段定义如下:
- 版本:表示SNMP的版本,SNMPv3报文则对应字段值为2。
- 报头数据:主要包含消息发送者所能支持的最大消息尺寸、消息采用的安全模式等描述内容。
- 安全参数:包含SNMP实体引擎的相关信息、用户名、认证参数、加密参数等安全信息。
- Context EngineID:SNMP唯一标识符,和PDU类型一起决定应该发往哪个应用程序。
- Context Name:用于确定Context EngineID对被管理设备的MIB视图。
- SNMPv3 PDU:包含PDU类型、请求标识符、变量绑定列表等信息。其中SNMPv3 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU、GetBulkRequest PDU和InformRequest PDU。
SNMPv3的体系结构
SNMPv3提出了一个新的SNMP体系结构,这个体系结构为各种基于SNMP的NMS提供了一个通用的实现模型,即SNMPv3实体。SNMPv3实体可以分为SNMPv3引擎(SNMPv3 Engine)和SNMPv3应用程序(SNMPv3 Application),引擎与应用程序均由多个小模块组成。
- 适应性强:适用于多种操作环境,既可以管理最简单的网络,又能够满足复杂网络的管理需求。
- 方便管理:SNMP框架体系由多个功能相对独立的子系统或应用程序集合而成,因而可以很方便地对其进行管理。例如,若系统发生了故障,可以根据发生故障的功能类型,定位到相应的子系统。
- 扩展性好:通过SNMP实体,可以很方便地进行系统扩展。比如,为了应用新的安全协议,就可以在安全子系统中为其定义单独的模块,从而在SNMP中支持该协议。
USM:提供身份验证和数据加密服务。实现这个功能要求NMS和Agent必须共享同一密钥。
身份验证:身份验证是指Agent或NMS接到信息时首先必须确认信息是否来自有权限的NMS或Agent并且信息在传输过程中未被改变。RFC2104中定义了HMAC,这是一种使用安全哈希函数和密钥来产生信息验证码的有效工具,在互联网中得到了广泛的应用。SNMP使用的HMAC可以分为两种:HMAC-MD5-96和HMAC-SHA-96。前者的哈希函数是MD5,使用128位authKey作为输入。后者的哈希函数是SHA-1,使用160位authKey作为输入。
加密:加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。加密的过程与身份验证类似,也需要管理站和代理共享同一密钥来实现信息的加密和解密。SNMP使用以下三种加密算法:
- DES:使用56bit的密钥对一个64bit的明文块进行加密。
- 3DES:使用三个56bit的DES密钥(共168bit密钥)对明文进行加密。
- AES:使用128bit、192bit或256bit密钥长度的AES算法对明文进行加密。
这三个加密算法的安全性由高到低依次是:AES、3DES、DES,安全性高的加密算法实现机制复杂,运算速度慢。为充分保证设备安全,建议选择安全性更高的AES算法。
VACM:对用户组或者团体名实现基于视图的访问控制。用户必须首先配置一个视图,并指明权限。用户可以在配置用户或者用户组或者团体名的时候,加载这个视图达到限制读写操作、Inform或Trap的目的。
SNMPv3的工作原理
SNMPv3的实现原理和SNMPv1/SNMPv2c基本一致,唯一的区别是SNMPv3增加了身份验证和加密处理。下面以Get操作为例介绍下SNMPv3的工作原理。
NMS:向Agent发送不带安全参数的Get请求报文,向Agent获取Context EngineID、Context Name和安全参数(SNMP实体引擎的相关信息)。
Agent:响应NMS的请求,并向NMS反馈请求的参数。
- NMS:再次向Agent发送Get请求报文,报文中各字段的设置如下:
- 版本:SNMPv3版本。
- 报头数据:指明采用认证、加密方式。
- 安全参数:NMS通过配置的算法计算出认证参数和加密参数。将这些参数和获取的安全参数填入相应字段。
- PDU:将获取的Context EngineID和Context Name填入相应字段,PDU类型设置为Get,绑定变量填入MIB节点名sysContact,并使用已配置的加密算法对PDU进行加密。
Agent:首先对消息进行认证,认证通过后对PDU进行解密。解密成功后,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,并对PDU进行加密,向NMS发送响应。如果查询不成功或认证、解密失败,Agent会向NMS发送出错响应。