云原生网关如何实现安全防护能力

news2024/11/26 20:24:34

作者:刘晓瑞(钰诚)

云原生网关:将安全、流量和微服务三合一

作为面向南北向的公网网关,使用 Waf 防护异常流量是很常规的需求,而且随着互联网环境变得越来越复杂,用户对防护的诉求是持续增强的,常规做法是将流量先接入 Waf 安全网关,过滤后再将流量转发给流量网关,最后到达微服务网关,一个典型的多层网关架构如下图所示:

在这里插入图片描述

在这个架构中,用 WAF 网关实现安全能力,Ingress 网关实现集群入口网关能力(非 K8s 场景或会部署一层 Nginx),SCG(Spring Cloud Gateway) 实现微服务网关能力。这样的架构下,需要对每一层网关都进行容量评估,每一层网关都是潜在的瓶颈点,都可能需要进行扩容。这样造成的资源成本和运维人力成本都是巨大的。并且每多一层网关,就多一层可用性风险。一旦出现可用性问题,多层网关会导致问题定位复杂度显著上升,对应的平均故障恢复时间(MTTR)将大幅增加。

云原生网关提出了将安全、流量、微服务网关三合一的概念,架构如下图所示:

在这里插入图片描述

采用云原生网关三合一的架构,可以显著降低成本,并提高系统整体可用性。同时这也符合 DevSecOps 的微服务演进趋势,微服务开发者可以更多地从业务接口视角关注安全性,而不是采用所有路由一刀切的 WAF 防护模式。

云原生网关技术架构演进的过程如下图所示:

在这里插入图片描述

技术架构演进的背后是组织架构演进,这也是微服务 DevOps 一直在强调的,要围绕开发者为核心,从而提升微服务开发效率。向 DevSecOps 演进并没有捷径,依然需要开发角色和运维角色之间的双向奔赴,打破传统开发与运维之间的壁垒,形成从开发、部署、安全运营这样一个全功能化的敏捷团队。

云原生网关安全防护实践

云原生网关以 WAF 插件形式提供安全能力,实现了基于 ModSecurity 的规则防护引擎,可以根据用户配置的规则屏蔽可疑请求,并支持 OWASP CRS,为站点提供基础的防护功能。

插件配置说明

插件使用简单,并且支持路由级/域名级细粒度防护,配置字段包括:

名称数据类型填写要求默认值描述
useCRSbool选填false是否开启 OWASP CRS,详情可参考 coreruleset [ 1]
secRulesarray of string选填-用户自定义的 waf 防护规则,语法规则可参考 ModSecurity 中文手册 [ 2]

配置示例如下:

  1. 启用默认配置,进行拦截
useCRS: true
  1. 启用默认配置,仅观测,不拦截
useCRS: true
secRules:
  - "SecRuleEngine DetectionOnly"
  1. 自定义防护规则
useCRS: true
secRules: 
  - "SecRule REQUEST_URI "@streq /admin" "id:101,phase:1,t:lowercase,deny""
  - "SecRule REQUEST_BODY "@rx maliciouspayload" "id:102,phase:2,t:lowercase,deny""

根据该配置,以下请求将被禁止访问:

curl http://example.com/admin
curl http://example.com -d "maliciouspayload"
  1. 对特定路由或域名开启
useCRS: true
secRules: 
  - "SecRule REQUEST_URI "@streq /admin" "id:101,phase:1,t:lowercase,deny""
  - "SecRule REQUEST_BODY "@rx maliciouspayload" "id:102,phase:2,t:lowercase,deny""
_rules_:
- _match_route_:
    - "route-1"
  secRules:
    - "SecAction "id:102,phase:1,deny""
- _match_domain_:
    - "*.example.com"
    - test.com
  secRules:
    - "SecAction "id:102,phase:1,pass""

此例 match_route 中指定的 route-1 即在创建网关路由时填写的路由名称,当匹配到这两个路由时,将使用此段配置;此例 match_domain 中指定的 *.example.com 和 test.com 用于匹配请求的域名,当发现域名匹配时,将使用此段配置;配置的匹配生效顺序,将按照 rules 下规则的排列顺序,匹配第一个规则后生效对应配置,后续规则将被忽略。

开启插件

选择一个网关实例,点击插件市场,搜索 waf,点击进入插件配置界面:

在这里插入图片描述

在控制台填写 WAF 防护规则,启动 WAF 插件:

在这里插入图片描述

可以在插件日志一栏查看插件产生的日志(下图为 shell 注入攻击时 WAF 插件产生的日志):

在这里插入图片描述

攻防示例

向网关发送简单的 web 攻击请求,示例如下:

  1. shell 注入攻防示例

在这里插入图片描述

  1. sql 注入攻防示例

在这里插入图片描述

  1. 远程文件包含(RFI)攻防示例

