原理

简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema),和一组资料物件。该协议能够支持网络管理统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering Task Force)定义的internet协议簇的一部分。

SNMP基本元件和架构 请参考本词条结尾的扩展阅读条目“简单网络管理协议(SNMP)基本元件和架构”。

SNMP工作过程 在典型的SNMP用法中,有许多系统被管理,而且是有一或多个系统在管理它们。每一个被管理的系统上又运行一个叫做代理者(agent)的软件元件,且透过SNMP对管理系统报告资讯。

基本上,SNMP代理者以变量呈现管理资料。管理系统透过GET,GETNEXT和GETBULK协定指令取回资讯,或是代理者在没有被询问的情况下,使用TRAP或INFORM传送资料。管理系统也可以传送配置更新或控制的请求,透过SET协定指令达到主动管理系统的目的。配置和控制指令只有当网络基本结构需要改变的时候使用,而监控指令则通常是常态性的工作。

可透过SNMP存取的变量以阶层的方式结合。这些分层和其他元数据(例如变量的类型和描述)以管理信息库(MIBs)的方式描述。

SNMP信息 MIB,Management Information Base:管理信息库,由网络管理协议访问的管理对象数据库,它包括SNMP可以通过网络设备的SNMP管理代理进行设置的变量。SMI,Structure of Management Information:管理信息结构,用于定义通过网络管理协议可访问的对象的规则。SMI定义在MIB中使用的数据类型及网络资源在MIB中的名称或表示。

使用SNMP进行网络管理需要下面几个重要部分:管理基站,管理代理,管理信息库和网络管理工具。管理基站通常是一个独立的设备,它用作网络管理者进行网络管理的用户接口。基站上必须装备有管理软件,管理员可以使用的用户接口和从MIB取得信息的数据库,同时为了进行网络管理它应该具备将管理命令发出基站的能力。

管理代理是一种网络设备,如主机,网桥,路由器和集线器等,这些设备都必须能够接收管理基站发来的信息,它们的状态也必须可以由管理基站监视。管理代理响应基站的请求进行相应的操作,也可以在没有请求的情况下向基站发送信息。

MIB是对象的集合,它代表网络中可以管理的资源和设备。每个对象基本上是一个数据变量,它代表被管理的对象的一方面的信息。

最后一个方面是管理协议,也就是SNMP,SNMP的基本功能是:取得,设置和接收代理发送的意外信息。取得指的是基站发送请求,代理根据这个请求回送相应的数据,设置是基站设置管理对象(也就是代理)的值,接收代理发送的意外信息是指代理可以在基站未请求的状态下向基站报告发生的意外情况。

SNMP为应用层协议,是TCP/IP协议族的一部分。它通过用户数据报协议(UDP)来操作。在分立的管理站中,管理者进程对位于管理站中心的MIB的访问进行控制,并提供网络管理员接口。管理者进程通过SNMP完成网络管理。SNMP在UDP、IP及有关的特殊网络协议(如,Ethernet, FDDI, X.25)之上实现。

编辑本段SNMP风险 接入Internet的网络面临许多风险,Web服务器可能面临***,邮件服务器的安全也令人担忧。但除此之外,网络上可能还存在一些隐性的漏洞。大多数网络总有一些设备运行着SNMP服务,许多时候这些SNMP服务是不必要的,但却没有引起网络管理员的重视。

根据SANS协会的报告,对于接入Internet的主机,SNMP是威胁安全的十大首要因素之一;同时,SNMP还是Internet主机上最常见的服务之一。特别地,SNMP服务通常在位于网络边缘的设备(防火墙保护圈之外的设备)上运行,进一步加剧了SNMP带来的风险。这一切听起来出人意料,但其实事情不应该是这样的。

背景知识

SNMP开发于九十年代早期,其目的是简化大型网络中设备的管理和数据的获取。许多与网络有关的软件包,如HP的Open View和Nortel Networks的Optivity Network Management System,还有Multi Router Traffic Grapher(MRTG)之类的免费软件,都用SNMP服务来简化网络的管理和维护。

