SNMP系统讲解

一、首先我首先要说下什么是SNMP?

SNMP是简单的网络管理协议,它不是一个软件,而是用于网络管理的一套规则。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。

但话又说回来,为什么要使用SNMP协议?

因为网络设备可能来自不同的厂商,如果每个厂商提供一套独立的管理接口,将使网络管理变得越来越复杂,若想对网络中来自不同厂商的设备监控,用基于SNMP开发的软件进行管理最方便的,因为大部分的设备都支持SNMP协议。

那么SNMP有哪些技术有点?

(1)基于TCP/IP互联网的标准协议,传输层协议一般用UDP

(2)自动化网络管理。网络管理员可以利用SNMP平台在网络上的节点检索信息、修改信息、发现故障、完成故障诊断、进行容量规划和生成报告

(3)屏蔽不同设备的物理差异,实现对不同厂商产品的自动化管理。SNMP只提供最基本得功能集,使得管理任务与被管理设备的物理特征和实际网络类型相对独立,从而实现对不同厂商设备的管理

(4)简单的请求-应答方式和主动通告方式相结合,并有超时和重传机制

(5)报文种类少,报文格式简单,方便解析,易于实现

(6)SNMPv3版本提供了认证和加密安全机制,以及基于用户和视图的访问控制功能,增强了安全性

 

二、SNMP的网络架构

SNMP网络架构由三部分组成:NMS(网络管理站)、Agent(代理)、MIB(管理信息库)

1、NMS(网络管理站)

NMS是网络中的管理者,是一个利用SNMP协议对网络设备进行管理和监视的系统。可以是一台专门用来进行网络管理的服务器,也可以指某个设备中之中管理功能的一个应用程序。

NMS可以向Agent发出请求,查询或修改一个或多个具体的参数值。同时,NMS可以接收Agent主动发送的Trap信息,以获知被管理设备当前的状态

 

2、Agent

Agent是网络设备中的一个应用模块,用于维护被管理设备的信息数据,并响应NMS的请求,把管理数据汇报给发送请求的NMS。

 

Aent接收到NMS的请求信息后,完成查询或修改操作,并把操作结果发送给NMS,完成响应。同时,当设备发生故障或者其他事件的时候,Agent会主动发送Trap信息给NMS,通知设备当前的状态变化。

 

3、MIB

任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB就是被管理对象的集合。它定义了被管理对象的一系列的属性:对象的名称、对象的访问权限和对象的数据

类型等。每个Agent都有自己的MIB。MIB也可以看做是NMS和Agent之间的一个接口,通过这个接口,NMS可以对Agent中的每一个被管理对象进行读/写操作,从而达到管理和监控设备的目的。

 

NMS、Agent和MIB之间的关系如图所示:

 

 

MIB的结构:

MIB是以树状结构进行存储的,树的节点表示被管理对象,它可以用从根开始的一条路径唯一地识别,这条路径就称为OID。

如图所示,管理对象system可以用一串数字{1.3.6.1.2.1.1}唯一标识,这串数字就是system的OID。

 

 

 

 三、SNMP的操作

 

后续的文章我们会通过抓包工具来抓取报文,来具体的分析SNMP报文的格式,以及SNMPv1、v2c、v3版本的相同与区别,以及v3所用的基于用户和基于视图的安全措施,认证和加密的过程!

 

上一篇文章讲解了SNMP的基本架构,本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1、v2c、v3)进行区别!

四、SNMP协议数据单元

在SNMP管理中,管理站(NMS)和代理(Agent)之间交换的管理信息构成了SNMP报文,报文的基本格式如下图1:

                                                              图 1

SNMP主要有SNMPv1、SNMPV2c、SNMPv3几种最常用的版本。

1、SNMPv1

 

SNMPv1是SNMP协议的最初版本,提供最小限度的网络管理功能。SNMPv1的SMI和MIB都比较简单,且存在较多安全缺陷。

