Kong的一大特色就在于强大的可扩展性,具体实现方式就是插件。一来Kong已经提供了很多内置的插件,二来我们也可以使用Lua语言自定义开发插件。今天,我们就来了解一些常用的安全防护插件。
关于安全防护插件
我们在实际应用往往会有一些场景需要限制IP访问和CORS配置,来提高应用访问的安全性。
在Kong中就提供了一些内置的安全防护的插件:
- IP限制
- 机器人检测
- CORS
IP限制
此插件主要用于限制非白名单中的IP来源对服务进行访问,或者禁止黑名单中的IP来源进行访问。它支持通过CIDR的方式设置IP范围。
我们可以根据下面的步骤开启IP限制插件:
首先,找到需要开启插件的service,并进入到plugins页面点击ADD PLUGIN按钮。
其次,找到Security类别,然后找到Ip Restriction插件,点击ADD PLUGIN按钮。
然后,配置允许的白名单的IP地址,这里配置的是一个范围地址,即192.168.10.1~192.168.10.255的这个网段内的所有主机。
此外,我们还可以设置黑名单,但需要注意的是:白名单和黑名单是互斥的,不能同时使用这两个配置。
最后,我们通过PostMan来验证一下,当客户端主机不在白名单范围列表时,会直接返回403状态码和配置的message信息。
而当客户端IP地址符合条件时,则会正常转发到上游服务。
机器人检测
此插件主要用于防御一些常见的机器人攻击,比如 爬虫、Web测试工具、漏洞扫描工具等,具体实现就是通过将自定义客户端请求标识加入白名单和黑名单即可。
我们可以根据下面的步骤开启机器人检测插件:
首先,找到需要开启插件的service,并进入到plugins页面点击ADD PLUGIN按钮。
其次,找到Security类别,选择Bot Detection插件。
然后,在弹出配置对话框中配置黑名单如下:
这里的黑名单会根据User-Agent头部检查,我们配置了一些常见的扫描工具的头部在里边,例如IBM的Security AppScan和SQL注入工具sqlmap等。
最后,我们可以通过安装一个扫描工具如IBM Security AppScan对指定域名URL来进行一次Full Scan扫描来验证,我们会发现全部返回了403 Forbidden的状态码响应。这里,我们就不再演示了。
CORS
CORS即Cross-Origin Resource Sharing,跨站资源共享,对于做Web系统的开发的我们应该很熟悉了,它是应对浏览器同源策略的一个解决方案。
我们可以根据下面的步骤开启机器人检测插件:
首先,找到需要开启插件的service,并进入到plugins页面点击ADD PLUGIN按钮。
其次,找到Security类别,选择Cors插件。
在弹出的配置对话框中进行配置:
其中,我们需要关注以下几个配置选项:
(1)origins:指定允许的域名列表,即Access-Control-Allow-Origin。如果允许所有的来源,可以设置为“*"。这里设置为".",表示集成该Service指定的域名,这里Service配置的域名是api.edisontalk.cn。
(2)headers:指定允许的header头列表,即Access-Control-Allow-Headers,用于预检请求时让插件知道哪些http头在实际请求时将被允许使用。
(3)methods:指定允许的请求方法列表,即Access-Control-Allow-Methods,实际场景中可以配置为具体的GET或POST。
如果没有通过指定的域名访问则会CORS错误信息,Kong会直接返回错误信息"... has been blocked by CORS policy”表示无法正常访问。
参考资料
闫观涛,《Kong入门与实践-基于Nginx和OpenRestry的云原生微服务网关》