屏蔽恶意 IP 地址
你可以基于 IP 地址配置访问控制,以防止不必要的用户访问你的 API。
本指南将引导你在网关组上配置 ip-restriction
插件作为全局规则,以阻止黑名单中的 IP 地址。如果请求来自黑名单中的 IP 地址,API7 网关将拒绝该请求并返回 403
响应代码。请求的 IP 地址可以是实际的客户端 IP 地址,也可以是 X-Forwarded-For
地址。
前提条件
为网关组内所有 API 设置共享 IP 地址黑名单
一旦发现恶意 IP 地址正在攻击 API,最好将该 IP 地址添加到共享黑名单中以保护其他 API。
- 控制台
- ADC
- Ingress Controller
选择你的服务所在的网关组。
从侧边栏选择 插件设置,然后选择 插件全局规则。
在 插件 字段中,搜索
ip-restriction
插件。点击 加号 图标 (+)。
在出现的对话框中,将以下配置添加到 JSON 编辑器 中,将 IP 地址
127.0.0.1
添加到黑名单中:{
"blacklist": ["127.0.0.1"],
"message": "Sorry, your IP address is not allowed."
}点击 启用。
要使用 ADC 配置 IP 限制,请创建以下配置:
adc.yaml
services:
- name: httpbin API
upstream:
name: default
scheme: http
nodes:
- host: httpbin.org
port: 80
weight: 100
routes:
- uris:
- /ip
name: security-ip
methods:
- GET
global_rules:
ip-restriction:
_meta:
disable: false
blacklist:
- 127.0.0.1
message: Sorry, your IP address is not allowed.
将配置同步到 API7 网关:
adc sync -f adc.yaml
创建一个路由的 Kubernetes manifest 文件:
httpbin-route.yaml
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: httpbin-route
# namespace: api7 # replace with your namespace
spec:
http:
- name: httpbin-route
match:
paths:
- /ip
methods:
- GET
backends:
- serviceName: httpbin
servicePort: 80
创建另一个启用了密钥认证的路由的 manifest 文件:
global-ip-restriction.yaml
apiVersion: apisix.apache.org/v2
kind: ApisixGlobalRule
metadata:
name: global-ip-restriction
# namespace: api7 # replace with your namespace
spec:
plugins:
- name: ip-restriction
enable: true
config:
blacklist:
- "127.0.0.1"
message: Sorry, your IP address is not allowed.
将配置应用到你的集群:
kubectl apply -f httpbin-route.yaml -f global-ip-restriction.yaml
验证
从受限的 IP 地址发送请求。在本例中,127.0.0.1
被配置为黑名单 IP 地址:
curl -i "http://127.0.0.1:9080/ip"
你将收到一个 503 Service Temporarily Unavailable
响应,并附带以下消息:
{"error_msg":"Sorry, your IP address is not allowed."}