目录
SNMP的架构
SNMP的版本
SNMPv1/v2c
报文结构
操作类型
工作原理
SNMPv3
报文结构
SNMPv3体系结构
工作原理
用户组和用户名
SNMP的配置
基本配置
v2c配置
SNMPv3配置(USM用户)
SNMP的概述
SNMP(Simple Network Management Protocol,简单网络管理协议):
- SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。
- SNMP用来在网络管理系统NMS和被管理设备之间传输管理信息。
SNMP的操作:
- NMS通过SNMP协议给网络设备发送配置信息。
- NMS通过SNMP来查询和获取网络中的资源信息。
- 网络设备主动向NMS上报告警消息,使得网络管理员能够及时处理各种网络问题。
SNMP的架构
SNMP系统由以下部分组成:
- NMS(Network Management System,网络管理系统):
- NMS作为整个网络的网管中心,对设备进行管理。
- NMS是运行在网管主机/服务器上的网络管理软件。网络管理员通过操作NMS,向被管理设备发出请求,从而可以监控和配置网络设备。
- NMS可以向设备上的Agent发出请求,查询或修改一个或多个具体的参数值。
- NMS可以接收设备上的Agent主动发送的Trap信息,以获知被管理设备当前的状态。
- Agent(代理进程):
- Agent是被管理设备中的一个代理进程,用于维护被管理设备的信息数据并响应来自NMS的请求,把管理数据汇报给发送请求的NMS。
- Agent接收到NMS的请求信息后,通过修改MIB表完成相应指令后,并把操作结果响应给NMS。
- 当设备发生故障或者其它事件时,设备会通过Agent主动发送信息给NMS,向NMS报告设备当前的状态变化。
- MIB(Management Information Base,管理信息库):
- MIB是一个数据库,指明了被管理设备所维护的变量(即能够被Agent查询和设置的信息)。
- MIB在数据库中定义了被管理设备的一系列属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等。
- Agent通过查询MIB,可以获知设备当前的状态信息。
- Agent通过修改MIB,可以设置设备的状态参数。
- MO(Management object,管理对象):
- 每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件,也可以是在硬件、软件(如路由选择协议)上配置的参数集合。
- 每个OID(object identifier,对象标识符)对应于树中的一个管理对象,如system的OID为1.3.6.1.2.1.1,interfaces的OID为1.3.6.1.2.1.2。通过OID树,可以高效且方便地管理其中所存储的管理信息,同时也方便了对其中的信息进行批量查询。
SNMP的版本
- SNMPv1(实现方便,安全性弱。):网管端工作站上的NMS与被管理设备上的Agent之间,通过交互SNMPv1报文,可以实现网管端对被管理设备的管理。SNMPv1基本上没有什么安全性可言。
- SNMPv2c(有一定的安全性。 实际应用广泛):继承SNMPv1的基础上,其性能、安全性、机密性等方面都有了大的改进。
- SNMPv3(定义了一种管理框架,为用户提供了安全的访问机制):在SNMPv2基础之上增加、完善了安全和管理机制。SNMPv3体系结构体现了模块化的设计思想,使管理者可以方便灵活地实现功能的增加和修改。SNMPv3的主要特点在于适应性强,可适用于多种操作环境,它不仅可以管理最简单的网络,实现基本的管理功能,也可以提供强大的网络管理功能,满足复杂网络的管理需求。
SNMPv1/v2c
报文结构
操作类型
操作 | 描述 |
Get | Get操作可以从Agent中提取一个或多个参数值。 |
GetNext | GetNext操作可以从Agent中按照字典序提取下一个参数值。 |
Set | Set操作可以设置Agent的一个或多个参数值。 |
Response | Response操作可以返回一个或多个参数值。这个操作是由Agent发出的,它是GetRequest、GetNextRequest、SetRequest和GetBulkRequest四种操作的响应操作。Agent接收到来自NMS的Get/Set指令后,通过MIB完成相应的查询/修改操作,然后利用Response操作将信息回应给NMS。 |
Trap | Trap信息是Agent主动向NMS发出的信息,告知管理进程设备端出现的情况。 |
GetBulk | GetBulk操作实现了NMS对被管理设备的信息群查询。 |
Inform | InformRequest也是被管理设备向NMS主动发送告警。与Trap告警不同的是,被管理设备发送Inform告警后,需要NMS回复InformResponse来进行确认。 |
工作原理
基本操作
- Get操作 假定NMS想要获取被管理设备MIB节点sysContact的值,使用可读团体名为public,过程如下所示:
- NMS:向Agent发送Get请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为public;PDU中PDU类型为Get类型,绑定变量填入MIB节点名sysContact。
- Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,向NMS发送响应;如果查询不成功,Agent会向NMS发送出错响应。
- GetNext操作 假定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发送出错响应。
- Set操作 假定NMS想要设置被管理设备MIB节点sysName的值为HUAWEI,使用可写团体名为private,过程如下所示:
- NMS:向Agent发送Set请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为private;PDU中PDU类型为Set类型,绑定变量填入MIB节点名sysName和需要设置的值HUAWEI。
- Agent:首先对报文中携带版本号和团体名进行认证,认证成功后,Agent根据请求设置管理变量在管理信息库MIB中对应的节点,设置成功后向NMS发送响应;如果设置不成功,Agent会向NMS发送出错响应。
- Trap操作
Trap不属于NMS对被管理设备的基本操作,它是被管理设备的自发行为。当被管理设备达到告警的触发条件时,会通过Agent向NMS发送Trap消息,告知设备侧出现的异常情况,便于网络管理人员及时处理。例如被管理设备热启动后,Agent会向NMS发送warmStart的Trap。
这种Trap信息是受限制的。只有在设备端的模块达到模块预定义的告警触发条件时,Agent才会向管理进程报告。这种方法有其好处是仅在严重事件发生时才发送Trap信息,减少报文交互产生的流量。
- GetBulk操作
基于GetNext实现,相当于连续执行多次GetNext操作。在NMS上可以设置被管理设备在一次GetBulk报文交互时,执行GetNext操作的次数。 - Inform操作 Inform操作也是被管理设备向NMS主动发送告警。与trap告警不同的是,被管理设备发送Inform告警后,需要NMS进行接收确认。如果被管设备没有收到确认信息则:
- 将告警暂
SNMPv3
报文结构
字段 | 描述 |
版本 | 表示SNMP的版本,版本字段的值是报文版本号减1,如果是SNMPv3报文则对应字段值为3。 |
报头数据 | 主要包含消息发送者所能支持的最大消息尺寸、消息是否进行加密/认证、采用的安全模式等描述内容。 格式如下: +--------------------------------------------------+| Msg ID | Msg Max size | Msg Flag | Msg Sec Model |+--------------------------------------------------+
|
安全参数 | 包含用户名、密钥、加密参数等安全信息。 格式如下: +--------------------------------------------------------------------------+|Auth Engin ID|Auth EngBoots|Auth Engine Time|User Name|Auth Para|Priv Para|+--------------------------------------------------------------------------+
|
SNMPv3 PDU | 包含PDU类型、请求标识符、变量绑定列表等信息,可以为GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU、GetBulk PDU等几种类型。 格式如下: +-----------------------------------+|Context Eng ID | Context name| Data|+-----------------------------------+
|
SNMPv3体系结构
NMPv3提出了一个新的SNMP体系结构,这个体系结构为各种基于SNMP的NMS提供了一个通用的实现模型,即SNMPv3实体。SNMPv3实体可以分为SNMPv3引擎(SNMPv3 Engine)和SNMPv3应用程序(SNMPv3 Application),引擎与应用程序均由多个小模块组成。
SNMPv3由于采用了用户安全模块USM(User 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算法对明文进行加密
- VACM:对用户组或者团体名实现基于视图的访问控制。用户必须首先配置一个视图,并指明权限。用户可以在配置用户或者用户组或者团体名的时候,加载这个视图达到限制读写操作、Inform或Trap的目的。
工作原理
SNMPv3的实现原理和SNMPv1/SNMPv2c基本一致,唯一的区别是SNMPv3增加了身份验证和加密处理。下面以Get操作为例介绍下SNMPv3的工作原理。
- NMS:向Agent发送不带安全参数的Get请求报文,向Agent获取Context EgineID、Context Name和安全参数(SNMP实体引擎的相关信息)。
- Agent:响应NMS的请求,并向NMS反馈请求的参数。
- 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发送出错响应。
用户组和用户名
SNMPv3通过用户组和用户名与网管建立通信。
用户组和用户名的来源有以下两种方式:
- 采用SNMP自身的安全模块USM配置的用户组和用户名。
- 采用AAA配置的本地用户名组和用户名作为SNMPv3的用户组和用户名。
SNMP的配置
基本配置
sys
snmp-agent //使能SNMP Agent服务
snmp-agent sys-info version v1 &version v2c ///配置SNMP的协议版本为SNMPv1&version v2c
snmp-agent udp-port port-num //修改SNMP Agent与网管连接所使用的端口号。修改SNMP Agent与网管连接所使用的端口号以后,通过网管管理设备时,网管端指定的端口号必须与该端口号保持一致,否则无法连接设备。
snmp-agent password min-length min-length //配置SNMP密码的最小长度。配置了该命令后,用户配置SNMP团体名时,团体名长度必须大于等于配置的SNMP密码的最小长度。
snmp-agent community { read | write } { community-name | cipher community-name } [ mib-view view-name | acl { acl-number | acl-name } | alias alias-name ] *, ///配置设备的读写团体名。
snmp-agent community complexity-check disable ///关闭团体名密码复杂度检查功能。
info-center enable ///设备发送告警前,需要信息中心使能。
snmp-agent target-host [ host-name host-name ] trap address udp-domain ip-address [ udp-port port-number | source interface-type interface-number | { vpn-instance vpn-instance-name | public-net } ] * params securityname { security-name | cipher security-name } [ v1 & v2c | private-netmanager | ext-vb | notify-filter-profile profile-name | heart-beat enable ] * //配置SNMP代理主机地址
SNMP代理 目标主机[ 主机名 host-name ] 告警 地址 UPP域 ip-address [ udp端口 port-number | 源 接口类型 interface-number | { VPN实例 vpn-instance-name | public-net } ] * 安全名参数 { security-name | 明文 security-name } [ v1 | 专用网络管理器 | ext-vb | 信息-过滤器-模板 模板名-name | 心跳 enable ] *
snmp-agent target-host [ host-name host-name ] trap ipv6 address udp-domain ipv6-address [ udp-port port-number | [ vpn-instance vpn-instance-name | public-net ] ] * params securityname { security-name | cipher security-name } [ v1& v2c | private-netmanager | ext-vb | notify-filter-profile profile-name ] *
- 目的UDP端口号缺省是162,如果有特殊需求(比如避免知名端口号被攻击),可以配置udp-port将UDP端口号更改为非知名端口号,保证网管和被管理设备的正常通信。
- securityname用来在网管上标识和区别发送告警的源设备,方便用户识别告警的发送方。
snmp-agent protocol source-interface interface-type interface-number //指定SNMP接收和响应网管请求报文的源接口配置。
snmp-agent protocol source-status all-interface,开启SNMP协议使用所有接口接收和响应网管的请求功能。
snmp-agent protocol ipv6 source-ip ip-address,指定SNMP协议接收和响应网管请求报文的IPv6类型源地址配置。
snmp-agent protocol source-status ipv6 all-interface,开启SNMP协议使用所有IPv6接口接收和响应网管的请求功能。
snmp-agent protocol [ ipv6 ] { vpn-instance vpn-instance-name | public-net },配置SNMP从VPN或者公网接收和响应网管请求报文。缺省情况下,SNMP从全局VPN和公网接收和响应网管请求报文。
snmp-agent protocol server [ ipv4 | ipv6 ] disable,关闭SNMP IPv4或IPv6的侦听端口。
snmp-agent sys-info { contact contact | location location },配置设备管理员的联系方式和位置。
缺省情况下,系统维护联系信息为“R&D Beijing, Huawei Technologies co.,Ltd. ”,物理位置信息为“Beijing China”。当网管管理多个设备时,为了方便网管管理员记录设备管理员的联系方式和位置,在设备异常时快速联系设备管理员进行故障排除和定位,可配置该命令。
IPv4网络
- 执行命令snmp-agent proxy protocol source-interface { protocol-interface-type protocol-interface-number | protocol-interface-name },指定SNMP代理协议接收和响应CCU报文的源接口配置。
- 执行命令snmp-agent proxy protocol source-status all-interface,开启SNMP代理协议接收和响应任意CCU IPv4报文功能。
IPv6网络
- 执行命令snmp-agent proxy protocol ipv6 source-ip ip-address [ vpn-instance vpn-instance-name ],指定SNMP代理协议接收和响应CCU报文的IPv6源地址。
- 执行命令snmp-agent proxy protocol source-status ipv6 all-interface,开启SNMP代理协议接收和响应任意CCU IPv6报文功能。
(可选)限制网管对设备的管理权限
snmp-agent acl { acl-number | acl-name },配置SNMP的访问控制。
snmp-agent mib-view { excluded | included } view-name oid-tree,创建MIB视图并限定网管监控和管理的MIB节点。
snmp-agent community { read | write } { community-name | cipher community-name } [ mib-view view-name | acl { acl-number | acl-name } ] *,限制网管对设备的访问权限。
缺省情况下,创建的团体名拥有视图Viewdefault的权限。希望网管在指定视图下具有只读权限时(比如级别比较低的管理员),使用read参数。希望网管在指定视图下具有读写权限时(比如级别比较高的管理员),使用write参数。
(可选)配置向网管发送告警
snmp-agent trap enable 一次性打开所有模块的告警开关
snmp-agent trap enable feature-name ifnet [ trap-name { linkdown | linkup } ],使能全局下接口状态告警开关。
缺省情况下,全局下的接口状态告警功能处于关闭状态。在全局下打开linkdown和linkup的告警开关后,接口状态一旦发生变化就会产生相应状态的告警。特别的,当接口处于振荡状态时将频繁向网管发送告警,会显著增加网管设备的处理负担,此时可关闭指定接口的告警开关。
interface interface-type interface-number,进入接口视图。
undo enable snmp trap updown,关闭接口状态告警功能的开关。
snmp-agent trap source interface-type interface-number,指定发送Trap报文的源端接口
缺省情况下,未指定发送Trap的源接口。指定源接口后,将以源接口IP地址作为发送的Trap报文的源IP地址,便于网管对告警源进行识别。发送Trap的源接口必须是已经配置了IP地址的接口,否则命令无法生效。为了保证设备的安全性,发送的源地址最好配置为本地的loopback地址。
交换机端配置的Trap报文的源接口和NMS配置的交换机发送报文的接口需要一致,否则NMS无法接收交换机发送的Trap报文。
snmp-agent trap source-port port-number,指定发送Trap报文的源端口号。
v2c配置
(可选)配置向网管发送告警
snmp-agent inform { timeout seconds | resend-times times | pending number } *,配置全局的Inform方式的相关参数,包括:确认告警的超时时间、重复发送告警的次数和待确认告警的最大条数。
snmp-agent notification-log enable,使能告警日志功能。
当链路恢复正常,路由变为可达后,目标主机将同步被管理设备在链路故障期间记录的告警日志。
使能告警日志功能后,系统只记录Inform方式的告警,不记录Trap方式的告警。
snmp-agent notification-log { global-ageout ageout | global-limit limit } * ,配置告警日志的老化时间和日志缓冲区中最多能保存的告警日志条数。
SNMPv3配置(USM用户)
snmp-agent sys-info version v3,配置SNMP的协议版本。
snmp-agent local-engineid engineid,配置本地SNMP实体的引擎ID。
设备采用内部算法自动生成一个设备引擎ID,包含公司的“企业号+设备信息”。
若改变本地引擎ID,则已存在的SNMPv3用户将被删除。
snmp-agent group v3 group-name { authentication | privacy | noauthentication } ,配置SNMPv3用户组。
当网管和设备处在不安全的网络环境中时,比如容易遭受攻击等,建议用户配置参数authentication或privacy,使能数据的认证或加密功能。安全级别按照安全性从高到低为:
- privacy:鉴权且加密
- authentication:只鉴权
- None:不鉴权不加密
即如果用户组是privacy级别,用户和告警主机就必须是privacy级别;用户组是authentication级别,用户和告警主机可以是privacy或者authentication级别。
snmp-agent [ remote-engineid engineid ] usm-userv3 user-name group-name [ authentication-mode { md5 | sha | sha2_224 | sha2_256 | sha2_384 | sha2_512 } password [ privacy-mode { 3des168 | aes128 | aes192 | aes256 | des56 } password ] ] [ acl { acl-number | acl-name } ],配置SNMPv3用户信息。若改变本地引擎ID,则已存在的SNMPv3用户将被删除。
snmp-agent target-host [ host-name host-name ] trap address udp-domain ip-address [ udp-port port-number | source interface-type interface-number | { vpn-instance vpn-instance-name | public-net } ] * params securityname security-name [ v3 [ authentication | privacy ] | private-netmanager | ext-vb | notify-filter-profile profile-name | heart-beat enable ] * 配置Trap方式告警或Inform方式告警:
如果是IPv6网络,请执行以下命令配置设备发送告警和错误码的目的主机:
snmp-agent target-host [ host-name host-name ] trap ipv6 address udp-domain ipv6-address [ udp-port port-number | [ vpn-instance vpn-instance-name | public-net ] ] * params securityname security-name [ v3 [ authentication | privacy ] | private-netmanager | ext-vb | notify-filter-profile profile-name ] *
(可选)限制网管对设备的管理权限
snmp-agent group v3 group-name { authentication | privacy | noauthentication } [ read-view read-view | write-view write-view | notify-view notify-view ] * [ acl { acl-number | acl-name } ],配置用户组的读写权限。
缺省情况下,创建SNMP组的只读视图为ViewDefault且未指定该组的读写视图名和通知视图名。
如果要求网管收到notify-view中指定的trap消息或者inform消息,请先配置告警目的主机。
snmp-agent usm-user v3 user-name [ group group-name | acl { acl-number | acl-name } ] *,配置SNMPv3用户。如果需要允许指定的网管使用该用户名访问Agent,则需要配置acl参数。
(可选)配置向网管发送告警
Inform告警参数配置:
snmp-agent inform { timeout seconds | resend-times times | pending number } *,配置全局的Inform方式的相关参数,包括:确认告警的超时时间、重复发送告警的次数和待确认告警的最大条数。
snmp-agent inform { timeout seconds | resend-times times } * [ host-name host-name | address udp-domain ip-address [ vpn-instance vpn-instance-name ] params securityname { security-name | cipher security-name } ],配置指定目标主机的告警确认超时时间和告警重复发送的次数。
undo snmp-agent blacklist user-block disable,使能SNMPv3用户黑名单功能。
SNMPv3配置(AAA用户)
sys
aaa
local-user user-name password [ irreversible-cipher irreversible-cipher-password ],创建一个本地用户并配置该用户的登录口令。
local-user user-name service-type snmp,设置本地用户的接入类型为SNMP。
local-user user-name level level,配置本地用户的优先级。
snmp-agent acl { acl-number | acl-name },配置SNMP的访问控制。
snmp-agent sys-info version v3,配置SNMP的协议版本。
undo snmp-agent local-user password complexity-check disable,使能本地用户认证和加密密码的复杂度检查功能。
snmp-agent local-user v3 user-name { authentication-mode { md5 | sha | sha2_224 | sha2_256 | sha2_384 | sha2_512 } privacy-mode { 3des168 | aes128 | aes192 | aes256 | des56 } | authentication-mode { md5 | sha | sha2_224 | sha2_256 | sha2_384 | sha2_512 } cipher password privacy-mode { 3des168 | aes128 | aes192 | aes256 | des56 } cipher password },配置SNMPv3本地用户信息。
- SNMPv3使用AAA本地用户后,可以配置与AAA本地用户不同的认证和加密密码。删除AAA本地用户会导致SNMPv3本地用户被同步删除,然而删除SNMPv3本地用户对AAA本地用户无影响。
- 当SNMPv3本地用户和SNMPv3 USM用户的用户名相同,配置的认证或加密密码不同时,将采用SNMPv3 USM用户的认证和加密密码登录。