Skip to main content

4. MIB模块的结构 (The Structure of the MIB Modules)

本文档中描述了三个独立的MIB模块:

  1. SNMP-TARGET-MIB: 管理目标MIB
  2. SNMP-NOTIFICATION-MIB: 通知MIB
  3. SNMP-PROXY-MIB: 代理MIB

这些MIB被特定类型的应用使用的情况将在本文档后面描述:

  • 通知发起者应用中管理目标MIB和通知MIB的使用在第5节中描述。
  • 通知发起者应用中用于过滤通知的通知MIB的使用在第6节中描述。
  • 代理转发应用中管理目标MIB和代理MIB的使用在第7节中描述。

4.1. 管理目标MIB模块 (The Management Target MIB Module)

SNMP-TARGET-MIB模块包含用于定义管理目标的对象。它由两个表和符合性/合规性声明组成。

4.1.1. 结构概述 (Structure Overview)

SNMP-TARGET-MIB提供:

  • snmpTargetAddrTable: 包含有关传输域和地址的信息。它包括snmpTargetAddrTagList,它提供了一种分组条目的机制。

  • snmpTargetParamsTable: 包含有关向特定传输域和地址发送消息时要使用的SNMP版本和安全信息的信息。

管理目标MIB旨在提供一种通用机制,用于指定传输地址和指定SNMP实体生成的SNMP消息的参数。本文档中将其用于生成通知和代理转发。但是,它也可以用于其他目的。

4.1.2. 标签列表 (Tag Lists)

snmpTargetAddrTagList对象用于对snmpTargetAddrTable中的条目进行分组。此对象的值包含一个标签值列表,这些标签值用于选择要用于特定操作的目标地址。

标签值是一个任意的八位字节字符串,但不能包含分隔符字符。分隔符字符定义为以下字符之一:

  • ASCII空格字符 (0x20)
  • ASCII制表符 (0x09)
  • ASCII回车(CR)字符 (0x0D)
  • ASCII换行(LF)字符 (0x0A)

分隔符字符用于分隔标签列表中的标签值。此类型的对象可以包含:

  • 表示空列表的零长度八位字节字符串,或
  • 单个标签值(不允许分隔符字符),或
  • 由单个分隔符字符分隔的标签值列表

对于标签值列表,这些约束意味着:

  • 不能有前导或尾随分隔符字符
  • 不能有多个相邻的分隔符字符

4.1.3. SNMP-TARGET-MIB中的关键对象 (Key Objects in SNMP-TARGET-MIB)

snmpTargetSpinLock

此对象用于促进多个管理器修改SNMP-TARGET-MIB模块中的表条目,特别是在修改snmpTargetAddrTagList对象时。

snmpTargetAddrTable

用于生成SNMP消息的传输地址表。每个条目包含:

  • snmpTargetAddrName: 此条目的本地唯一标识符
  • snmpTargetAddrTDomain: 传输类型(例如,snmpUDPDomain)
  • snmpTargetAddrTAddress: 传输地址
  • snmpTargetAddrTimeout: 预期的最大往返时间
  • snmpTargetAddrRetryCount: 未传递消息的重试次数
  • snmpTargetAddrTagList: 用于分组条目的标签值列表
  • snmpTargetAddrParams: 对snmpTargetParamsTable条目的引用
  • snmpTargetAddrStorageType: 此条目的存储类型
  • snmpTargetAddrRowStatus: 用于创建/删除条目的行状态

snmpTargetParamsTable

包含向特定目标生成SNMP消息时要使用的SNMP参数。每个条目包含:

  • snmpTargetParamsName: 本地唯一标识符
  • snmpTargetParamsMPModel: 消息处理模型 (0=SNMPv1, 1=SNMPv2c, 3=SNMPv3)
  • snmpTargetParamsSecurityModel: 安全模型 (1=SNMPv1, 2=SNMPv2c, 3=USM)
  • snmpTargetParamsSecurityName: 安全名称(团体名或用户名)
  • snmpTargetParamsSecurityLevel: 安全级别 (noAuthNoPriv, authNoPriv, authPriv)
  • snmpTargetParamsStorageType: 此条目的存储类型
  • snmpTargetParamsRowStatus: 用于创建/删除条目的行状态

