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的云原生微服务网关》

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

Kong入门学习实践(9)安全防护插件的更多相关文章

  1. Nacos入门学习&实践

    文中涉及到了一些模块代码没有给出,我一并上传到github了,可以整个项目clone下来进行调试. 地址:https://github.com/stronglxp/springcloud-test 1 ...

  2. 万字长文:SpringCloud gateway入门学习&实践

    官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/# ...

  3. 《深度学习框架PyTorch:入门与实践》的Loss函数构建代码运行问题

    在学习陈云的教程<深度学习框架PyTorch:入门与实践>的损失函数构建时代码如下: 可我运行如下代码: output = net(input) target = Variable(t.a ...

  4. 入门python:《Python编程从入门到实践》中文PDF+英文PDF+代码学习

    入门python推荐学习久负盛名的python入门书籍<Python编程从入门到实践>. 书中涵盖的内容是比较精简的,没有艰深晦涩的概念,最重要的是每个小结都附带有"动手试一试& ...

  5. 《Python编程:从入门到实践》基础知识部分学习笔记整理

    简介 此笔记为<Python编程:从入门到实践>中前 11 章的基础知识部分的学习笔记,不包含后面的项目部分. 书籍评价 从系统学习 Python 的角度,不推荐此书,个人更推荐使用< ...

  6. 学习资源 Docker从入门到实践 pdf ,docker基础总结导图

    学习资源 Docker从入门到实践 pdf ,docker基础总结导图 Docker从入门到实践 pdf 云盘地址:https://pan.baidu.com/s/1vYyxlW8SSFSsMuKaI ...

  7. 《Terraform 101 从入门到实践》 第二章 Providers插件管理

    <Terraform 101 从入门到实践>这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看. 不怕出身低,行行出状元. 插 ...

  8. 初探Electron,从入门到实践

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.   在开始之前,我想您一定会有这样的困惑:标题里的Electron ...

  9. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第一天】

    本人做过一年的MATLAB编程和简单维护过VB和C++的项目.是跟着网上获得的黑马的Java双元视频课来自学入门Java知识和常用框架的使用. 淘淘商城(SpringMVC+Spring+Mybati ...

  10. 《Terraform 101 从入门到实践》 Terraform在公有云GCP上的应用

    <Terraform 101 从入门到实践>这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看. Terraform支持的公有 ...

随机推荐

  1. android中大咖:TlistView

    d的android中的Tlistview相当于cxGrid,其开发使用中的主咖地位至高无上. 可是如何高效使用快速实现的需求呢?需要的话补官方的教程 上图: GOODLUCK!

  2. AndrodStudio构建时报错Could not find com.android.tools.build:gradle:xxx

    检查配置的版本号在maven仓库里有没有. maven仓库地址: https://repo1.maven.org/maven2/com/android/tools/build/gradle/ 选择需要 ...

  3. Springboot连接Greenplum,分页查询

    1.springboot分页查询greenplum数据报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.ap ...

  4. UGUI 事件穿透使Scrollrect 滚动

    public class TouchPenetrate : MonoBehaviour, IPointerClickHandler,IBeginDragHandler,IDragHandler,IPo ...

  5. Asp.net core基础(一)Entity FrameworkCore的增删查改

    一.EntityFramework Core的介绍 EntityFramework Core是.net core中的ORM(object relational mapping[对象关系映射])框架,它 ...

  6. 前端速成之——Script

    Script 1-引入js和函数调用 function函数:必然存在一个返回值,绝对不会书写 void,要么返回 undefine,要么返回 return 的数据 function etoak(val ...

  7. Java对象相等判断

    你是谁啊?你是不是我??(⊙_⊙)? 我们知道比较对象相等可以使用equal方法(来自Object对象的方法) 但是你打开Object的equal方法你会发现: public boolean equa ...

  8. 代码随想录第二十四天 | Leecode 93. 复原IP地址 、78. 子集、 90.子集II

    Leecode 93. 复原IP地址 题目描述 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2 ...

  9. 【MOOC】华中科技大学操作系统慕课答案-期末测试题

    文章目录 单选题 填空题 判断题 主观题 单选题 1 ‎当操作系统处理缺页中断的时候,CPU处在 . A. 用户态 √B. 核态 C. 不确定的状态 D. 空闲状态 2 ‌操作系统的用户界面可以分为两 ...

  10. Mysql 实现 rank 和 != 问题

    我一直相信, 人是能预测未来的, 这应该是前几年看弗洛伊德, 荣格的一些心理学书, 给我的一些感受, 有个片段是关于做梦的, 一个人梦见子弹穿过他自己的头颅, 结果不久, 他就去世了. 这个片段当时给 ...