wallarm/api-firewall
GitHub: wallarm/api-firewall
基于OpenAPI和GraphQL规范的高性能API防火墙,通过正向安全模型验证请求响应并发现Shadow API。
Stars: 652 | Forks: 61
# Wallarm 开源 API 防火墙 [](https://www.blackhat.com/us-22/arsenal/schedule/index.html#open-source-api-firewall-new-features--functionalities-28038)
API Firewall 是一款高性能代理,基于 [OpenAPI](https://wallarm.github.io/api-firewall/installation-guides/docker-container/) 和 [GraphQL](https://wallarm.github.io/api-firewall/installation-guides/graphql/docker-container/) 架构进行 API 请求和响应验证。它旨在保护云原生环境中的 REST 和 GraphQL API 端点。API Firewall 通过使用正向安全模型提供 API 加固,仅允许符合预定义 API 规范的请求和响应调用,同时拒绝其他所有内容。
API Firewall 的**关键特性**包括:
* 通过拦截恶意请求保护 REST 和 GraphQL API 端点
* 通过拦截格式错误的 API 响应阻止 API 数据泄露
* 发现 Shadow API 端点
* 验证基于 OAuth 2.0 协议认证的 JWT access token
* 将受损的 API token、密钥和 Cookies 加入黑名单
* AllowIPList - 通过定义允许的 IP 地址列表来限制对端点的访问
* 广泛的攻击防护:API Firewall 支持 ModSecurity 规则和 OWASP ModSecurity 核心规则集
该产品是**开源**的,可在 DockerHub 获取,并已获得 10 亿次(!!!)下载。为了支持该项目,您可以给该[代码库](https://hub.docker.com/r/wallarm/api-firewall)加星标。
## 运行模式
Wallarm API Firewall 提供多种运行模式:
* [`PROXY`](https://wallarm.github.io/api-firewall/installation-guides/docker-container/):根据 OpenAPI 3.0 验证 HTTP 请求和响应,并将匹配的请求代理到后端。
* [`API`](https://wallarm.github.io/api-firewall/installation-guides/api-mode/):根据 OpenAPI 3.0 验证单个请求,无需进一步代理。
* [`graphql`](https://wallarm.github.io/api-firewall/installation-guides/graphql/docker-container/):根据 GraphQL 架构验证 HTTP 和 WebSocket 请求,并将匹配的请求代理到后端。
## 使用案例
### 在拦截模式下运行
* 拦截不符合规范的可疑请求
* 拦截格式错误的 API 响应以阻止数据泄露和敏感信息暴露
### 在监控模式下运行
* 发现 Shadow API 和未记录的 API 端点
* 记录不符合规范的可疑请求和响应
## API 架构验证与正向安全模型
启动 API Firewall 时,您应提供受 API Firewall 保护的应用程序的 REST 或 GraphQL API 规范。启动后的 API Firewall 将作为反向代理运行,并验证请求和响应是否符合规范中定义的架构。
不符合架构的流量将通过 [`STDOUT` 和 `STDERR` Docker 服务](https://docs.docker.com/config/containers/logging/)进行记录或拦截(取决于配置的 API Firewall 运行模式)。在 REST API 上以日志记录模式运行时,API Firewall 还会记录所谓的 Shadow API 端点,即那些未包含在 API 规范中但会响应请求的端点(返回代码 `404` 的端点除外)。

通过允许您使用 API 规范设置流量要求,API Firewall 采用了正向安全模型。
## 技术数据
[API Firewall 作为](https://www.wallarm.com/what/the-concept-of-a-firewall)带有内置 OpenAPI 3.0 或 GraphQL 请求和响应验证器的反向代理运行。它使用 Golang 编写,并采用 fasthttp 代理。该项目针对极致性能和接近零的额外延迟进行了优化。
在处理传入请求期间,API Firewall 能识别多种 `Content-Type` 标头值,包括:
* `application/json`
* `application/xml`
* `application/octet-stream`
* `application/x-www-form-urlencoded`
* `application/x-yaml`
* `application/yaml`
* `application/zip`
* `multipart/form-data`
* `text/csv`
* `text/plain`
* `+json` 结构化语法后缀
* `+xml` 结构化语法后缀
* `+yaml` 结构化语法后缀
* `+csv` 结构化语法后缀
## 启动 API Firewall
要在 Docker 上下下载、安装并启动 API Firewall,请参考:
* [REST API 指南](https://wallarm.github.io/api-firewall/installation-guides/docker-container/)
* [GraphQL API 指南](https://wallarm.github.io/api-firewall/installation-guides/graphql/docker-container/)
## 演示
您可以通过运行部署了受 API Firewall 保护的应用程序示例的演示环境来试用 API Firewall。有两个可用的演示环境:
* [使用 Docker Compose 的 API Firewall 演示](https://github.com/wallarm/api-firewall/tree/main/demo/docker-compose)
* [使用 Kubernetes 的 API Firewall 演示](https://github.com/wallarm/api-firewall/tree/main/demo/kubernetes)
## 与 API Firewall 相关的 Wallarm 博客文章
* [使用 API Firewall 发现 Shadow API](https://lab.wallarm.com/discovering-shadow-apis-with-a-api-firewall/)
* [Wallarm API Firewall 在生产环境中性能优于 NGINX](https://lab.wallarm.com/wallarm-api-firewall-outperforms-nginx-in-a-production-environment/)
* [使用开源 APIFW 免费保护 REST API](https://lab.wallarm.com/securing-rest-with-free-api-firewall-how-to-guide/)
## 性能
在创建 API Firewall 时,我们优先考虑速度和效率,以确保我们的客户拥有最快的 API。我们最新的测试表明,API Firewall 处理一个请求的平均时间为 1.339 毫秒,比 Nginx 快 66%:
```
API Firewall 0.6.2 with JSON validation
$ ab -c 200 -n 10000 -p ./large.json -T application/json http://127.0.0.1:8282/test/signup
Requests per second: 13005.81 [#/sec] (mean)
Time per request: 15.378 [ms] (mean)
Time per request: 0.077 [ms] (mean, across all concurrent requests)
NGINX 1.18.0 without JSON validation
$ ab -c 200 -n 10000 -p ./large.json -T application/json http://127.0.0.1/test/signup
Requests per second: 7887.76 [#/sec] (mean)
Time per request: 25.356 [ms] (mean)
Time per request: 0.127 [ms] (mean, across all concurrent requests)
```
这些性能结果并不是我们在 API Firewall 测试中获得的唯一结果。其他结果以及用于提高 API Firewall 性能的方法在这篇 [Wallarm 博客文章](https://lab.wallarm.com/wallarm-api-firewall-outperforms-nginx-in-a-production-environment/)中进行了描述。
标签:API加固, API安全, API网关, API防火墙, CISA项目, Docker, EVTX分析, GraphQL, IP白名单, JSON输出, JWT验证, ModSecurity, OAuth 2.0, OpenAPI, WAF, 代理, 响应验证, 子域名突变, 安全防御评估, 开源安全工具, 影子API, 微服务安全, 数据防泄露, 无文件攻击, 日志审计, 正向安全模型, 网络安全, 请求拦截, 请求验证, 逆向工程平台, 隐私保护