由于SNMP的效果实在太好了,所以网络硬件厂商开始把SNMP加入到它们制造的每一台设备。今天,各种网络设备上都可以看到默认启用的SNMP服务,从交换机到路由器,从防火墙到网络打印机,无一例外。

仅仅是分布广泛还不足以造成威胁,问题是许多厂商安装的SNMP都采用了默认的通信字符串(例如密码),这些通信字符串是程序获取设备信息和修改配置必不可少的。采用默认通信字符串的好处是网络上的软件可以直接访问设备,无需经过复杂的配置。

通信字符串主要包含两类命令:GET命令,SET命令。GET命令从设备读取数据,这些数据通常是操作参数,例如连接状态、接口名称等。SET命令允许设置设备的某些参数,这类功能一般有限制,例如关闭某个网络接口、修改路由器参数等功能。但很显然,GET、SET命令都可能被用于拒绝服务***(DoS)和恶意修改网络参数。

最常见的默认通信字符串是public(读/写)和private(只读),除此之外还有许多厂商私有的默认通信字符串。几乎所有运行SNMP的网络设备上,都可以找到某种形式的默认通信字符串。

SNMP2.0和SNMP1.0的安全机制比较脆弱,通信不加密,所有通信字符串和数据都以明文形式发送。***者一旦捕获了网络通信,就可以利用各种嗅探工具直接获取通信字符串,即使用户改变了通信字符串的默认值也无济于事。

近几年才出现的SNMP3.0解决了一部分问题。为保护通信字符串,SNMP3.0使用DES(DataEncryptionStandard)算法加密数据通信;另外,SNMP3.0还能够用MD5和SHA(SecureHashAlgorithm)技术验证节点的标识符,从而防止***者冒充管理节点的身份操作网络。

虽然SNMP3.0出现已经有一段时间了,但目前还没有广泛应用。如果设备是2、3年前的产品,很可能根本不支持SNMP3.0;甚至有些较新的设备也只有SNMP2.0或SNMP1.0。

即使设备已经支持SNMP3.0,许多厂商使用的还是标准的通信字符串,这些字符串对***组织来说根本不是秘密。因此,虽然SNMP3.0比以前的版本提供了更多的安全特性,如果配置不当,其实际效果仍旧有限。

禁用SNMP

要避免SNMP服务带来的安全风险,最彻底的办法是禁用SNMP。如果你没有用SNMP来管理网络,那就没有必要运行它;如果你不清楚是否有必要运行SNMP,很可能实际上不需要。即使你打算以后使用SNMP,只要现在没有用,也应该先禁用SNMP,直到确实需要使用SNMP时才启用它。

SNMP数据 简单网络管理协议(SNMP)是目前TCP/IP网络中应用最为广泛的网络管理协议。1990年5月,RFC1157定义了SNMP(simplenetworkmanagementprotocol)的第一个版本SNMPv1。RFC1157和另一个关于管理信息的文件RFC1155一起,提供了一种监控和管理计算机网络的系统方法。因此,SNMP得到了广泛应用,并成为网络管理的事实上的标准。

SNMP在90年代初得到了迅猛发展,同时也暴露出了明显的不足,如,难以实现大量的数据传输,缺少身份验证(Authentication)和加密(Privacy)机制。因此,1993年发布了SNMPv2,具有以下特点:

?支持分布式网络管理

?扩展了数据类型

?可以实现大量数据的同时传输,提高了效率和性能

?丰富了故障处理能力

?增加了集合处理功能

?加强了数据定义语言

编辑本段

管理信息库 管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。图3画的是管理信息库的一部分,它又称为对象命名(objectnamingtree)。

对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。在ISO的下面有4个结点,其中的一个(标号3)是被标识的组织。在其下面有一个美国国防部(DepartmentofDefense)的子树(标号是6),再下面就是Internet(标号是1)。在只讨论Internet中的对象时,可只画出Internet以下的子树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}即可。

