简介
作为一名系统管理员,很大一部分工作就是收集有关您的服务器和基础设施的准确信息。有许多工具和选项可用于收集和处理此类信息。它们中的许多都是基于一种名为SNMP 的技术构建的。
简单网络管理协议是简单网络管理协议的缩写。它是服务器共享有关其当前状态的信息的一种方式,也是管理员修改预定义的值的通道。虽然协议本身非常简单,但实现SNMP的程序结构可能非常复杂。
在本指南中,我们将向您介绍SNMP协议的基础知识。我们将介绍其用途、该协议在网络中的典型使用方式、其协议版本之间的差异等等。
基本概念
简单网络管理协议是在网络堆栈的应用层上实施的协议(单击此处了解Networking layers).该协议是作为一种以一致的方式从非常不同的系统收集信息的方式创建的。虽然它可以用于各种不同的系统,但查询信息的方法和相关信息的路径是标准化的。
SNMP协议有多个版本,许多联网的硬件设备实现某种形式的SNMP访问。 最广泛使用的版本是SNMPv1,但它在许多方面都不安全。 它的受欢迎程度很大程度上源于它在野外的普遍性和长期性。 除非您有很强的理由不这样做,否则我们建议您使用SNMPv3,它提供了更高级的安全功能。
一般而言,由SNMP分析的网络将主要由包含SNMP代理 的设备组成。代理是一种程序,它可以收集有关硬件的信息,将其组织到预定义的条目中,并使用SNMP协议响应查询。
该模型中向代理查询信息的组件称为SNMP管理器 。这些机器通常拥有有关其网络中所有启用了SNMP的设备的数据,并且可以发出收集信息和设置某些属性的请求。
SNMPManager
简单网络管理协议管理器是一台配置为轮询简单网络管理协议代理获取信息的计算机。当仅讨论其核心功能时,管理组件实际上比客户端配置简单得多,因为管理组件只是请求数据。
管理器可以是任何可以使用正确凭据向SNMP代理发送查询请求的计算机。有时,这是作为监视套件的一部分实现的,而在其他时候,这是管理员使用一些简单的实用程序来编制快速请求的。
几乎所有在SNMP协议中定义的命令(我们稍后将详细介绍这些命令)都被设计为由管理器组件发送。其中包括GetRequest
、GetNextRequest
、GetBulkRequest
、SetRequest
、InformRequest
和Response
。除此之外,还设计了一个管理器来_响应_Trap
和Response
消息。
SNMPAgents
SNMP代理完成大部分工作。 它们负责收集有关本地系统的信息,并以可查询的格式存储它们。更新一个称为管理信息库
或 MIB 的数据库。
MIB是一种分层的预定义结构,用于存储可以查询或设置的信息。这可用于源自已使用正确凭据进行身份验证的主机(SNMP管理器)的格式良好的SNMP请求。
代理计算机配置哪些经理有权访问其信息。它还可以充当中介,以报告有关它可以连接到的未配置为支持SNMP流量的设备的信息。这在使您的组件在线和访问SNMP方面提供了很大的灵活性。
SNMP代理响应协议定义的大多数命令。 这些请求包括GetRequest
、GetNextRequest
、GetBulkRequest
、SetRequest
和InformRequest
。 此外,还设计了一个代理来发送Trap
消息。
了解管理信息库
SNMP系统中最难理解的部分可能是MIB ,即管理信息库。MIB是遵循管理器和代理遵守的标准的数据库。这是一种分层结构,在许多领域都是全球标准化的,但也足够灵活,允许特定于供应商的添加。
MIB结构最好理解为自上而下的层次结构树。每个分叉的分支都标有一个识别号(从1开始)和一个识别字符串,这对于该层次结构的该级别是唯一的。您可以互换使用字符串和数字。
要引用树的特定节点,必须跟踪从树的未命名根到相关节点的路径。它的父ID(数字或字符串)的谱系被串在一起,从最通用的开始,形成一个地址。层次结构中的每个交叉点由该符号中的一个点表示,因此地址最终是由点分隔的一系列ID字符串或数字。这个完整的地址称为对象标识符,或OID 。
在其设备中嵌入SNMP代理的硬件供应商有时会使用自己的字段和数据点实现自定义分支。但是,有一些标准的MIB分支定义良好,可供任何设备使用。
我们将讨论的标准分支都将位于相同的父分支结构下。此分支定义符合MIB-2规范的信息,MIB-2规范是兼容设备的修订标准。
此分支的基本路径为:
11.3.6.1.2.1
这也可以用如下字符串表示:
1iso.org.dod.internet.mgmt.mib-2
1.3.6.1
节或is.org.dod.interet
节是定义互联网资源的OID。我们基本路径中后面的2‘或
mgmt用于管理子类别。其下的
1‘或mib-2
定义了MIB-2规范。
这是一个熟悉MIB树的好资源。 这个特殊的页面代表了我们一直在谈论的连接点处的连接节点。 您可以通过分别检查superior
和subsidiary
引用来检查树中更上层和更下层的内容。
另一个类似的工具是思科提供的SNMP Object Navigator]。这可用于向下钻取层次结构以查找您需要的信息。类似的tree由SolarWinds提供。
基本上,如果我们想要查询我们的设备信息,大部分路径都会以1.3.6.1.2.1
开头。您可以浏览树形界面,了解哪些信息可供查询和设置。
简单网络管理协议命令
SNMP之所以被广泛采用,其中一个原因是可用的命令非常简单。需要实现或记住的操作很少,但它们足够灵活,可以满足协议的实用程序要求。
以下PDU或协议数据单元描述了协议允许的确切消息类型:
- GET :管理者向代理发送GET消息,请求获取特定OID的值。该请求将使用响应消息进行响应,该响应消息将与数据一起发送回管理器。
- GetNext :GetNext消息允许管理者请求MIB中的下一个顺序对象。通过这种方式,您可以遍历MIB的结构,而不必担心要查询哪些OID。
- SET :管理器向代理发送SET消息,以更改代理上的变量所持有的值。这可用于控制配置信息或以其他方式修改远程主机的状态。这是该协议定义的唯一写入操作。
- GetBulk :这个管理器对代理的请求就像发出了多个GetNext请求一样。对管理器的回复将包含数据包允许的尽可能多的数据(在请求设置的约束范围内)。
- 响应 :该消息由代理发送,用于将请求的任何信息返回给管理器。它既用作所请求数据的传输,也用作接收请求的确认。如果无法返回请求的数据,则响应包含错误字段,可以使用更多信息设置这些错误字段。对于上述任何请求,都必须返回响应消息以及通知消息。
- Trap :Trap消息一般由代理发送给管理器。陷阱是异步通知,因为它们是由接收它们的经理主动发出的。它们主要由代理用来通知经理其管理的设备上正在发生的事件。
- INFORM :为了确认收到陷阱,管理器向代理发回通知消息。如果代理未收到此消息,它可能会继续重新发送陷阱消息。
通过这七种数据单元类型,SNMP能够查询和发送有关网络设备的信息。
协议版本
自首次引入以来,SNMP协议经历了许多变化。最初的规范是1988年用RFC 1065、1066和1067制定的。由于它已经存在了这么长时间,这个版本仍然得到了广泛的支持。然而,该协议存在许多安全问题,包括以明文进行身份验证,因此强烈不鼓励使用该协议,尤其是在不受保护的网络上使用时。
该协议第2版的工作于1993年启动,并对早期标准进行了一些实质性改进。 这个版本中包含了一个新的基于参与方
的安全模型,旨在解决先前版本固有的安全问题。 然而,新模式并不很受欢迎,因为它难以理解和实施。
因此,创建了几个版本2的副产品
,每个版本都保留了版本2的大部分改进,但替换了安全模型。在SNMPv2c中,重新引入了基于社区的身份验证,这与v1中使用的模型相同。这是v2协议最流行的版本。另一种实现称为SNMPv2u,它使用基于用户的安全性,尽管这从来都不是很受欢迎。这允许按用户进行身份验证设置。
1998年,SNMP协议的第三个(也是当前的)版本作为规范提案进入市场。 从用户的角度来看,最相关的变化是采用了基于用户的安全系统。 它允许您将用户的身份验证要求设置为以下模型之一:
*NoAuthNoPriv :连接到该级别的用户没有身份验证,发送和接收的消息没有隐私。 *AuthNoPriv :使用此模型的连接必须进行身份验证,但消息发送时不进行任何加密。 *AuthPriv :需要认证,消息加密。
除了身份验证之外,还实施了访问控制机制,以提供对用户可以访问哪些分支的精细控制。版本3还能够利用SSH或TLS等传输协议提供的安全性。
总结
既然您已经很好地了解了该协议的运行方式,那么您就具备了在您自己的基础设施中实现SNMP所需的基础。
在Next guide,]中,我们将讨论如何安装和配置在您的系统上使用SNMP所需的组件。