4. 入口边界设计:流量接入点、API网关策略、协议过滤与白名单

入口边界是Agent服务的第一道防线,负责在流量进入内部集群之前进行识别、清洗和准入控制。本章聚焦于如何定义流量接入点、配置API网关策略、实施协议过滤与白名单机制,从而构建拒绝服务场景下的可信入口。

4.1 边界定义与系统分层

入口边界位于用户端/外部Agent与内部Agent服务之间,其作用可分解为四个层次:

  • 物理/网络层:确定流量接入点(如弹性公网IP、CDN、Anycast),配置DDoS基础防护。
  • API网关层:统一处理认证、限流、路由、协议转换。
  • 协议过滤层:基于协议规范(HTTP/gRPC/WebSocket)进行报文格式校验,拒绝畸形请求。
  • 白名单层:基于调用方身份、请求来源IP、请求路径、Agent版本等属性建立动态/静态白名单。
设计原则:每一层都应具备独立失效能力。即使API网关被压垮,协议过滤层仍可丢弃非合规流量;白名单机制可作为最后一道准入屏障,确保只有已注册的调用方才能进入核心逻辑。

4.2 组件职责与信任链路

组件 核心职责 信任假设
CDN / 高性能负载均衡 吸收四层DDoS攻击,隐藏真实源IP,提供SSL卸载 不可信,仅做流量分发
API Gateway (如Kong / Envoy / APISIX) 认证、限流、协议转换、请求路由;执行全局策略 半可信,策略下发需签名校验
协议过滤器(Sidecar / 独立Filter) 检查HTTP header大小、gRPC message长度、WebSocket帧结构 可信,运行在受控环境
白名单服务(Redis + 策略引擎) 维护动态白名单、身份指纹、版本白名单 强可信,需高可用部署

信任链路:流量从互联网进入后,在每一层都经过一次信任提升。CDN判定为“基本可信流量”;API网关判定为“已认证流量”;协议过滤器判定为“合规流量”;白名单服务判定为“授权流量”。拒绝服务攻击的目标就是绕过或耗尽这些信任检查点。

4.3 数据流与控制流

数据流(正常请求)

  1. 外部Agent → CDN / ELB → API Gateway → 协议过滤器 → 白名单决策 → 后端Agent服务。
  2. API Gateway在路由时注入原始请求指纹(X-Request-ID, X-Forwarded-For)。
  3. 协议过滤器对请求体进行格式校验,拒绝不合规报文。
  4. 白名单服务检查调用方身份是否在允许列表内。

控制流(策略下发)

  1. 管理平面(Control Plane)将网关策略、协议规则、白名单列表发布到配置中心(如etcd / Nacos)。
  2. API Gateway监听配置变更,热加载限流和路由规则。
  3. 协议过滤器通过Kubernetes ConfigMap或XDS协议接收校验Schema。
  4. 白名单服务通过订阅分布式缓存更新动态加入/移出白名单。

4.4 API网关策略配置要点

以下是一个简化但高可用的YAML配置片段,展示了限流、协议校验和白名单的结合。

# gateway-policy.yaml
apiVersion: gateway.konghq.com/v1
kind: KongIngress
metadata:
  name: agent-entry-policy
spec:
  route:
    methods: ["POST", "GET"]
    protocols: ["http", "https"]
    strip_path: false
  plugins:
  - name: rate-limiting
    config:
      minute: 1000                       # 每分钟最多1000请求
      policy: local                      # 单节点限流(配合集群使用Redis模式)
  - name: request-validator
    config:
      allowed_content_types:             # 协议过滤白名单
        - "application/json"
        - "application/grpc"
      max_body_size: 4194304             # 4MB 请求体上限
  - name: ip-restriction
    config:
      allow:
        - "10.0.0.0/8"
        - "172.16.0.0/12"
      deny: []
注意:以上配置仅为单网关实例示例。在生产环境中,务必启用分布式限流(如Redis限流计数器),防止因局部限流不均导致入口对冲。同时,IP白名单不可被用来替代认证,仅作为辅助手段。

4.5 协议过滤与白名单设计

协议过滤规则

