SNMP简介

定义
简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。SNMP的特点如下:

  • 简单:SNMP采用轮询机制,提供最基本的功能集,适合小型、快速、低价格的环境使用,而且SNMP以UDP报文为承载,因而受到绝大多数设备的支持。
  • 强大:SNMP的目标是保证管理信息在任意两点传送,以便于管理员在网络上的任何节点检索信息,进行故障排查。

SNMP管理模型

SNMP系统包括网络管理系统NMS(Network Management Station)、代理进程Agent、被管对象Management object和管理信息库MIB(Management Information Base)四部分组成。
NMS作为整个网络的网管中心,对设备进行管理。
每个被管理设备中都包含驻留在设备上的Agent进程、MIB和多个被管对象。NMS通过与运行在被管理设备上的Agent交互,由Agent通过对设备端的MIB的操作,完成NMS的指令。
网络管理模型如图1所示。

snmp 业务架构 snmp概念_snmp 业务架构

下面介绍网络管理系统中各主要元素:

  • NMS
    NMS在网络中扮演管理者角色,是一个采用SNMP协议对网络设备进行管理/监视的系统,运行在NMS服务器上。
  • NMS可以向设备上的Agent发出请求,查询或修改一个或多个具体的参数值。
  • NMS可以接收设备上的Agent主动发送的Trap信息,以获知被管理设备当前的状态。
  • Agent
    Agent是被管理设备中的一个代理进程,用于维护被管理设备的信息数据并响应来自NMS的请求,把管理数据汇报给发送请求的NMS。
  • Agent接收到NMS的请求信息后,通过MIB表完成相应指令后,并把操作结果响应给NMS。
  • 当设备发生故障或者其它事件时,设备会通过Agent主动发送信息给NMS,向NMS报告设备当前的状态变化。
  • Managed object
    Managed object指被管理对象。每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件(如一块接口板),也可以是在硬件、软件(如路由选择协议)上配置的参数集合。
  • MIB
    MIB是一个数据库,指明了被管理设备所维护的变量(即能够被Agent查询和设置的信息)。MIB在数据库中定义了被管理设备的一系列属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等。
    通过MIB,可以完成以下功能:
  • Agent通过查询MIB,可以获知设备当前的状态信息。
  • Agent通过修改MIB,可以设置设备的状态参数。

SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。如图2所示的是管理信息库的一部分,它又称为对象命名树。每个OID(object identifier,对象标识符)对应于树中的一个管理对象,如system的OID为1.3.6.1.2.1.1,interfaces的OID为1.3.6.1.2.1.2。

通过OID树,可以高效且方便地管理其中所存储的管理信息,同时也方便了对其中的信息进行批量查询。
特别地,当用户在配置Agent时,可以通过MIB视图来限制NMS能够访问的MIB对象。MIB视图实际上是MIB的子集合。

snmp 业务架构 snmp概念_snmp 业务架构_02

SNMPv1/SNMPv2c

SNMPv1/SNMPv2c报文结构
如图1所示,SNMPv1/SNMPv2c报文主要由版本、团体名、SNMP PDU三部分构成。
图1 SNMPv1/SNMPv2c报文结构

snmp 业务架构 snmp概念_网络管理_03

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

  • 版本:表示SNMP的版本,如果是SNMPv1报文则对应字段值为0,SNMPv2c则为1。
  • 团体名:用于在Agent与NMS之间完成认证,字符串形式,用户可自行定义。团体名包括“可读”和“可写”两种,执行GetRequest、GetNextRequest操作时,采用“可读团体名”进行认证;执行Set操作时,则采用“可写团体名”认证。
  • SNMPv1/SNMPv2c PDU:包含PDU类型、请求标识符、变量绑定列表等信息。其中SNMPv1 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU和Trap PDU几种类型,SNMPv2c PDU在SNMPv1的基础上新增了GetBulkRequest PDU和InformRequest PDU两种类型。
    为了简化起见,SNMP操作今后叫做Get、GetNext、Set、Response、Trap、GetBulk和Inform操作。

SNMPv1/SNMPv2c操作类型

如表1所示,SNMPv1/SNMPv2c规定了7种操作类型,用来完成NMS和Agent之间的信息交换。

snmp 业务架构 snmp概念_字段_04

SNMPv1/SNMPv2c工作原理

SNMPv1和SNMPv2c的工作原理基本一致。SNMPv1/SNMPv2c的工作原理如图2所示。图2 基本操作类型