SNMPv1采用团体名认证。团体名的作用类似于密码,用来限制NMS对Agent的访问。如果SNMP报文携带的团体名没有得到NMS/Agent的认可,该报文将被丢弃。

报文格式如下图2:

                                                                 图 2

从上图可以看出,SNMP消息主要由Version、Community、SNMP PDU几部分构成。其中,报文中的主要字段定义如下:

Version:SNMP版本

Community:团体名,用于Agent与NMS之间的认证。团体名有可读和可写两种,如果是执行Get、GetNext操作,则采用可读团体名进行认证;如果是执行Set操作,则采用可写团体名进行认证。

Request ID:用于匹配请求和响应,SNMP给每个请求分配全局唯一的ID。

Error status:用于表示在处理请求时出现的状况,包括noError、tooBig、noSuchName、badValue、readOnly、genErr。

Error index:差错索引。当出现异常情况时,提供变量绑定列表(Variable bindings)中导致异常的变量的信息。

Variable bindings:变量绑定列表,由变量名和变量值对组成。

enterprise:Trap源(生成Trap信息的设备)的类型。

Agent addr:Trap源的地址。

Generic trap:通用Trap类型,包括coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeighborLoss、enterpriseSpecific。

Specific trap:企业私有Trap信息。

Time stamp:上次重新初始化网络实体和产生Trap之间所持续的时间,即sysUpTime对象的取值。

用Wireshark抓取的SNMPv1版本的报文格式如下图3:

                                                                                                      图 3

192.168.2.1是Agent的ip地址,192.168.2.110是NMS的ip地址

从上图可以看到,SNMPv1版本的安全性不太好,可以抓取到community也即是团体名;tarp操作只有发送报文没有响应报文。

 


2、SNMPv2c

SNMPv2c也采用团体名认证。在兼容SNMPv1的同时又扩充了SNMPv1的功能:它提供了更多的操作类型(GetBulk和inform操作);支持更多的数据类型(Counter32等);提供了更丰富的错误代码,能够更细致地区分错误。

在v1版本中只有数据类型的错误码,而v2c版本中增加了不少,如下图4:

                                             图 4

SNMPv2报文格式如下图5:

                                                               图 5

 

比较SNMPv1而言,SNMPv2c新增了GetBulk操作报文和inform操作报文。GetBulk操作所对应的基本操作类型是GetNext操作,通过对Non repeaters和Max repetitions参数的设定,高效率地从Agent获取大量管理对象数据。而inform操作也就是相当于Trap的升级操作,但是二者又有什么不同之处呢?Trap报文发出去之后不会收到响应报文,而inform报文在发出报文之后能收到响应报文。

抓取的报文格式如下:

(1)GetBulk操作,批量获取数据,如下图6:

                                                                                               图 6

(2)inform操作,可以看到它与trap操作的区别,有个响应报文,如下图7:

                                                                                              图 7

 

SNMPv2c修改了Trap报文格式。SNMPv2c Trap PUD采用SNMPv1 Get/GetNext/Set PDU的格式,并将sysUpTime和snmpTrapOID作为Variable bindings中的变量来构造报文(可参照上图3的get-next的response和下图9SNMPv2的trap进行对比),报文格式如下:

(1)SNMPv1版本的tarp报文格式如下图8:

                                                                                           图 8

(2)SNMPv2的trap报文格式如下图9:

                                                                                           图 9

3、SNMPv3

 

SNMPv3主要在安全性方面进行了增强,它采用了USM和VACM技术。USM提供了认证和加密功能,VACM确定用户是否允许访问特定的MIB对象以及访问方式。

USM(基于用户的安全模型)

USM引入了用户名和组的概念,可以设置认证和加密功能。认证用于验证报文发送方的合法性,避免非法用户的访问;加密则是对NMS和Agent之间传输的报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为NMS和Agent之间的通信提供更高的安全性。

VACM(基于视图的访问控制模型)

