4. MIB模块的结构 (The Structure of the MIB Modules)
本文档中描述了三个独立的MIB模块:
- SNMP-TARGET-MIB: 管理目标MIB
- SNMP-NOTIFICATION-MIB: 通知MIB
- 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)
要向管理站发送陷阱通知:
- 在snmpTargetAddrTable中创建一个条目,指定管理站的地址
- 在snmpTargetParamsTable中创建一个条目,指定SNMP版本和安全参数
- 在snmpNotifyTable中创建一个条目,其标签与snmpTargetAddrTagList匹配
模式2: 过滤通知 (Filtered Notifications)
要仅向管理站发送特定通知:
- 配置模式1(简单通知配置)
- 在snmpNotifyFilterProfileTable中创建一个条目,将过滤器配置文件与目标参数关联
- 在snmpNotifyFilterTable中创建条目,定义要包含/排除的OID子树
模式3: 代理转发 (Proxy Forwarding)
要通过代理转发请求:
- 在snmpTargetAddrTable和snmpTargetParamsTable中为目标SNMP引擎创建条目
- 在snmpProxyTable中创建一个条目,指定:
- 要匹配的传入上下文和安全参数
- 传出目标地址(通过snmpProxySingleTargetOut)
- 代理类型(read、write、trap或inform)
4.6. 安全和访问控制 (Security and Access Control)
本文档中定义的MIB模块包含具有read-write和/或read-create的MAX-ACCESS的对象。设置这些对象可以:
- 将SNMP流量重定向到未经授权的目标
- 修改安全参数,可能削弱安全性
- 更改过滤规则,可能泄露敏感信息
建议:
- 使用RFC 3415中定义的VACM(基于视图的访问控制模型)限制对这些MIB对象的访问
- 只有授权的安全管理员才能对这些对象进行写访问
- 在修改这些对象时使用带身份验证和加密(authPriv)的SNMPv3
- 记录对这些对象的更改以用于审计目的
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索引,并且必须是最后一个
这种设计选择允许使用更长、更具描述性的名称,而无需单独的长度编码开销。