跳到主要内容

11.4. Use of Reports (报告的使用)

11.4. Use of Reports (报告的使用)

本节描述 USM 如何使用 SNMP 报告 (Report) 机制来传达错误和其他信息。

Report PDU (报告 PDU)

[RFC3416] 中定义的报告 PDU (Report PDU) 被 USM 用于返回有关消息处理期间发生的错误的信息。报告对以下方面特别重要:

  1. 发现 (Discovery) - 返回权威引擎的 snmpEngineID
  2. 时间同步 (Time synchronization) - 返回当前引擎时间值
  3. 错误通知 (Error notification) - 指示认证、隐私或其他安全相关错误

USM Statistics (USM 统计信息)

USM 维护多个计数器来跟踪各种错误条件。这些计数器在 MIB 模块的 usmStats 组中定义 (第 5 节):

  • usmStatsUnsupportedSecLevels - 具有不支持的安全级别的消息
  • usmStatsNotInTimeWindows - 超出时间窗口的消息
  • usmStatsUnknownUserNames - 具有未知用户名的消息
  • usmStatsUnknownEngineIDs - 具有未知引擎 ID 的消息
  • usmStatsWrongDigests - 具有不正确认证摘要的消息
  • usmStatsDecryptionErrors - 具有解密错误的消息

Report Generation (报告生成)

当 USM 在传入消息处理期间检测到错误时, 它可以 (MAY) 生成包含以下内容的报告-PDU:

  1. 适当的 USM 统计计数器对象
  2. 该计数器的当前值
  3. 从接收到的消息中获得的相关 msgID (用于匹配)

重要考虑事项:

  • 不是总是为每个错误生成报告。决策取决于安全级别和错误类型。
  • 某些错误的报告 (如用于发现的 usmStatsNotInTimeWindows) 是建设性使用的。
  • 必须不 (MUST NOT) 响应另一个报告而发送报告, 以避免无限循环。

Security Levels for Reports (报告的安全级别)

根据错误, 报告以不同的安全级别发送:

  1. noAuthNoPriv - 用于:

    • 发现 (未知 engineID)
    • 时间同步失败
    • 未知用户名
  2. 与请求相同 - 用于:

    • 认证失败 (错误的摘要)
    • 解密错误
    • 超出时间窗口错误 (同步后)

Report Reception (报告接收)

当命令生成器或通知发起者接收到报告-PDU 时:

  1. 发现响应: 如果报告包含 usmStatsUnknownEngineIDs 并且 varBind 包含非零的 engineID, 则应用程序已成功发现权威引擎的身份。

  2. 时间同步响应: 如果报告包含 usmStatsNotInTimeWindows, 应用程序应从 securityParameters 中提取 msgAuthoritativeEngineBootsmsgAuthoritativeEngineTime 并更新其本地缓存。

  3. 错误指示: 对于其他报告类型, 应用程序应将报告视为原始请求因指定原因失败的指示。

Report Handling Best Practices (报告处理最佳实践)

  1. 避免报告风暴: 实现应限速或抑制报告生成以防止网络拥塞。

  2. 记录报告: 应记录与安全相关的报告以进行审计和安全分析。

  3. 用户反馈: 当报告指示认证或授权失败时, 应用程序应向用户提供清晰的反馈。

  4. 时间窗口错误: 在多次 usmStatsNotInTimeWindows 报告后, 实现应怀疑时钟偏差, 并可能需要手动干预。

Privacy and Reports (隐私和报告)

响应具有隐私的消息而生成的报告可能需要特殊处理:

  • 如果解密失败, 报告应指示 usmStatsDecryptionErrors
  • 如果可能, 报告本身应以与原始消息中请求的安全级别相同的方式发送。
  • 如果无法确定安全级别 (例如, 由于严重的消息损坏), 报告应以 noAuthNoPriv 发送。