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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 云原生网关如何实现安全防护能力

作者:刘晓瑞(钰诚)


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


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



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


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



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


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



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


云原生网关安全防护实践


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


插件配置说明

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


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


配置示例如下:

1. 启用默认配置,进行拦截


useCRS: true


2. 启用默认配置,仅观测,不拦截


useCRS: true
secRules:
  - "SecRuleEngine DetectionOnly"


3. 自定义防护规则


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"


4. 对特定路由或域名开启


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 注入攻防示例


2. sql 注入攻防示例


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


4. xss 攻防示例


5. 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]可以管理防护规则:



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



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



相关链接:

[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

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
Dubbo Java 应用服务中间件
深入了解Spring Cloud Alibaba Dubbo
在现代分布式系统开发中,构建高性能、可伸缩性和弹性的微服务架构变得越来越重要。Spring Cloud Alibaba Dubbo(简称Dubbo)是一个开源的分布式服务框架,可以帮助开发者构建强大的微服务架构,具备负载均衡、服务治理、远程调用等强大功能。本文将深入介绍Spring Cloud Alibaba Dubbo,帮助你理解它的核心概念、工作原理以及如何在你的项目中使用它。
|
SpringCloudAlibaba 网络协议 Cloud Native
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。
12931 2
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
|
Kubernetes 负载均衡 应用服务中间件
【K8S系列】第十三讲:Ingress详解
【K8S系列】第十三讲:Ingress详解
6505 0
|
6月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
1265 13
Spring Cloud Alibaba:一站式微服务解决方案
|
6月前
|
Cloud Native 安全 Java
铭师堂的云原生升级实践
铭师堂完整经历了云计算应用的四个关键阶段:从”启动上云”到”全量上云”,再到”全栈用云”,最终达到”精益用云”。通过 MSE 云原生网关的落地,为我们的组织带来了诸多收益,SLA 提升至100%,财务成本降低67%,算力成本降低75%,每次请求 RT 减少5ms。
铭师堂的云原生升级实践
|
10月前
|
负载均衡 Java Spring
Ribbon的超时配置会覆盖OpenFeign的超时配置吗
该文章详细分析了OpenFeign与Ribbon之间的超时配置关系,解释了Ribbon如何覆盖OpenFeign的默认超时配置,并探讨了OpenFeign超时配置的动态修改方案。
|
SQL 监控 Cloud Native
无需编写一行代码,实现任何方法的流量防护能力
微服务的稳定性一直是开发者非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战。疫情期间,大家可能都经历过以下的场景: 1、线上预约购买口罩时瞬间洪峰流量导致系统超出最大负载,load 飙高,用户无法下单; 2、在线选课时同一时刻提交选课的请求过多,系统无法响应; 3、在线办公/教学时同时在线会议的用户过多,会议比较卡; 这些可用性下降的场景会严重影响用户体验,所以我们需要预先通过一些手段来提前对不稳定的因素进行防护,同时在突发流量的情况下我们也要具备快速止损的能力。
无需编写一行代码,实现任何方法的流量防护能力
|
SpringCloudAlibaba Cloud Native 安全
SpringCloudAlibaba:4.2云原生网关higress的基本使用
SpringCloudAlibaba:4.2云原生网关higress的基本使用
300 0
|
运维 Cloud Native 测试技术
极氪汽车 APP 系统云原生架构转型实践
极氪汽车 APP 系统云原生架构转型实践
2128 54
极氪汽车 APP 系统云原生架构转型实践
|
缓存 负载均衡 算法
【Spring Cloud系列】-负载均衡(Load Balancer,LB)
【Spring Cloud系列】-负载均衡(Load Balancer,LB)
1692 1