协议 过滤维度 推荐阈值
HTTP/1.1 Header数量、URI长度、HTTP方法白名单 Header ≤ 64个, URI ≤ 8KB, 仅允许 GET/POST/PUT
gRPC Protobuf message大小、序列化格式、gRPC-status校验 单message ≤ 4MB, 仅支持UTF-8与JSON自定义options
WebSocket 帧类型白名单、Payload大小、连接周期 仅文本/二进制帧, Payload ≤ 64KB, 连接≤30分钟

白名单分类

  • 静态白名单:预配置的Agent服务调用方API Key、可信IP段。
  • 动态白名单:基于健康探测结果自动加入(如gRPC health check通过的服务端IP)。
  • 版本白名单:只允许特定Agent SDK版本(v1.1.0及以上)的请求进入。

最佳实践:将白名单策略拆分为两部分——部署时生效的静态规则(写入ConfigMap)和运行时调整的动态规则(写入Redis)。动态白名单必须设置TTL(默认300秒),防止僵尸节点长期留在白名单内。

4.6 选型权衡

选型方面 优势 劣势
Envoy Proxy 高性能L4/L7代理,原生支持gRPC和WebSocket 配置复杂度高,依赖XDS控制面
Kong Gateway 插件生态丰富,易于扩展协议过滤和白名单插件 自带限流插件在高并发下性能损耗约5-10%
云原生网关(如ALB+API GW) 免运维,无缝集成WAF和DDoS防护 灵活的协议过滤能力受限,白名单策略需配合HTTPS自定义头

4.7 入口边界安全控制链(SVG结构图)

Agent 入口边界安全控制链 Agent 入口边界安全控制链 外部Agent / 用户流量 CDN / DDoS防护层 API 网关(限流/路由/认证) 协议过滤器(格式/大小校验) 白名单决策(静态 + 动态) 后端Agent服务 管理平面策略下发 阻断点说明: 入口边界共设置4道阻断点:CDN/DDoS防护层(四层攻击)、API网关限流(七层洪峰)、协议过滤器(畸形报文)、白名单决策(未授权请求)。

4.8 风险点

  1. 集中式网关单点过载:网关层成为瓶颈,一旦被压垮,所有流量都会中断。解决方案:多活部署 + 客户端侧限流。
  2. 白名单过期与僵尸节点:动态白名单未设置TTL或TTL过长,导致已下线的Agent仍在白名单内,被攻击者利用。建议TTL不超过5分钟,并引入周期性的身份重验证。
  3. 协议过滤绕过:攻击者通过HTTP分块传输、gRPC metadata溢出等方式绕过过滤器。必须同时检查多个协议层的边界值。
  4. 策略配置割裂:API网关、协议过滤器、白名单服务各自的策略不一致,导致流量被错误放行或拒绝。建议将所有策略存储在统一配置中心进行原子化发布。

4.9 落地步骤

  1. 确定流量接入点:根据部署环境选择公网IP、CDN或云原生接入点,启用基础DDoS清洗。
  2. 部署API网关:选择Envoy或Kong,配置路由、限流与认证插件;启用Prometheus指标暴露。
  3. 嵌入协议过滤器:在网关注入点后或Sidecar中配置请求大小、格式、方法白名单;编写压测脚本验证过滤效果。
  4. 搭建白名单服务:使用Redis + 策略引擎存储白名单;对接Agent注册中心动态同步。
  5. 端到端验证:构造正常、畸形、超限、伪造身份请求,确认每一层均正确拦截。
  6. 灰度上线与告警:先启用1%流量的完整入口策略,观察5分钟,设置异常告警后全量切换。

4.10 验收标准

验收项 预期结果 验证方式
限流失效保护 突发达到2000 req/s时,超过阈值的请求返回429 使用wrk / Locust进行阶梯压测
畸形报文过滤 恶意请求(超大Header、非法字符)在协议过滤器层被拒绝 发送定制化畸形请求包,检查日志
白名单准入 未注册API Key请求返回403,已注册请求正常通过 使用两种凭证分别发送请求
高可用故障切换 单网关或白名单Redis节点宕机不影响整体1分钟内的服务可用性 Chaos Engineering注入故障,观察SLO

总结:本章将入口边界设计从抽象概念落地为可执行策略——流量接入点确定攻击面,API网关执行第一道限流与认证,协议过滤器排除畸形请求,白名单决策完成最终准入。四层机制协同工作,任何一个环节失效都不会导致整体防线崩溃。这是Agent拒绝服务场景下“防御纵深”理念的具体体现。