通过正则规则限制请求, 同时支持IP黑名单拦截后端请求. IP黑名单可以是单个IP、IP段或CIDR.
- 进入kong源码目录, 一般为
/usr/local/share/lua/5.1/kong/ - 修改插件配置文件
constants.lua, 增加插件kong-waf. - 进入plugin目录, 下载插件
cd plugins; git clone https://github.com/exexute/kong-waf.git - 重启服务即可.
plugin:Service:Route:Consumer:Credential:upstream service:
下面是kong-waf插件需要用到的插件:
| 参数名 | 默认值 | 参数解释 |
|---|---|---|
name |
要使用的插件名, kong-waf |
|
service_id |
调用插件的服务id | |
route_id |
调用插件的路由id | |
enabled |
true | 插件是否启用, 默认为启用 |
consumer_id |
调用插件的消费者id | |
config.whitelist |
ip白名单, 只允许该部分IP访问后端服务 | |
config.blacklist |
ip黑名单, 该部分IP不允许访问后端服务 | |
config.openwaf |
on | 是否打开waf功能, on-启用waf, off-不启用 (打开waf之后会利用下面的waf检测规则对请求做检测, 占用服务器资源情况需自行压测) |
config.logdir |
/tmp/ | waf插件记录日志的目录, 必须指定且nobody用户可写 |
config.urldeny |
off | 是否拦截攻击, on:拦截, off:不拦截 |
config.urlmatch |
off | 是否检查url, on:检查, off:不检查 |
config.argsmatch |
on | 是否检查url参数, on:检查, off:不检查 |
config.postmatch |
on | 是否检查post参数, on:检查, off:不检查 |
config.uamatch |
on | 是否检查User-Agent, on:检查, off:不检查 |
config.cookiematch |
on | 是否检查cookie, on:检查, off:不检查 |
在某一个service上服务上启用插件
$ curl -X POST http://kong:8001/services/{service}/plugins \
--data "name=kong-waf" \
--data "config.blacklist=10.129.7.236,10.129.7.235" \
--data "config.openwaf=on" \
--data "config.logdir=/var/log/kong/waf/" \
--data "config.urldeny=on" \
--data "config.urlmatch=off" \
--data "config.argsmatch=on" \
--data "config.postmatch=on" \
--data "config.uamatch=on" \
--data "config.cookiematch=on"service: 服务的名字或id值
在某一个route上启用插件
$ curl -X POST http://kong:8001/routes/{route_id}/plugins \
--data "name=kong-waf" \
--data "config.blacklist=10.129.7.236,10.129.7.235" \
--data "config.openwaf=on" \
--data "config.logdir=/var/log/kong/waf/" \
--data "config.urldeny=on" \
--data "config.urlmatch=off" \
--data "config.argsmatch=on" \
--data "config.postmatch=on" \
--data "config.uamatch=on" \
--data "config.cookiematch=on"route_id: 服务的名字或id值
在consumer上启用插件
$ curl -X POST http://kong:8001/plugins \
--data "name=kong-waf" \
--data "consumer_id={consumer_id}" \
--data "config.blacklist=10.129.7.236,10.129.7.235" \
--data "config.openwaf=on" \
--data "config.logdir=/var/log/kong/waf/" \
--data "config.urldeny=on" \
--data "config.urlmatch=off" \
--data "config.argsmatch=on" \
--data "config.postmatch=on" \
--data "config.uamatch=on" \
--data "config.cookiematch=on"consumer_id: 服务的名字或id值
全局插件与服务、路由、消费者或API无关, 会对所有请求起作用.
$ curl -X POST http://kong:8001/plugins \
--data "name=kong-waf" \
--data "config.blacklist=10.129.7.236,10.129.7.235" \
--data "config.openwaf=on" \
--data "config.logdir=/var/log/kong/waf/" \
--data "config.urldeny=on" \
--data "config.urlmatch=off" \
--data "config.argsmatch=on" \
--data "config.postmatch=on" \
--data "config.uamatch=on" \
--data "config.cookiematch=on"$ curl -X POST http://kong:8001/plugins \
--data "name=kong-waf" \
--data "config.blacklist=10.129.7.236,10.129.7.235" \
--data "config.openwaf=off"更改插件的某一个配置只需要指定插件名(或插件id)和对应的配置即可(修改黑名单)
$ curl -X PATCH http://kong:8001/routes/{route_id}/plugins \
--data "name=kong-waf" \
--data "config.blacklist=10.129.7.2"$ curl -X DELETE --url http://kong:9001/plugins/{plugin_id}/