介绍
作为系统管理员的很大一部分工作是收集有关您的服务器和基础架构的准确信息。 有许多工具和选项可用于收集和处理此类信息。 其中许多是建立在称为 SNMP 的技术之上的。
SNMP 代表简单网络管理协议。 这是服务器可以共享有关其当前状态的信息的一种方式,也是管理员可以修改预定义值的渠道。 虽然协议本身非常简单,但实现 SNMP 的程序结构可能非常复杂。
在本指南中,我们将向您介绍 SNMP 协议的基础知识。 我们将介绍它的用途、协议在网络中的典型使用方式、协议版本的差异等等。
基本概念
SNMP是在网络栈的应用层实现的协议(点击这里了解网络层)。 该协议是作为以一致的方式从非常不同的系统收集信息的一种方式而创建的。 虽然它可以用于各种系统,但查询信息的方法和相关信息的路径是标准化的。
SNMP 协议有多个版本,许多联网硬件设备实现某种形式的 SNMP 访问。 使用最广泛的版本是 SNMPv1,但它在许多方面都不安全。 它的流行很大程度上源于它在野外的普遍性和长期性。 除非您有充分的理由不这样做,否则我们建议您使用 SNMPv3,它提供了更高级的安全功能。
通常,由 SNMP 分析的网络主要由包含 SNMP agents 的设备组成。 代理是一个程序,它可以收集有关硬件的信息,将其组织成预定义的条目,并使用 SNMP 协议响应查询。
该模型中向代理查询信息的组件称为 SNMP manager。 这些机器通常具有有关其网络中所有启用 SNMP 的设备的数据,并且可以发出请求以收集信息和设置某些属性。
SNMP 管理器
SNMP 管理器是配置为轮询 SNMP 代理以获取信息的计算机。 管理组件,当只讨论其核心功能时,实际上比客户端配置要简单得多,因为管理组件只是请求数据。
管理器可以是任何可以使用正确凭据向 SNMP 代理发送查询请求的机器。 有时,这是作为监控套件的一部分实现的,而其他时候,这是管理员使用一些简单的实用程序来制作快速请求。
几乎所有在 SNMP 协议中定义的命令(我们稍后会详细讨论这些命令)都被设计为由管理器组件 发送 。 这些包括 GetRequest
、GetNextRequest
、GetBulkRequest
、SetRequest
、InformRequest
和 Response
。 除了这些,管理器还被设计为 响应 Trap
和 Response
消息。
SNMP 代理
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 规范的信息,该规范是兼容设备的修订标准。
此分支的基本路径是:
1.3.6.1.2.1
这也可以用字符串表示,例如:
iso.org.dod.internet.mgmt.mib-2
1.3.6.1
或 iso.org.dod.internet
部分是定义 Internet 资源的 OID。 我们基本路径中的 2
或 mgmt
用于管理子类别。 定义 MIB-2 规范的 1
或 mib-2
。
这是 让您熟悉 MIB 树 的绝佳资源。 这个特定的页面代表了我们一直在谈论的路口的连接节点。 您可以通过分别查看“上级”和“下级”引用来检查树的上下位置。
另一个类似的工具是 Cisco 提供的 SNMP Object Navigator。 这可用于深入了解层次结构以查找您需要的信息。 SolarWinds 提供了一个 相似树。
基本上,如果我们想查询我们的设备以获取信息,大多数路径将以 1.3.6.1.2.1
开头。 您可以浏览树状界面,了解可以查询和设置的信息类型。
SNMP 协议命令
SNMP 得到如此广泛采用的原因之一是可用命令的简单性。 实现或记住的操作很少,但它们足够灵活,可以满足协议的实用性要求。
以下 PDU 或协议数据单元描述了协议允许的确切消息类型:
- Get:管理器向代理发送 Get 消息以请求特定 OID 的值。 该请求通过响应消息得到答复,该响应消息与数据一起发送回管理器。
- GetNext:GetNext 消息允许管理器请求 MIB 中的下一个顺序对象。 这是一种您可以遍历 MIB 结构而无需担心要查询哪些 OID 的方法。
- Set:设置消息由管理器发送到代理,以更改代理上的变量持有的值。 这可用于控制配置信息或以其他方式修改远程主机的状态。 这是协议定义的唯一写操作。
- GetBulk:此管理器代理请求功能就像发出了多个 GetNext 请求一样。 在数据包允许的范围内,返回给管理器的回复将包含尽可能多的数据(在请求设置的约束内)。
- Response:此消息由代理发送,用于将任何请求的信息发送回管理器。 它既用作所请求数据的传输,也用作对收到请求的确认。 如果无法返回请求的数据,则响应包含可以设置更多信息的错误字段。 必须为上述任何请求以及通知消息返回响应消息。
- Trap:Trap消息一般由代理发送给管理器。 陷阱是异步通知,因为它们不是由接收它们的管理器请求的。 它们主要被代理用来通知管理人员在其受管设备上发生的事件。
- Inform:为确认收到陷阱,管理员将 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 所需的基础。
在 下一个指南 中,我们将讨论如何安装和配置在您的系统上利用 SNMP 所需的组件。