11.4. Use of Reports (报告的使用)
11.4. Use of Reports (报告的使用)
本节描述 USM 如何使用 SNMP 报告 (Report) 机制来传达错误和其他信息。
Report PDU (报告 PDU)
[RFC3416] 中定义的报告 PDU (Report PDU) 被 USM 用于返回有关消息处理期间发生的错误的信息。报告对以下方面特别重要:
- 发现 (Discovery) - 返回权威引擎的 snmpEngineID
- 时间同步 (Time synchronization) - 返回当前引擎时间值
- 错误通知 (Error notification) - 指示认证、隐私或其他安全相关错误
USM Statistics (USM 统计信息)
USM 维护多个计数器来跟踪各种错误条件。这些计数器在 MIB 模块的 usmStats 组中定义 (第 5 节):
usmStatsUnsupportedSecLevels- 具有不支持的安全级别的消息usmStatsNotInTimeWindows- 超出时间窗口的消息usmStatsUnknownUserNames- 具有未知用户名的消息usmStatsUnknownEngineIDs- 具有未知引擎 ID 的消息usmStatsWrongDigests- 具有不正确认证摘要的消息usmStatsDecryptionErrors- 具有解密错误的消息
Report Generation (报告生成)
当 USM 在传入消息处理期间检测到错误时, 它可以 (MAY) 生成包含以下内容的报告-PDU:
- 适当的 USM 统计计数器对象
- 该计数器的当前值
- 从接收到的消息中获得的相关 msgID (用于匹配)
重要考虑事项:
- 不是总是为每个错误生成报告。决策取决于安全级别和错误类型。
- 某些错误的报告 (如用于发现的
usmStatsNotInTimeWindows) 是建设性使用的。 - 必须不 (MUST NOT) 响应另一个报告而发送报告, 以避免无限循环。
Security Levels for Reports (报告的安全级别)
根据错误, 报告以不同的安全级别发送:
-
noAuthNoPriv - 用于:
- 发现 (未知 engineID)
- 时间同步失败
- 未知用户名
-
与请求相同 - 用于:
- 认证失败 (错误的摘要)
- 解密错误
- 超出时间窗口错误 (同步后)
Report Reception (报告接收)
当命令生成器或通知发起者接收到报告-PDU 时:
-
发现响应: 如果报告包含
usmStatsUnknownEngineIDs并且 varBind 包含非零的 engineID, 则应用程序已成功发现权威引擎的身份。 -
时间同步响应: 如果报告包含
usmStatsNotInTimeWindows, 应用程序应从 securityParameters 中提取msgAuthoritativeEngineBoots和msgAuthoritativeEngineTime并更新其本地缓存。 -
错误指示: 对于其他报告类型, 应用程序应将报告视为原始请求因指定原因失败的指示。
Report Handling Best Practices (报告处理最佳实践)
-
避免报告风暴: 实现应限速或抑制报告生成以防止网络拥塞。
-
记录报告: 应记录与安全相关的报告以进行审计和安全分析。
-
用户反馈: 当报告指示认证或授权失败时, 应用程序应向用户提供清晰的反馈。
-
时间窗口错误: 在多次
usmStatsNotInTimeWindows报告后, 实现应怀疑时钟偏差, 并可能需要手动干预。
Privacy and Reports (隐私和报告)
响应具有隐私的消息而生成的报告可能需要特殊处理:
- 如果解密失败, 报告应指示
usmStatsDecryptionErrors。 - 如果可能, 报告本身应以与原始消息中请求的安全级别相同的方式发送。
- 如果无法确定安全级别 (例如, 由于严重的消息损坏), 报告应以
noAuthNoPriv发送。