在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB-II,故结点名现改为mib-2,其标识为{1.3.6.1.2.1},或{Internet(1).2.1}。这种标识为对象标识符。

最初的结点mib将其所管理的信息分为8个类别,见表4。现在demib-2所包含的信息类别已超过40个。

应当指出,MIB的定义与具体的网络管理协议无关,这对于厂商和用户都有利。厂商可以在产品(如路由器)中包含SNMP代理软件,并保证在定义新的MIB项目后该软件仍遵守标准。用户可以使用同一网络管理客户软件来管理具有不同版本的MIB的多个路由器。当然,一个没有新的MIB项目的路由器不能提供这些项目的信息。

这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为11.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。

 

案例一:

案例要求:

如图所示,两台路由器R5 、R13,一台工作站,一台服务器安装有Web 和ftp 服务。现要求在两台路由器和服务器上配置snmp代理服务,使用工作站来管理三台设备,并在三台设备故障时自动向工作站发送信息。

拓扑图:

clip_p_w_picpath002

配置步骤:

R5 路由器配置:

[R5]snmp-agent ##启动SNMP Agent服务

[R5]snmp-agent sys-info contact R5 ##设置系统联系人信息

[R5]snmp-agent sys-info version all ##设置snmp协议版本

[R5]snmp-agent community read public ##设置只读团体名public

[R5]snmp-agent community write private ##设置可读写的团体名

[R5]snmp-agent trap enable ##允许发送设备Trap信息

[R5]snmp-agent target-host trap address 192.168.1.100 securityname public ##设置发送trap信息的目标主机

[R5]interface ethernet 0

[R5-Ethernet0]ip address 192.168.3.1 24 ##设置与Web服务器相连的接口ip 地址

[R5-Ethernet0]interface serial 0 ##设置与R13路由器相连的接口ip 地址

[R5-Serial0]ip address 192.168.2.2 24

[R5]ip route-static 192.168.1.0 24 192.168.2.1 ##配置静态路由,到达1.0网络下一跳为2.1

R13 路由器配置:

[R13]snmp-agent ##启动SNMP Agent服务

[R13]snmp-agent sys-info contact R13 ##设置系统联系人信息

[R13]snmp-agent sys-info version all ##设置snmp协议版本

[R13]snmp-agent community read public ##设置只读团体名public

[R13]snmp-agent community write private ##设置可读写的团体名

[R13]snmp-agent trap enable ##允许发送设备Trap信息

[R13]snmp-agent target-host trap address 192.168.1.100 securityname public ##设置发送trap信息的目标主机

[R13]interface ethernet 0 ##设置与工作站相连的接口ip 地址

[R13-Ethernet0]ip address 192.168.1.1 24

[R13]interface serial 0 ##设置与R5路由器相连的接口ip 地址

[R13-Serial0]ip address 192.168.2.1 24

[R13]ip route-static 192.168.3.0 24 192.168.2.2 ##配置静态路由,到达3.0网络下一跳为2.2

安装snmp服务

在Windows server 2008 上配置snmp服 务

clip_p_w_picpath004

在Windows server 2008安装Web 服务

clip_p_w_picpath006

安装ftp发布服务

clip_p_w_picpath008

打开计算机管理,找到“服务和应用程序” ,“服务”在右侧找到 “SNMP Service ”,傻un国际该服务,进入配置界面

p_w_picpath

p_w_picpath

打开“陷阱”选项卡,设置当该服务器故障时,向哪些主机发送报告信息

p_w_picpath

打开“安全”选项卡,添加接受的社区名称,设置允许接受哪些主机的snmp报文

p_w_picpath

安装whatsup,打开whatsup

clip_p_w_picpath009

clip_p_w_picpath010

clip_p_w_picpath011

clip_p_w_picpath012

扫描结果:

clip_p_w_picpath013