snmp 业务架构 snmp概念_版本号_05

  • Get操作
    假定NMS想要获取被管理设备MIB节点sysContact的值,使用可读团体名为public,过程如下所示:
  1. NMS:向Agent发送Get请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为public;PDU中PDU类型为Get类型,绑定变量填入MIB节点名sysContact。
  2. Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,向NMS发送响应;如果查询不成功,Agent会向NMS发送出错响应。
  • GetNext操作
    假定NMS想要获取被管理设备MIB节点sysContact的下一个节点sysName值,使用可读团体名为public,过程如下所示:
  1. NMS:向Agent发送GetNext请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为public;PDU中PDU类型为GetNext类型,绑定变量填入MIB节点名sysContact。
  2. Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求查询MIB中的sysContact的下一个节点sysName,得到sysName的值并将其封装到Response报文中的PDU,向NMS发送响应;如果查询不成功,Agent会向NMS发送出错响应。
  • Set操作
    假定NMS想要设置被管理设备MIB节点sysName的值为HUAWEI,使用可写团体名为private,过程如下所示:
  1. NMS:向Agent发送Set请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为private;PDU中PDU类型为Set类型,绑定变量填入MIB节点名sysName和需要设置的值HUAWEI。
  2. Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求设置管理变量在管理信息库MIB中对应的节点,设置成功后向NMS发送响应;如果设置不成功,Agent会向NMS发送出错响应。
  • Trap操作
    Trap不属于NMS对被管理设备的基本操作,它是被管理设备的自发行为。当被管理设备达到告警的触发条件时,会通过Agent向NMS发送Trap消息,告知设备侧出现的异常情况,便于网络管理人员及时处理。例如被管理设备热启动后,Agent会向NMS发送warmStart的Trap。
    这种Trap信息是受限制的。只有在设备端的模块达到模块预定义的告警触发条件时,Agent才会向管理进程报告。这种方法有其好处是仅在严重事件发生时才发送Trap信息,减少报文交互产生的流量。

SNMPv2c新增的操作如图3所示。图3 SNMPv2c新增操作

snmp 业务架构 snmp概念_字段_06

  • GetBulk操作
    基于GetNext实现,相当于连续执行多次GetNext操作。在NMS上可以设置被管理设备在一次GetBulk报文交互时,执行GetNext操作的次数。
  • Inform操作
    Inform操作也是被管理设备向NMS主动发送告警。与trap告警不同的是,被管理设备发送Inform告警后,需要NMS进行接收确认。如果被管设备没有收到确认信息则:
  1. 将告警暂时保存在Inform缓存中。
  2. 重复发送该告警,直到NMS确认收到该告警或者发送次数达到最大重传次数。
  3. 被管设备上会生成相应的告警日志。

由此可知,使用Inform告警可能会占用较多的系统资源。

SNMPv3
SNMPv3报文结构
SNMPv3定义了新的报文格式,其报文结构如图1所示。
图1 SNMPv3报文结构

snmp 业务架构 snmp概念_snmp 业务架构_07

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

  • 版本:表示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),引擎与应用程序均由多个小模块组成。
SNMPv3实体这种模块化的结构有以下优点:

  • 适应性强:适用于多种操作环境,既可以管理最简单的网络,又能够满足复杂网络的管理需求。
  • 方便管理:SNMP框架体系由多个功能相对独立的子系统或应用程序集合而成,因而可以很方便地对其进行管理。例如,若系统发生了故障,可以根据发生故障的功能类型,定位到相应的子系统。
  • 扩展性好:通过SNMP实体,可以很方便地进行系统扩展。比如,为了应用新的安全协议,就可以在安全子系统中为其定义单独的模块,从而在SNMP中支持该协议。

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

  • 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想要获取被管理设备MIB节点sysContact的值,使用认证加密方式,过程如图2所示:图2 SNMPv3的Get操作

snmp 业务架构 snmp概念_字段_08

  • 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发送出错响应。

举例-SNMPv3

  • snmp-agent
  • snmp-agent local-engineid 800007DB034C1FCCC94C28
  • snmp-agent sys-info contact contact call adminnistrator 17355297157
  • snmp-agent sys-info version v3
  • snmp-agent group v3 admin privacy read-view isoview write-view isoview notify-view   isoview  acl 2000
  • snmp-agent target-host trap address udp-domain 10.10.12.73 public-net params securityname nms2-admin v3 privacy
  • snmp-agent mib-view included isoview iso
  • snmp-agent usm-user v3 nms2-admin admin authentication-mode sha admin-123 privacy-mode des56 admin-1234
  • 查看

snmp 业务架构 snmp概念_版本号_09

snmp 业务架构 snmp概念_字段_10

snmp 业务架构 snmp概念_版本号_11

snmp 业务架构 snmp概念_字段_12

ZABBIX添加

snmpwalk -v 3 -u nms2-admin -l authPriv -a SHA -A admin-123 -x DES -X admin-1234 10.10.20.59

未完……