在这里插入图片描述

  1. xss 攻防示例

在这里插入图片描述

  1. php 注入攻防示例

在这里插入图片描述

整体防护能力评估

GoTestWAF [ 3] 是一款 API 和 OWASP 攻击模拟工具,支持包括 REST、GraphQL、gRPC、WebSockets、SOAP、XMLRPC 等多种 API 协议,旨在评估 Web 应用安全解决方案,如 API 安全代理、Web 应用防火墙(WAF)、IPS、API 网关等。该工具使用放置在 HTTP 请求不同部分的编码有效负载生成恶意请求:其正文、标头、URL 参数等,涵盖了常见的各种攻击类型,多种攻击测试结果如下图所示,测试结果表明 WAF 插件能够有效检测各种攻击类型的非法请求。

在这里插入图片描述

GoTestWAF 提供了基于 ModSecurity 的四个 benchmark,benchmark 中 paranoia 表示防护等级,数值越大,防护等级越高,overall score 得分越高。WAF 插件的 overall score 为 74.1,超过了防护等级最高的 benchmark,表明插件具有较好的防护能力。

在这里插入图片描述

阿里云 Web 应用防火墙

云原生网关提供的免费 WAF 插件仅支持基础的防护规则,如您有更高的防护需求,可选购阿里云 Web 应用防火墙 [ 4] ,在拥有更高的防护能力、更高的性能之外,还能为您的应用购买一份保险。

在 WAF 控制台 [ 5] 可以管理防护规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NdTLRk4V-1689609069956)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/703b1eb7a3514b76b28212e1654d2b6b~tplv-k3u1fbpfcp-zoom-1.image “image”)]

在接入管理一栏可以配置网关实例的接入:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IZEL4ef-1689609069956)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/838e0929eca5442ea686241e6dc4d79c~tplv-k3u1fbpfcp-zoom-1.image “image”)]

也可以在网关实例处配置接入 WAF:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3JWntw6-1689609069956)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/343d4f7d020846e98bb6f011b51da03c~tplv-k3u1fbpfcp-zoom-1.image “image”)]

相关链接:

[1] coreruleset

https://github.com/coreruleset/coreruleset/tree/v3.3.2?spm=5176.mse-ops.0.0.ef3f142fSPw8XV&file=v3.3.2

[2] ModSecurity 中文手册

https://help.aliyun.com/document_detail/121053.html

[3] GoTestWAF

https://github.com/wallarm/gotestwaf

[4] 阿里云 Web 应用防火墙

https://help.aliyun.com/document_detail/446889.html

[5] WAF 控制台

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fyundun.console.aliyun.com%2F%3Fp%3Dwafnew

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

需要我怎么帮你?关于维护Nutsdb开源社区的思考

背景 近来有人问我打算怎么继续维护Nutsdb社区,他们当中不乏有开源项目的狂热爱好者,发起了好几个几千star的开源项目,也有对Nutsdb感兴趣的,想来问问后续的计划。这不禁让我回想到从刚开始参与这个项目到最近这段时间一个人维护…

三维重建的工作

文章目录 一、北京:二、广州:三、深圳: 一、北京: 链接 三维重建技术是自动驾驶领域4D真值数据生成的核心基础能力。融合LiDAR、Camera、IMU、轮速计等传感器数据像BlockNeRF一样重建城市级别逼真精细的三维场景,将…

ArcGIS Pro 矢量数据的空间校正

GIS 数据通常来自多个源。当数据源之间出现不一致时,有时需要执行额外的工作以将新数据集与其余数据进行整合。相对于基础数据而言,一些数据会在几何上发生变形或旋转。 在编辑环境中,空间校正提供用于对齐和整合数据的交互式方法。 空间校正可执行的一些任务包括:将数据…

SQLite数据库安装

安装方式一: sudi apt-get install sqlite 安装方式二: https://www.sqlite.org/download.html 1. 把下载的文件 sqlite-autoconf-3420000.tar.gz 上传到开发板 2. tar xvf sqlite-autoconf-3420000.tar.gz 解压 3. cd sqlite-autoconf-3420000 进入…

[Mysql] 索引失效的情况详解~

