SNMP是 “Simple Network Management Protocol” 的缩写,中文意思是简单网络管理协议,它是由互联网工作小组在RFC1157中定义的应用层协议,用于在网络实体或节点之间交换管理或监控信息。
作为运维人员,我们很大一部分的工作就是为了保证我们的网络能够正常、稳定的运行。因此监控,控制,管理各种网络设备成了我们日常的工作。在网络兴起的早期,维护方式就是运维人员蹲在近端对设备进行各种操作,当网络设备越来越多,网络规模越来越大时,管理工作会变得越来越单调乏味,这样的近端维护方式也近乎不可能。因此,远程管理网络的需求日益迫切,SNMP应运而生。使用SNMP,一个运行网管软件的工作站就能对成千上万的网络设备进行监控和信息采集,这些信息可以用来构建网络或者定位网络中的问题。
如其名字所述,这个协议简单易懂,部署的开销成本也小。正因为它足够简单,所以被广泛的接受,事实上它已经成为了主要的网络管理标准。在一个网络设备上实现SNMP的管理比绝大部分其他管理方式都简单直接。
1.msgVersion 指定SNMP的版本
2.msgID 指定SNMP消息唯一辨识符
3.msgMaxSize 指定交互SNMP实体所能接收的最大消息大小
4.msgFlags 指定消息的安全级别
5.msgSecurityModel 指定消息所使用的安全模式.SNMPv3为USM
6.msgAuthoritativeEngineID 此消息交互的SNMP实体的 SNMP EngineID
7.msgAuthoritativeEngineBoots 此消息交互的SNMP实体启动的次数
8.msgAuthoritativeEngineTime 此消息交互的SNMP实体自上次启动后所过去的时间
9.msgUserName 此消息交互的SNMP实体所使用的用户名
10.msgAuthoritaticationParameters 认证协议的参数
11.msgPrivacyParameters 加密协议的参数
12.contextEngineID 作为实现了某个具体管理功能上下文的唯一辨识符
13.contextName 用来标记一个上下文的名称
14.pdu SNMP实体间通信数据单元
管理模式:SNMP 对于管理组件和agent的实现一般可划分为如下三个层面:
●协议,定义SNMP的基本操作和管理组建与agent间消息交换的格式
●管理信息结构(Structure of Management Information (SMI)),定义SNMP该以何种形式访问管理对象的规则集合
●管理信息库(Management Information Base (MIB)),定义管理对象属性的集合
MIB和SMI使用一种叫做ASN.1(Abstract Syntax Notation One)的表示法来描述,这是一种以ASCII文本格式清晰描述数据的表示法。MIB的数据通过SNMP消息进行网络传输,传输前会通过简单编码规则( Basic Encoding Rules (BER))进行编码。
五、SNMP的基本操作
SNMP是一个请求-响应式的协议,它的基本操作可以分类如下:
●检索数据
●修改变量
●接收主动上报消息
检索数据:管理组件向agent发送请求以获取数据,有如下操作类型:
●GET:GET请求用以从agent上获取指定OID对应的一条或多条值。
●GETNEXT:与GET请求类似,最明显的区别是GETNEXT获取指定OID在系统树种所处位置的下一个OID。
●GETBULK:用于从agent上获取大表中的大量数据。
修改变量:管理组件有时会希望能够修改设备上的一些变量:
●SET:管理组件使用这个命令来修改设备的一些配置值。
接收主动上报消息:
●TRAP: 当agent遇到数据传输问题,或设备出现故障希望上层管理组件知晓时,使用TRAP操作上报此信息。
六、SNMP的版本
SNMP发展到目前,一共经历了三个主要版本,SNMPv1,SNMPv2c,SNMPv3。对于当今互联网迅猛发展的今天,信息安全已经是一个关乎产品命运的重要问题,曾经的SNMP由于缺乏足够的安全性而被人诟病甚至弃用,因此SNMPv3版本做了大量关于安全性的增强,这里我们也主要关注于SNMPv3版本的特性。
SNMPv3的主要目的如下:
1.校验收到的SNMP消息在网络传输过程中是否被篡改。
2.校验收到的SNMP消息其身份证明是否已经被创建。
3.检测收到的SNMP消息是否包含管理消息,是否是即时创建的。
4.保护每个收到的消息的内容不会被公开。
为实现上述目标,SNMP为系统提供了一个安全的管理环境,涉及以下内容:
●SNMP实体的身份证明以增强SNMP实体间的通信——每一个SNMP实体都会有一个叫SNMP EngineID的身份标识符,SNMP通信只能发生在已知身份的SNMP实体间(TRAP和Notification不受此规则限制。)
●支持安全模式——一个安全模式定义了管理域或内部网络中的安全策略,SNMP包含USM安全模式的实现。
●定义消息安全的校验服务规范:
○反信息篡改:保护校验通过的实体所生成的消息在传输过程中不会被未经校验的SNMP实体所修改。
○反伪装:防止SNMP实体通过伪装成其他实体的身份来越权执行某些操作。
○反消息流篡改:防止SNMP消息流被恶意重排序,推迟或重复从而施加未经校验的管理操作。
○反消息泄露:防止SNMP实体通信的信息被窃听。
●USM的规格定义——USM一般由如下几个通信机制组成:
○非认证不加密通信
○认证不加密通信
○认证加密通信
●定义不同的认证与加密协议——目前USM支持MD5和SHA认证协议,DES和AES加密协议。
●定义发现流程:可以通过通信地址发现SNMP实体的SNMP EngineID
●定义时间同步流程:增强远程SNMP实体间认证通信。
●定义SNMP 框架 MIB——增强对SNMP实体的管理和配置。
●定义USM的MIB——增强远程配置与管理的安全模式。
●定义VACM 的MIB——增强远程配置与管理的访问控制。
七、SNMP的实现工具
上面讲了很多关于SNMP原理的内容,了解完之后肯定是要具体使用,才有价值,这里介绍一个Linux上的SNMP实现工具。
1.安装net_snmp服务,这里我使用yum安装
2.检查安装情况
3.启动并检查SNMP的运行状态
4.验证SNMP服务
1)安装snmp管理工具:
2)执行SNMP命令查询系统主机名:
5.配置SNMP服务
出于安全考虑,我们创建SNMPv3的安全用户
1).停止SNMP服务,并增加SNMPv3用户,这里创建的用户默认是MD5认证和DES加密
2).将认证和加密协议分别修改为SHA和AES,提高安全性,然后启动SNMP服务
3).测试该用户的通信消息,成功获取。
4).一些其他功能
查看系统内存总量OID:.1.3.6.1.4.1.2021.4.5.0
查看当前可用内存OID:.1.3.6.1.4.1.2021.4.6.0
查看当前CPU负载OID:.1.3.6.1.4.1.2021.10.1.3.1
如果是远程查询,将localhost修改成目标主机的IP并指定SNMP的端口即可。
此外还有更多关于SNMP配置与开发,例如可以配置用户访问的内容,访问的权限,以及自定义MIB等,这里就不再一一赘述了,如果有兴趣可以去查阅相关资料进行研究。
转:IT技术博客大学习http://blogread.cn/it/article/7478?f=wb