保护您的 API:如何实现 WAF 与 API 网关的集成?

更新时间 1/30/2024

在数字化时代,API 已经成为我们日常生活中不可或缺的一部分。它使我们能够轻松在不同的应用程序和服务之间访问和交换数据。然而,随着公开暴露的 API 端点数量不断增加,它们承担网络攻击和数据泄露的风险也在不断上升。因此,实施强有力的安全措施来保护您的 API 免受恶意攻击至关重要。

集成 WAF 和 API 网关以保护 API 的优势

Web 应用程序防火墙(WAF)和 API 网关技术是保护 API 免受攻击的两种最有效的方法之一。WAF 是一种安全解决方案,位于互联网和您的 API 服务器之间,分析传入请求并阻止任何恶意流量。API 网关是一个中间件层,位于您的 API 服务器和客户端之间,负责管理访问控制、流量路由和进行速率限制。

Apache APISIX 是一款流行的开源 API 网关,它提供了一套强大的内置安全插件。然而,面对日益复杂的攻击,如 CVE(通用漏洞和暴露)和零日漏洞利用,仅依赖这些插件仍然可能使您的 API 容易受到攻击。而将专业的 Web 应用程序防火墙(WAF)与 APISIX 集成便提供了多层防御策略,能够确保全面防护。

APISIX 的安全功能

  1. 身份验证和授权:APISIX 支持 JWTbasic auth, key auth 等插件,并与 OpenID Connect 共同提供程序集成,以强制执行访问控制,确保只有经过身份验证和授权的用户能够访问 API。

  2. 速率限制:通过 limit-connlimit-reqlimit-count 等插件,APISIX 实现了速率限制功能,有效防止恶意流量激增和 DoS 攻击。这一功能可以确保 API 的正常运行,同时保护系统免受不必要的压力和攻击。

  3. IP 限制和用户代理过滤:APISIX 允许根据 IP 地址和用户代理对传入请求进行细粒度的控制。这样,您可以限制特定IP地址或用户代理的访问,提高对潜在威胁的防范能力。

  4. CSRF 保护:APISIX 实施了跨站请求伪造(CSRF)保护机制,有效阻止此类攻击。这种保护措施有助于确保用户在使用 API 时不会受到恶意方的 CSRF 攻击,提升整体系统的安全性。

API 网关的局限性

  1. 基于签名的检测:APISIX 插件主要依赖已知攻击签名,因此在面对缺乏定义模式的零日漏洞攻击时可能表现不够有效。由于无法事先识别未知攻击模式,对于新型的零日漏洞攻击,API 网关的基于签名的检测能力受到限制。

  2. 规则更新不足:安全规则不断变化,需要专业的安全专家和公司来进行规则的及时更新和维护。

  3. 范围有限:尽管 APISIX 在保护网关层方面具有一定效果,但与 Web 应用程序防火墙(WAF)相比,其在应用层面提供的保护范围较为有限。

WAF 与 API 网关集成的优势

  1. 积极的威胁检测:先进的 WAF 利用机器学习和行为分析来检测异常流量,不仅仅依赖于已知攻击签名。这意味着即使没有先前对漏洞的了解,WAF 也能够进行检测,提高对未知威胁的识别和防范能力。

  2. 实时规则更新:基于云的 WAF 具有能够迅速更新规则的优势,以应对新兴威胁。这种实时更新可以减小系统面临新威胁的暴露窗口,提高系统对于最新威胁的防御水平。

  3. 深层应用保护:WAF 能够在应用层过滤和阻止恶意流量,甚至能够防御绕过 API 网关的攻击。

  4. 合规性:一些行业规定使用 WAF,以符合数据安全法规的合规性。

集成过程

要实现 WAF 和 API 网关的集成,您可以选择合适的工具来确保系统的综合安全性。Apache APISIX 作为一种流行的 API 网关解决方案,提供了可扩展和灵活的平台,用于有效地管理您的 API。与此同时,Chaitin SafeLineCoraza 则是先进的 WAF 解决方案,它们提供先进的安全功能和可定制的规则集。

APISIX 和 Chaitin SafeLine

Chaitin SafeLine WAF 是 APISIX 3.5 的内置插件。启用 chaitin-waf 插件后,流量将被转发到 Chaitin WAF 服务,以检测和防止各种 Web 应用程序攻击,保护应用程序和用户数据的安全。

WAF_APISIX_1

假设您已安装了 Apache APISIX 和 SafeLine,以下命令行可将两者集成:

1curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/chaitin-waf -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
2{
3  "nodes":[
4     {
5       "host": "192.168.99.11",
6       "port": 8000
7     }
8  ]
9}'