一条查询语句走了索引和没走索引的查询效率是非常大的,但有很多情况导致我们的索引失去效果。这里总结一下常见的索引失效的情况~ 数据准备 我们准备一张简单的学生来做演示。 CREATE TABLE student (id int NOT NULL COMMENT id,name varchar(255) COLLATE utf8…

基于weka手工实现支持向量机smo算法

关于svm机器学习模型,我主要学习的是周志华老师的西瓜书(《机器学习》); 但是西瓜书中对于参数优化(即:Sequential Minimal Optimization,smo算法)部分讲解的十分简略,看…

Linux运维面试题(三)之shell编程类

Linux运维面试题(三)之shell编程类 文本截取有一个b.txt文本,要求将所有域名截取出来,并统计重复域名出现的次数统计当前服务器正在连接的IP地址,并按连接次数排序(cut不能以空格做分隔符) 随机…

Vis相关的期刊会议

中国计算机学会推荐国际学术会议和期刊目录 文档, 下载 link:CCF推荐国际学术刊物目录-中国计算机学会 一.可视化方向文章 1.IEEE VIS,是由 IEEE Visualization and Graphics Technical Committee(VGTC) 主办的数据可视化领域的顶级会议&a…

VMware桥接模式无法识别英特尔AX200无线网卡解决办法

1.先到英特尔网站下载最新驱动,更新网卡驱动适用于 Intel 无线网络卡的 Windows 10 和 Windows 11* Wi-Fi 驱动程序 2.到控制面板查看无线网卡属性是否有下图组件 没有的话,依次操作 安装---服务---添加---从磁盘安装----浏览--进入VMware安装目录&…

Linux系统的目录结构

目录 一、Linux系统使用注意 1、Linux严格区分大小写 2、Linux文件"扩展名" 3、Linux中所有内容以文件形式保存 4、Linux中存储设备都必须在挂载之后才能使用 二、目录结构 1、Linux分区与Windows分区 2、Linux系统文件架构 3、Linux系统的文件目录用途 一、…

Docker【安装与基本使用】

【1】Docker的安装 注意:如果之前安装过docker其他版本,请删除干净。 docker-01 10.0.0.51 2G docker-02 10.0.0.52 2G docker-01 [rootdocker-01 ~]# cp -rp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp: overwrite ‘/etc/localtime’? …

(中等)LeetCode146 LRU 缓存 Java

本题有两种实现操作&#xff0c;需要使用到一个哈希表和一个双向链表。在Java语言中&#xff0c;有一种结合了哈希表和双向链表的数据结构&#xff0c;LinkedHashMap import java.util.LinkedHashMap; import java.util.Map;class LRUCache extends LinkedHashMap<Integer,…

网络运维能转型到系统运维吗?

很多网工处于刚起步的初级阶段&#xff0c;各大公司有此专职&#xff0c;但重视或重要程度不高&#xff0c;可替代性强&#xff1b;小公司更多是由其它岗位来兼顾做这一块工作&#xff0c;没有专职&#xff0c;也不可能做得深入。 现在开始学习入门会有一些困难&#xff0c;不…

【深度学习】日常笔记13

前向传播&#xff08;forward propagation或forward pass&#xff09;指的是&#xff1a;按顺序&#xff08;从输⼊层到输出层&#xff09;计算和存储神经⽹络中每层的结果。 绘制计算图有助于我们可视化计算中操作符和变量的依赖关系。下图是与上述简单⽹络相对应的计算图&…

【C语言】深入了解分支和循环语句

&#x1f341; 博客主页:江池俊的博客 &#x1f341;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; &#x1f4ab;“每一天都是一个全新的机会…

【优选算法题练习】day7

文章目录 一、35. 搜索插入位置1.题目简介2.解题思路3.代码4.运行结果 二、69. x 的平方根1.题目简介2.解题思路3.代码4.运行结果 三、852. 山脉数组的峰顶索引1.题目简介2.解题思路3.代码4.运行结果 总结 一、35. 搜索插入位置 1.题目简介 35. 搜索插入位置 给定一个排序数组…

浅谈自动化测试工具 Appium

目录 前言&#xff1a; 一、简单介绍 &#xff08;一&#xff09;测试对象 &#xff08;二&#xff09;支持平台及语言 &#xff08;三&#xff09;工作原理 &#xff08;四&#xff09;安装工具 二、环境搭建 &#xff08;一&#xff09;安装 Android SDK &#xff0…

08 - 线性表的类型定义 - 循环双向链表

双向链表可以分为普通双向链表(前面我们已经学习过了)与循环双向链表。 循环双向链表的定义 循环双向链表就是在双向链表的基础之上,头结点的Prev指向尾结点,尾结点的Next指针则指向头结点,从而形成闭环结构。 内存中的结构 双向链表与循环双向链表的区别 双向链表 …

Vue项目中你是如何解决跨域的呢?

一、跨域是什么 跨域本质是浏览器基于同源策略的一种安全手段 同源策略&#xff08;Sameoriginpolicy&#xff09;&#xff0c;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能 所谓同源&#xff08;即指在同一个域&#xff09;具有以下三个相同点 协议相同&…

微信小程序开发入门指南

微信小程序商城是一种方便快捷的电商平台&#xff0c;让商家能够在微信平台上展示和销售自己的商品。本文将详细介绍如何使用乔拓云平台创建自己的小程序商城。即使是对编程没有任何基础的小白用户&#xff0c;也可以轻松创建自己的微信小程序商城。 第一步&#xff0c;登录乔拓…