4.2. 通知MIB模块 (The Notification MIB Module)

SNMP-NOTIFICATION-MIB模块包含用于配置通知生成的对象。它包含三个表。

4.2.1. 结构概述 (Structure Overview)

SNMP-NOTIFICATION-MIB提供:

  • snmpNotifyTable: 根据标签值选择应接收通知的管理目标。
  • snmpNotifyFilterProfileTable: 将过滤器配置文件与目标参数名称关联。
  • snmpNotifyFilterTable: 定义用于选择性通知传递的过滤规则。

4.2.2. SNMP-NOTIFICATION-MIB中的关键对象 (Key Objects in SNMP-NOTIFICATION-MIB)

snmpNotifyTable

选择应接收通知的管理目标,以及要生成的通知类型(陷阱或通知)。每个条目包含:

  • snmpNotifyName: 本地唯一标识符
  • snmpNotifyTag: 与snmpTargetAddrTagList匹配的标签值
  • snmpNotifyType: trap(1)或inform(2)
  • snmpNotifyStorageType: 此条目的存储类型
  • snmpNotifyRowStatus: 用于创建/删除条目的行状态

snmpNotifyFilterProfileTable

将过滤器配置文件名称与目标参数名称关联。每个条目包含:

  • snmpTargetParamsName: 索引,引用snmpTargetParamsTable
  • snmpNotifyFilterProfileName: 过滤器配置文件的名称
  • snmpNotifyFilterProfileStorType: 存储类型
  • snmpNotifyFilterProfileRowStatus: 行状态

snmpNotifyFilterTable

定义用于确定应将哪些通知发送到哪些管理目标的过滤规则。每个条目包含:

  • snmpNotifyFilterProfileName: 索引,引用过滤器配置文件
  • snmpNotifyFilterSubtree: 索引,子树的对象标识符
  • snmpNotifyFilterMask: 用于OID匹配的位掩码
  • snmpNotifyFilterType: included(1)或excluded(2)
  • snmpNotifyFilterStorageType: 存储类型
  • snmpNotifyFilterRowStatus: 行状态

4.3. 代理MIB模块 (The Proxy MIB Module)

SNMP-PROXY-MIB模块包含用于定义代理转发器应用使用的转换的对象。它由单个表组成。

4.3.1. 结构概述 (Structure Overview)

SNMP-PROXY-MIB提供:

  • snmpProxyTable: 定义SNMP消息代理转发的转换规则。

4.3.2. SNMP-PROXY-MIB中的关键对象 (Key Objects in SNMP-PROXY-MIB)

snmpProxyTable

定义代理转发器使用的转换参数。每个条目包含:

  • snmpProxyName: 本地唯一标识符
  • snmpProxyType: 代理操作的类型:
    • read(1): 转发读类PDU
    • write(2): 转发写类PDU
    • trap(3): 转发陷阱通知
    • inform(4): 转发通知请求
  • snmpProxyContextEngineID: 要匹配的传入上下文引擎ID
  • snmpProxyContextName: 要匹配的传入上下文名称
  • snmpProxyTargetParamsIn: 对传入消息参数的snmpTargetParamsTable的引用
  • snmpProxySingleTargetOut: 对于单个目标转发,指定目标地址名称
  • snmpProxyMultipleTargetOut: 对于多个目标转发,指定标签值
  • snmpProxyStorageType: 此条目的存储类型
  • snmpProxyRowStatus: 用于创建/删除条目的行状态

4.4. 符合性和合规性 (Conformance and Compliance)