192.168.99.11 是 SafeLine 服务的 IP。接下来,我们可以在 APISIX 中创建一条路由:

1curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
2{
3   "uri": "/*",
4   "plugins": {
5       "chaitin-waf": {}
6    },
7   "upstream": {
8       "type": "roundrobin",
9       "nodes": {
10           "192.168.99.12:80": 1
11       }
12   }
13}'

192.168.99.12 是上游服务的 IP。至此,集成完成。

现在让我们模拟 SQL 注入,看看效果:

1curl http://127.0.0.1:9080 -d 'a=1 and 1=1'

系统返回了 HTTP 403 错误,并且从错误消息中可以看出,Chaitin SafeLine 成功防御了这次攻击。

12023/08/31 09:20:39 [info] 126240#126240: *23933 Transaction interrupted tx_id="JVhHVfDuGjVbfgvDjik" context_id=2 action="deny" phase="http_request_headers", client: 127.0.0.1, server: _, request: "GET /anything HTTP/1.1", host: "localhost:9080"
22023/08/31 09:20:39 [debug] 126240#126240: *23933 Interruption already handled, sending downstream the local response tx_id="JVhHVfDuGjVbfgvDjik" context_id=2 interruption_handled_phase="http_request_headers"

APISIX 和 Coraza-proxy-wasm

APISIX 支持使用 WebAssembly(Wasm)开发插件,而 Coraza 也提供 Wasm 插件作为一种选择。因此,将 Coraza 与 APISIX 集成的成本相对较低。

Wasm 可以在跨平台上使用,使得 APISIX 和 Coraza 可以在没有额外广泛修改或适应的情况下无缝工作。这消除了大量的代码修改和适应工作。

coraza 也是 Apache APISIX 的内置插件,可以通过修改配置文件 conf/config-default.yaml 启用:

1wasm:
2  plugins:
3    - name: coraza-filter
4      priority: 7999
5      file: /home/ubuntu/coraza-proxy-wasm/build/main.wasm

然后,在 APISIX 中创建一个带有 Coraza 规则的路由:

1curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{
2  "uri": "/anything",
3  "plugins": {
4    "coraza-filter": {
5      "conf": {
6        "directives_map": {
7          "default": [
8            "SecDebugLogLevel 9",
9            "SecRuleEngine On",
10            "SecRule REQUEST_URI \"@beginsWith /anything\" \"id:101,phase:1,t:lowercase,deny\""
11          ]
12        },
13        "default_directives": "default"
14      }
15    }
16  },
17  "upstream": {
18    "type": "roundrobin",
19    "nodes": {
20      "httpbin.org:80": 1
21    }
22  }
23}'

现在,我们发送请求,看看实际效果:

1curl http://localhost:9080/anything -v

查看 logs/error.log 中的日志:

12023/08/31 09:20:39 [info] 126240#126240: *23933 Transaction interrupted tx_id="JVhHVfDuGjVbfgvDjik" context_id=2 action="deny" phase="http_request_headers", client: 127.0.0.1, server: _, request: "GET /anything HTTP/1.1", host: "localhost:9080"
22023/08/31 09:20:39 [debug] 126240#126240: *23933 Interruption already handled, sending downstream the local response tx_id="JVhHVfDuGjVbfgvDjik" context_id=2 interruption_handled_phase="http_request_headers"

使用 WAF 和 API 网关集成的最佳实践

为了确保 API 的安全性,您应该遵循以下最佳实践:

  1. 实施深度防御策略,采用多层安全控制;

  2. 使用 SSL/TLS 加密以保障传输中的数据安全;

  3. 定期更新 WAF 规则集,确保其能够应对最新的威胁;

  4. 监测 API 流量和日志,快速发现并应对安全事件

API 安全和保护未来的趋势和进展

随着 API 的广泛应用,对采用先进的安全措施以保护它们的需求日益迫切。未来 API 安全和保护的趋势和进展涵盖以下方面:

  1. 能够自动检测和应对威胁的人工智能驱动的安全解决方案;

  2. 基于区块链的身份验证和访问控制机制;

  3. 基于微服务的 API 架构,提供更大的灵活性和可扩展性。

总结

总体而言,WAF 和 API 网关的集成仍然是 API 安全的关键组成部分。采用最佳实践和应用适当的安全工具可以构建强大的安全层,从而保护 API 免受各种网络攻击。正确的方法和工具选择,能够确保 API 及其交换的数据在可用性、完整性和保密性方面得到充分的保障。

微信咨询

获取方案