VACM技术定义了组、安全等级、上下文、MIB视图、访问策略五个元素,这些元素同时决定用户是否具有访问的权限,只有具有了访问权限的用户才能管理操作对象。在同一个SNMP实体上可以定义不同的组,组与MIB视图绑定,组内又可以定义多个用户。当使用某个用户名进行访问的时候,只能访问对应的MIB视图定义的对象。

由于v3版本的增加了不少内容,所以决定在下一篇文章中再详细的讲解SNMPv3。

 

在上篇文章中,说到了SNMPv3主要在安全性方面进行了增强,采用USM(基于用户的安全模型)和VACM(基于视图的访问控制模型)技术。下面我们就主要讲解SNMPv3的报文格式以及基于USM的认证和加密过程!

1、SNMPv3的消息格式如下图1:

                                                                      图 1

 

其中,整个SNMPv3消息可以使用认证机制,并对EngineID、ContextName、PDU消息体部分进行加密。RequestID、MaxSize、Flags、SecurityModel、SecurityParameters构成SNMPv3消息头。

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

RequestID:请求报文的序列号。

MaxSize:消息发送者所能够容纳的消息最大字节,同时也表明了发送者能够接收到的最大字节数。

Flags:消息标识位,占一个字节。

SecurityModel:消息的安全模型值,取值为0~3。0表示任何模型,1表示采用SNMPv1安全模型,2表示采用SNMPv2c安全模型,3表示采用SNMPv3安全模型。

ContextEngineID:唯一识别一个SNMP实体。对于接收消息,该字段确定消息该如何处理;对于发送消息,该字段在发送一个消息请求时由应用提供。

ContextName:唯一识别在相关联的上下文引擎范围内部特定的上下文。

安全参数SecurityParameters又包括以下主要字段:

AuthoritativeEngineID:消息交换中权威SNMP的snmpEngineID,用于SNMP实体的识别、认证和加密。该取值在Trap、Response、Report中是源端的snmpEngineID,对Get、GetNext、GetBulk、Set中是目的端的snmpEngineID。

AuthoritativeEngineBoots:消息交换中权威SNMP的snmpEngineBoots。表示从初次配置时开始,SNMP引擎已经初始化或重新初始化的次数。

AuthoritativeEngineTime:消息交换中权威SNMP的snmpEngineTime,用于时间窗判断。

UserName:用户名,消息代表其正在交换。NMS和Agent配置的用户名必须保持一致。

AuthenticationParameters:认证参数,认证运算时所需的密钥。如果没有使用认证则为空。

PrivacyParameters:加密参数,加密运算时所用到的参数,比如DES CBC算法中形成初值IV所用到的取值。如果没有使用加密则为空。

 

2、下面根据实际操作,用Wireshark抓取的报文来讲解SNMPv3协议的工作的过程:

说明:192.168.2.110是NMS的ip地址,192.168.2.1是Agent的ip地址

(1)由于SNMPv3进行数据交互的过程中要进行加密和认证,所以NMS首先要从Agent获取AuthoritativeEngineID(标识一个SNMP实体)、AuthoritativeEngineBoots和AuthoritativeEngineTime(同步NMS和Agent时间,保证消息接收的时效性,同时也是用来进行数据认证和加密的参数),如下图2:

                                                                                     图 2

(2)Agent回复NMS请求的参数,回复报文如下图3:

                                                                               图 3

(3)NMS继续向Agent获取AuthoritativeEngineBoots和AuthoritativeEngineTime参数,如下图4:

                                                                                  图 4

(4)Agent对NMS的请求进行响应,如下图5:

                                                                           图 5

(5)下面开始正常数据操作,如下图6:

                                                                              图 6

(6)Agent向NMS响应数据请求,如下图7,传输的数据都进行了加密,可见SNMPv3的安全性:

                                                                              图 7

 

 下一篇文章的主要内容主要就是讲SNMPv3的认证和加密过程!

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值