每个MIB模块包括:

  • 对象组(Object Groups): 相关对象的逻辑分组
  • 合规性声明(Compliance Statements): 定义必须实现哪些对象才能符合要求
  • 模块合规性(Module Compliance): 指定最低实现要求

SNMP-TARGET-MIB合规性

实现必须支持:

  • snmpTargetBasicGroup: 基本目标地址和参数对象
  • snmpTargetResponseGroup: 用于响应/重试处理的对象(用于命令生成器和通知发起者)

SNMP-NOTIFICATION-MIB合规性

实现必须支持:

  • snmpNotifyGroup: 基本通知选择对象
  • snmpNotifyFilterGroup: 通知过滤对象(可选但推荐)

SNMP-PROXY-MIB合规性

实现必须支持:

  • snmpProxyGroup: 所有代理转换对象

4.5. 使用模式 (Usage Patterns)

模式1: 简单通知配置 (Simple Notification Configuration)

要向管理站发送陷阱通知:

  1. 在snmpTargetAddrTable中创建一个条目,指定管理站的地址
  2. 在snmpTargetParamsTable中创建一个条目,指定SNMP版本和安全参数
  3. 在snmpNotifyTable中创建一个条目,其标签与snmpTargetAddrTagList匹配

模式2: 过滤通知 (Filtered Notifications)

要仅向管理站发送特定通知:

  1. 配置模式1(简单通知配置)
  2. 在snmpNotifyFilterProfileTable中创建一个条目,将过滤器配置文件与目标参数关联
  3. 在snmpNotifyFilterTable中创建条目,定义要包含/排除的OID子树

模式3: 代理转发 (Proxy Forwarding)

要通过代理转发请求:

  1. 在snmpTargetAddrTable和snmpTargetParamsTable中为目标SNMP引擎创建条目
  2. 在snmpProxyTable中创建一个条目,指定:
    • 要匹配的传入上下文和安全参数
    • 传出目标地址(通过snmpProxySingleTargetOut)
    • 代理类型(read、write、trap或inform)

4.6. 安全和访问控制 (Security and Access Control)

本文档中定义的MIB模块包含具有read-write和/或read-create的MAX-ACCESS的对象。设置这些对象可以:

  • 将SNMP流量重定向到未经授权的目标
  • 修改安全参数,可能削弱安全性
  • 更改过滤规则,可能泄露敏感信息

建议:

  1. 使用RFC 3415中定义的VACM(基于视图的访问控制模型)限制对这些MIB对象的访问
  2. 只有授权的安全管理员才能对这些对象进行写访问
  3. 在修改这些对象时使用带身份验证和加密(authPriv)的SNMPv3
  4. 记录对这些对象的更改以用于审计目的

4.7. 实现说明 (Implementation Notes)

存储类型 (Storage Types)

每个表中的*StorageType对象允许实现控制配置的持久性:

  • volatile: 重启时丢失配置(默认)
  • nonVolatile: 配置在重启后保持
  • permanent: 配置无法删除
  • readOnly: 配置为只读(无法通过SNMP修改)
  • other: 特定于实现的存储

行状态 (Row Status)

*RowStatus对象遵循标准的RowStatus文本约定(RFC 2579):

  • 使用createAndGo在一步中创建并激活条目
  • 使用createAndWait创建条目并在激活前设置其他列
  • 使用active表示条目正在运行
  • 使用notInService临时停用条目
  • 使用notReady(只读)表示条目尚无法激活
  • 使用destroy删除条目

索引考虑 (Index Considerations)

IMPLIED关键字用于多个表索引(例如,snmpTargetAddrName)。这意味着:

  • 索引长度不在OID中单独编码
  • 索引字符串是可变长度的,并消耗OID的其余部分
  • 每个表只能出现一个IMPLIED索引,并且必须是最后一个

这种设计选择允许使用更长、更具描述性的名称,而无需单独的长度编码开销。