Diameter 安全性
OmniDRA 提供了一整套与 GSMA FS.19(Diameter 互联安全,v10.0)和 GSMA FS.21(互联信令安全建议,v12.0)对齐的 Diameter 安全模块。这些模块保护网络免受 Diameter 互联接口上的信令级攻击。
每个模块都是独立可配置的,可以启用或禁用而不影响其他模块,并发出自己的遥测事件以进行监控和警报。
架构概述
处理顺序
入站 Diameter 请求按以下顺序通过安全模块。任何阶段被拒绝的消息不会转发到后续阶段。
| 顺序 | 模块 | 方向 | 目的 |
|---|---|---|---|
| 1 | 速率限制器 | 入站 | 容量洪水保护 |
| 2 | Diameter 防火墙 | 入站 | FS.19 协议和内容过滤 |
| 3 | AVP 清理器 | 入站 | AVP 验证和剥离 |
| 4 | 路由引擎 | - | 标准 Diameter 路由 |
| 5 | 拓扑隐藏 | 出站 | 网络拓扑隐藏 |
操作
所有安全模块在检测到违规时支持可配置的操作。操作按模块(以及 Diameter 防火墙的每个类别)进行配置。
| 操作 | 行为 | Diameter 结果 |
|---|---|---|
{:error, 3002} | 以 Diameter 错误回答响应 | DIAMETER_UNABLE_TO_DELIVER |
{:error, 3004} | 以 Diameter 错误回答响应 | DIAMETER_TOO_BUSY |
{:error, 3007} | 以 Diameter 错误回答响应 | DIAMETER_APPLICATION_UNSUPPORTED |
:drop | 静默丢弃消息 | 不发送响应 |
:log_only | 记录违规但允许消息通过 | 消息继续 |
Diameter 防火墙
Diameter 防火墙实现了 GSMA FS.19 第 3.3 节 中定义的四个过滤层和 FS.21 第 7 节 中的协议无关包分类。消息通过每一层进行评估;在任何一层发生违规时,停止进一步处理。
低层格式过滤
GSMA 参考: FS.19 第 3.3.4 节,FS.21 第 7.3.1 节
低层过滤检测协议级违规和基本的反欺骗尝试,而无需理解上层应用语义。此层在消息到达更深层检查之前捕获格式不正确的消息。
执行的检查:
| 检查 | FS.19 参考 | 描述 |
|---|---|---|
| AVP 重复 | 第 3.3.4 节,4.8.1 | 检测必须最多出现一次的 AVP 的重复实例(例如 Origin-Host、Origin-Realm)。防止 AVP 重复规避攻击。 |
| Session-Id 排序 | 第 3.3.4 节 | 验证 Session-Id(AVP 263)是消息中的第一个 AVP,符合 RFC 6733 第 8.8 节。 |
| 答复中的 Destination-Host | 第 3.3.4 节 | 拒绝包含 Destination-Host AVP 的答复消息,这是协议违规,可能表明过滤规避。 |
| 强制 AVP 验证 | 第 3.3.5 节 | 验证每个命令码所需的 AVP 是否存在(例如,ULR 必须包含 User-Name 和 Visited-PLMN-Id,符合 3GPP TS 29.272 第 7.2.3 节)。 |
low_layer: %{
enabled: true,
action: {:error, 3002},
# AVP 代码,不能出现超过一次(FS.19 第 3.3.4 节)
# 264 = Origin-Host, 296 = Origin-Realm, 283 = Destination-Realm, 293 = Destination-Host
single_instance_avps: [264, 296, 283, 293],
# Session-Id 必须是第一个 AVP(RFC 6733 第 8.8 节)
enforce_session_id_first: true,
# 答复消息中不能包含 Destination-Host(FS.19 第 3.3.4 节)
reject_destination_host_in_answers: true,
# 每个命令码的强制 AVP(3GPP TS 29.272)
# 1 = User-Name (IMSI), 1407 = Visited-PLMN-Id, 264 = Origin-Host, 296 = Origin-Realm
mandatory_avps: %{
316 => [1, 1407, 264, 296],
318 => [1, 1407, 264, 296]
}
}
���别 1 — 接口未授权包过滤
GSMA 参考: FS.19 第 3.3.5 节,FS.21 第 7.2.1 节
类别 1 过滤确保仅接受每个互联接口的授权 Diameter 应用 ID 和命令码。这防止外部访问仅限内部的接口(例如,阻止通过 S6a 接口的 Sh 命令),并强制漫游合作伙伴仅发送其漫游协议涵盖的消息类型。
白名单方法遵循 FS.19 的建议:阻止所有 Diameter 消息,除非明确要求用于给定接口的消息。
白名单可以全局配置(适用于所有对等方)或按对等方配置,允许不同的漫游合作伙伴拥有不同的允许消息集。
category_1: %{
enabled: true,
action: {:error, 3007},
whitelists: %{
# 每对等方的白名单 — 限制此合作伙伴仅限 ULR 和 AIR(FS.19 第 3.3.5 节)
"restricted-partner.roaming.com" => %{
16_777_251 => [316, 318]
},
# 默认白名单 — 所有其他对等方允许的标准 S6a 命令
all: %{
# S6a/S6d (FS.19 第 3.3.5 节,表 2)
16_777_251 => [316, 317, 318, 319, 320, 321, 323],
# S13 — ME 身份检查 (FS.19 第 3.3.5 节)
16_777_252 => [324],
# S6c — 通过 HSS 的 SMS (FS.19 第 3.3.5.1 节)
16_777_312 => [8388647, 8388648],
# SGd — 通过 MME 的 SMS (FS.19 第 3.3.5.2 节)
16_777_313 => [8388645, 8388646]
}
}
}
常见 S6a/S6d 白名单:
| 命令码 | 名称 | 方向 | 参考 |
|---|---|---|---|
| 316 | 更新位置请求/答复 | MME → HSS | 3GPP TS 29.272 §7.2.3 |
| 317 | 取消位置请求/答复 | HSS → MME | 3GPP TS 29.272 §7.2.7 |
| 318 | 认证信息请求/答复 | MME → HSS | 3GPP TS 29.272 §7.2.5 |
| 319 | 插入用户数据请求/答复 | HSS → MME | 3GPP TS 29.272 §7.2.9 |
| 320 | 删除用户数据请求/答复 | HSS → MME | 3GPP TS 29.272 §7.2.11 |
| 321 | 清除 UE 请求/答复 | MME → HSS | 3GPP TS 29.272 §7.2.13 |
| 323 | 通知请求/答复 | MME → HSS | 3GPP TS 29.272 §7.2.15 |
漫游互联的常见应用 ID(FS.19 第 3.3.5 节):
| 应用 ID | 接口 | 参考 |
|---|---|---|
| 16777251 | S6a/S6d | 3GPP TS 29.272 |
| 16777252 | S13 | 3GPP TS 29.272 |
| 16777312 | S6c | 3GPP TS 29.338 |
| 16777313 | SGd | 3GPP TS 29.338 |
| 16777255 | SLg | 3GPP TS 29.172 |
| 16777267 | S9 | 3GPP TS 29.215 |
类别 2 — 家庭网络包过滤
GSMA 参考: FS.19 第 3.3.6 节,FS.21 第 7.2.2 节
类别 2 过滤保护家庭用户免受来自互联的消息攻击。受保护的命令码上的消息会检查用户身份(User-Name AVP 中的 IMSI,AVP 701 中的 MSISDN)。如果身份与家庭用户前缀匹配,则拒绝该消息 — 家庭用户的合法流量应来自家庭网络内部,而不是来自外部对等方。
这防止了外部实体向运营商自己的用户发送位置更新、用户数据请求或认证查询的攻击。
# 顶层:定义家庭用户前缀
home_imsi_prefixes: ["31338", "31339"],
home_msisdn_prefixes: ["+1313"],
category_2: %{
enabled: true,
action: {:error, 3002},
# 执行家庭用户身份检查的 S6a 命令码(FS.19 第 3.3.6 节,表 12)
protected_command_codes: [316, 317, 318, 319, 320, 321, 323]
}
类别 3 — 合理网络包过滤
GSMA 参考: FS.19 第 3.3.7 节,FS.21 第 7.2.3 节
类别 3 过滤通过跟踪每个用户(IMSI)的最后一次看到的网络来检测不合理的位置变化。当来自与之前不同的访问网络的更新位置请求到达时,经过的时间与可配置的阈值进行比较。发生的领域变化比物理上可能的速度更快,表明可能的攻击(例如,伪造的位置更新)。
该模块使用 ETS 表维护状态感知的每 IMSI 跟踪,并自动清理过期条目(超过 24 小时的条目定期删除)。
执行的检查:
| 检查 | FS.19 参考 | 描述 |
|---|---|---|
| 先前位置检查 | 第 3.3.7.1 节 | 将当前 ULR 的 Origin-Realm 与该 IMSI 的最后一次看到的 Origin-Realm 进行比较 |
| 速度/时间检查 | 第 3.3.7.2 节 | 标记在可配置的最小时间窗口内发生的领域变化 |
category_3: %{
enabled: true,
# 开始时使用 log_only 观察模式,然后再强制执行(FS.19 第 3.3.7 节)
action: :log_only,
# 最大合理速度(以 km/h 为单位)(FS.19 第 3.3.7.2 节)
max_velocity_kmh: 1200,
# 同一 IMSI 来自不同领域的 ULR 之间的最小秒数
min_time_between_updates_seconds: 2
}
配置
Diameter 防火墙在顶层启用,每个过滤层独立配置。上述每个类别部分中显示的配置片段组合在一个 module_diameter_firewall 键下:
config :dra,
module_diameter_firewall: %{
enabled: true,
home_imsi_prefixes: ["31338", "31339"],
home_msisdn_prefixes: ["+1313"],
low_layer: %{ ... }, # 参见上述低层格式过滤
category_1: %{ ... }, # 参见上述类别 1
category_2: %{ ... }, # 参见上述类别 2
category_3: %{ ... } # 参见上述类别 3
}
顶层参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 是 | false | 启用或禁用整个 Diameter 防火墙模块。当 false 时,所有消息都将通过而不进行检查。 |
children | 列表 | 否 | [] | 启用时在 DRA 监督者下启动的进程。对于防火墙设置为 [DRA.Router.Modules.DiameterFirewall.LocationTracker],这是类别 3 状态感知(速度)跟踪所必需的。 |
home_imsi_prefixes | 列表 | 否 | [] | 识别家庭用户的 IMSI 前缀字��串列表。由类别 2 过滤使用。示例:["31338", "31339"]。 |
home_msisdn_prefixes | 列表 | 否 | [] | 识别家庭用户的 MSISDN 前缀字符串列表。由类别 2 过滤使用。示例:["+1313"]。 |
低层参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 否 | true | 启用或禁用低层格式过滤。 |
action | 操作 | 否 | {:error, 3002} | 检测到低层违规时采取的操作。 |
single_instance_avps | 列表 | 否 | [264, 296, 283, 293] | 消息中不能出现超过一次的 AVP 代码。默认覆盖 Origin-Host (264)、Origin-Realm (296)、Destination-Realm (283) 和 Destination-Host (293)。 |
enforce_session_id_first | 布尔值 | 否 | true | 拒绝 Session-Id 不是第一个 AVP 的消息。 |
reject_destination_host_in_answers | 布尔值 | 否 | true | 拒绝包含 Destination-Host AVP 的答复消息。 |
mandatory_avps | 映射 | 否 | %{} | 命令码到所需 AVP 代码列表的映射。示例:%{316 => [1, 1407, 264, 296]} 要求 ULR 消息中包含 User-Name、Visited-PLMN-Id、Origin-Host 和 Origin-Realm。 |
类别 1 参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 否 | true | 启用或禁用类别 1 过滤。 |
action | 操作 | 否 | {:error, 3007} | 检测到类别 1 违规时采取的操作。默认响应 DIAMETER_APPLICATION_UNSUPPORTED。 |
whitelists | 映射 | 是 | - | 对等主机名(或 :all)到允许的应用 ID / 命令码组合的映射。:all 键提供默认白名单。特定对等方条目优先。 |
类别 2 参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 否 | true | 启用或禁用类别 2 过滤。 |
action | 操作 | 否 | {:error, 3002} | 当家庭用户被互联目标时采取的操作。 |
protected_command_codes | 列表 | 否 | [] | 触发家庭用户身份检查的命令码。通常是携带用户身份的 S6a 命令码。 |
类别 3 参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 否 | false | 启用或禁用类别 3 过滤。需要 LocationTracker 进程正在运行(启用时由监督者自动启动)。 |
action | 操作 | 否 | :log_only | 当位置合理性检查失败时采取的操作。建议先使用 :log_only 观察阈值,然后再强制执行。 |
max_velocity_kmh | 整数 | 否 | 1200 | 最大合理速度(以 km/h 为单位)。保留用于未来的地理距离计算。 |
min_time_between_updates_seconds | 整数 | 否 | 2 | 同一 IMSI 来自不同领域的定位更新之间的最小时间(以秒为单位)。比这更快的领域变化会被标记。 |
遥测事件
| 事件 | 描述 |
|---|---|
[:diameter, :firewall, :low_layer, :block] | 检测到低层格式违规并被阻止 |
[:diameter, :firewall, :category_1, :block] | 检测到类别 1 违规并被阻止 |
[:diameter, :firewall, :category_2, :block] | 检测到类别 2 违规并被阻止 |
[:diameter, :firewall, :category_3, :block] | 检测到类别 3 违规并被阻止 |
[:diameter, :firewall, :pass, :count] | 消息通过所有防火墙检查 |
所有事件都包括元数据:origin_host、application_id、command_code、application_name、command_name 和 reason。
拓扑隐藏
GSMA 参考: FS.19 第 2.4 节,第 3.4 节;FS.21 第 3.6 节
拓扑隐藏模块防止内部网络拓扑暴露给外部对等方。当 Diameter 消息穿越多个内部节点时,它们会累积 Route-Record AVP,并携带 Origin-Host/Origin-Realm 值,这些值揭示了内部主机名、网络结构和节点数量。这些信息可能被攻击者用来映射内部网络以进行针对性攻击。
拓扑隐藏在 出站路径 上操作 — 在做出路由决策后,在消息转发到目标对等方之前。
特性
| 特性 | FS.19 参考 | 描述 |
|---|---|---|
| Route-Record 剥离 | 第 2.4 节 | 移除所有揭示内部路由路径和节点主机名的 Route-Record AVP(282) |
| Origin-Host 重写 | 第 3.4 节 | 在答复消息中用 DRA 自身的身份(或自定义值)替换 Origin-Host AVP |
| Origin-Realm 重写 | 第 3.4 节 | 可选地替换 Origin-Realm AVP 以隐藏内部领域结构 |
| 每对等方控制 | - | 有选择地应用拓扑隐藏 — 仅对外部对等方,或对所有对等方 |
module_topology_hiding: %{
enabled: true,
# 剥离揭示内部路径的 Route-Record AVP(FS.19 第 2.4 节)
strip_route_records: true,
# 在答复中重写 Origin-Host 以隐藏内部节点名称(FS.19 第 3.4 节)
rewrite_origin_host: %{enabled: true, replacement: :self},
# 可选地隐藏内部领域结构
rewrite_origin_realm: %{enabled: false, replacement: :self},
# 应用于所有外部对等方,或列出特定主机名
external_peers: :all
}
参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 是 | false | 启用或禁用拓扑隐藏模块。 |
strip_route_records | 布尔值 | 否 | true | 在转发到外部对等方之前,从消息中移除所有 Route-Record AVP(代码 282)。 |
rewrite_origin_host | 映射 | 否 | 见下文 | 控制答复消息中的 Origin-Host 重写。 |
rewrite_origin_realm | 映射 | 否 | 见下文 | 控制答复消息中的 Origin-Realm 重写。 |
external_peers | :all 或 列表 | 否 | :all | 被视为外部的对等方。拓扑隐藏仅应用于目标为这些对等方的消息。对于互联部署使用 :all。使用主机名列表进行选择性应用。 |
重写参数(适用于 rewrite_origin_host 和 rewrite_origin_realm):
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 否 | varies | 启用此 AVP 的重写。默认情况下,Origin-Host 为 true,Origin-Realm 为 false。 |
replacement | :self 或 字符串 | 否 | :self | 替换值。:self 使用 DRA 的自身身份(来自 diameter 配置的 host.realm)。字符串值按原样使用。 |
遥测事件
| 事件 | 描述 |
|---|---|
[:diameter, :topology_hiding, :route_record, :stripped] | Route-Record AVP 被移除。测量包括剥离的 AVP 数量。 |
[:diameter, :topology_hiding, :origin_host, :rewritten] | Origin-Host AVP 被重写 |
[:diameter, :topology_hiding, :origin_realm, :rewritten] | Origin-Realm AVP 被重写 |
速率限制器
GSMA 参考: FS.19 第 3.4 节(可用性 / DoS 保护)
速率限制器对每个对等方的消息速率限制进行强制,以保护免受容量攻击和消息洪水。它作为管道中的第一个安全检查操作 — 在任何消息解析或内容检查之前 — 尽早减轻过载。
速率限制是通过滑动窗口计数器按对等方跟踪的。每个对等方都有一个独立的计数器,每秒重置一次。
module_rate_limiter: %{
enabled: true,
# 所有对等方的默认限制 (FS.19 第 3.4 节)
default_max_requests_per_second: 1000,
default_action: {:error, 3004},
# 每对等方的覆盖
peer_limits: %{
"high-volume-partner.roaming.com" => %{max_requests_per_second: 5000, action: {:error, 3004}},
"restricted-peer.roaming.com" => %{max_requests_per_second: 100, action: :drop}
}
}
参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 是 | false | 启用或禁用速率限制器模块。 |
children | 列表 | 否 | [] | 启用时在 DRA 监督者下启动的进程。设置为 [DRA.Router.Modules.RateLimiter] 以便每对等方的速率计数器进程运行。 |
default_max_requests_per_second | 整数 | 否 | 1000 | 允许来自任何单个对等方的默认最大请求数。 |
default_action | 操作 | 否 | {:error, 3004} | 当对等方超过其速率限制时的默认操作。 {:error, 3004} 响应 DIAMETER_TOO_BUSY。 |
peer_limits | 映射 | 否 | %{} | 对等方主机名到覆盖配置的映射。未列出的对等方使用默认值。 |
每对等方覆盖参数:
| 参数 | 类型 | 必��� | 默认 | 描述 |
|---|---|---|---|---|
max_requests_per_second | 整数 | 否 | 继承默认值 | 此特定对等方的最大请求数。 |
action | 操作 | 否 | 继承默认值 | 当此对等方超过其速率限制时的操作。 |
遥测事件
| 事件 | 描述 |
|---|---|
[:diameter, :rate_limiter, :throttled] | 消息被速率限制。测量包括 current_rate 和 limit。 |
[:diameter, :rate_limiter, :allowed] | 消息在速率限制内。 |
AVP 清理器
GSMA 参考: FS.19 第 3.3.4 节,4.8.1,4.8.2;FS.21 第 3.6 节
AVP 清理器在互联边界验证和清理 Diameter AVP。它解决了 FS.21 第 3.6 节对处理在 FS.19 过滤类别以下操作的协议级操纵攻击的建议。
特性
| 特性 | GSMA 参考 | 描述 |
|---|---|---|
| 未知供应商 AVP 剥离 | FS.21 第 3.6 节 | 移除来自非白名单供应商的 AVP。防止注入可能在后端节点触发意外行为的专有 AVP。 |
| 分组 AVP 嵌套深度 | FS.21 第 3.6 节 | 强制分组 AVP 的最大嵌套深度。防止使用深度嵌套的 AVP 结构进行堆栈溢出攻击。 |
module_avp_sanitizer: %{
enabled: true,
action: {:error, 3002},
# 仅允许标准供应商 AVP 在互联中(FS.21 第 3.6 节)
# 0 = IETF, 10415 = 3GPP, 13019 = ETSI, 5535 = 3GPP2
allowed_vendor_ids: [0, 10415, 13019, 5535],
strip_unknown_vendor_avps: true,
# 防止通过深度嵌套的分组 AVP 造成堆栈溢出(FS.21 第 3.6 节)
max_avp_nesting_depth: 10
}
参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 是 | false | 启用或禁用 AVP 清理器模块。 |
action | 操作 | 否 | {:error, 3002} | 检测到嵌套深度违规时采取的操作。供应商剥离静默移除违规 AVP,而不阻止消息。 |
allowed_vendor_ids | 列表 | 否 | [0, 10415, 13019, 5535] | 允许在互联中的供应商 ID 列表。来自其他供应商的 AVP 将被剥离。 |
strip_unknown_vendor_avps | 布尔值 | 否 | true | 启用剥离不在 allowed_vendor_ids 列表中的供应商的 AVP。 |
max_avp_nesting_depth | 整数 | 否 | 10 | 允许的分组 AVP 嵌套的最大深度。超过此深度的消息将受到配置的 action 的影响。 |
常见供应商 ID:
| 供应商 ID | 组织 | 备注 |
|---|---|---|
| 0 | IETF | 在 RFC 中定义的标准 Diameter AVP |
| 10415 | 3GPP | 所有 3GPP 定义的 AVP(S6a、Gx、Rx 等) |
| 13019 | ETSI | ETSI 定义的 AVP |
| 5535 | 3GPP2 | 3GPP2 定义的 AVP(CDMA 互通) |
遥测事件
| 事件 | 描述 |
|---|---|
[:diameter, :avp_sanitizer, :unknown_vendor, :stripped] | 一个或多个来自未知供应商的 AVP 被剥离 |
[:diameter, :avp_sanitizer, :nesting_depth, :violation] | 消息超过最大 AVP 嵌套深度 |
[:diameter, :avp_sanitizer, :pass, :count] | 消息通过所有清理检查 |
部署建议
推荐启用顺序
在首次部署安全模块时,逐步启用它们以避免干扰实时流量:
- 速率限制器 — 从宽松的限制开始并监控流量模式。一旦了解基线速率,收紧限制。
- AVP 清理器 — 误报风险低。启用剥离和嵌套检查。
- Diameter 防火墙(类别 1) — 根据漫游协议定义白名单。从已知良好的应用 ID / 命令码组合开始。
- Diameter 防火墙(低层) — 启用协议一致性检查。
- Diameter 防火墙(类别 2) — 配置家庭 IMSI/MSISDN 前缀。
- 拓扑隐藏 — 首先启用 Route-Record 剥离,然后重写 Origin-Host。
- Diameter 防火墙(类别 3) — 启用
:log_only操作以观察位置模式,然后再强制执行。
深度防御
这些模块实现了 FS.19 第 3.4 节中描述的 深度防御 原则。每��层针对不同类别的攻击:
| 攻击类别 | 主要防御 | 次要防御 |
|---|---|---|
| 容量 DoS | 速率限制器 | Diameter 防火墙(所有类别) |
| 接口滥用 | 类别 1 | AVP 清理器 |
| 家庭用户目标 | 类别 2 | 类别 1(接口限制) |
| 位置欺骗 | 类别 3 | 类别 2(家庭用户检查) |
| 拓扑发现 | 拓扑隐藏 | - |
| AVP 注入 | AVP 清理器 | 低层过滤 |
| 协议规避(AVP 重复) | 低层过滤 | AVP 清理器 |
GSMA 文档交叉参考
| 模块 / 特性 | FS.19 v10.0 | FS.21 v12.0 |
|---|---|---|
| 低层格式过滤 | 第 3.3.4 节 | 第 7.3.1 节 |
| 类别 1 过滤 | 第 3.3.5 节,附录 B.3.3 | 第 7.2.1 节 |
| 类别 2 过滤 | 第 3.3.6 节,附录 B.3.4 | 第 7.2.2 节,第 16 节 |
| 类别 3 过滤 | 第 3.3.7 节,附录 B.3.5 | 第 7.2.3 节 |
| 拓扑隐藏 | 第 2.4 节,第 3.4 节 | 第 3.6 节 |
| 速率限制 | 第 3.4 节 | - |
| AVP 清理 | 第 4.8.1 节,4.8.2 节 | 第 3.6 节 |
| 深度防御 | 第 3.4 节 | 第 3.15 节 |
| 过滤类别(协议无关) | 附录 A | 第 7 节 |