基于Golang打造一款开源的WAF网关

简介: 基于Golang打造的应用安全网关,具备CC防御、WAF(Web应用防火墙)功能及组合策略配置,天然支持HTTPS(符合PCI-DSS认证要求),无需Agent,私钥加密存储在数据库,提供负载均衡和统一的Web化管理入口。

本文首发于作者的微信公众号:网络安全生命周期

原文链接: 打造一款开源的WAF网关 

【背景】

272

在互联网行业,Google将安全做到基础设施里面,素来是各大公司学习的榜样,在Web方面,通过GFE (Google Front-End) 统一对外发布,业务只需要在GFE登记,GFE就会调取正确的证书,保障用户到GFE的TLS连接安全。

152

Microsoft在Web方面,有一款叫做Azure Application Gateway的产品,提供了统一的Web路由、负载均衡,以及WAF(Web应用防火墙)功能。

遗憾的是,这几款产品均不能用于私有化部署,Google Front-End 和 Azure Application Gateway只服务于他们自身业务以及他们自己的云客户。想要使用他们的产品,得使用他们的云服务,不然就只能望洋兴叹了。

【对标与产品方案设计】

鉴于此,笔者希望借鉴GFE和Azure应用网关,打造一款这样的应用安全基础设施级产品,用于自己个人网站的防御,这款产品需要具备:

1.统一的网络入口,可以有多个节点,配合负载均衡进行调度,即应用网关(Application Gateway);

700

2.WAF (Web应用防火墙) 功能,可拦截常见的Web入侵行为(如SQL注入/命令注入/XSS/Webshell上传或连接)、数据泄露事件等;

上图中红色的叉叉部分表示拦截恶意攻击行为。

635

3.可应对CC攻击及简单的刷单场景,达到设定阈值时能够拦截或展示验证码。

550

【特色】

当然,上面这些是基本的功能。笔者还希望这是一款有特点、差异化的产品:

1.不要安装Agent

Agent维护起来比较麻烦,用浏览器配置可以更简单,比如配置应用:

636

2.支持HTTPS

还要能够把证书管理起来,把私钥保护起来,不再将证书文件、私钥文件直接明文的存放在服务器某个目录下(防止黑客偷走私钥);只让网关管理人员申请和配置证书,业务人员不用接触证书文件就可以启用HTTPS。

673

3.联动

很多WAF的一条策略只能检查一个地方(如GET或POST参数值),如果请求需要结合响应共同来判定 (或多个组合条件),就做不到了,这一点一定要突破,做到多个检查点可组合,特别是请求(Request)和响应(Response)能够关联(组合)起来。

4.非法域名拦截

曾经有人用fuck_your_domain.com 这样的域名指向your_domain.com 网站,如果服务器配置不当,有可能会正常响应请求,给公司带来公关风险。所以,当非法域名指向过来的时候,应该拒绝响应。

5.证书质量

不是所有的HTTPS都是安全的,错误配置、算法的选用均有可能踩坑,如SSL 1.0, SSL 2.0, SSL 3.0以及TLS 1.0 均已出现漏洞。典型的,如果您的业务涉及到资金支付,PCI-DSS认证会对证书质量有特别的要求,如必须使用TLS 1.1或以上的协议版本、必须使用前向安全算法(Forward Security)用于保障安全的密钥交换等。因此,网关默认就需要启用安全保障。

【开源】

是的,笔者较早前利用周末陪孩子上课的时间,构建了这样一个只有基本功能的版本(Janusec Application Gateway),并用在个人网站上。现在跟大家分享一下:

https://github.com/Janusec/janusec 

这是一款基于Golang打造的应用安全网关,具备CC攻击防御、WAF(Web应用防火墙)功能及组合策略配置,天然支持HTTPS(符合PCI-DSS认证要求),无需Agent,私钥加密存储在数据库,提供负载均衡和统一的Web化管理入口。

还在继续完善过程中,欢迎star、fork、pull request、提交issue,或下载release体验,共同提升应用安全防御能力。

【备注】

该产品并不能解决所有的安全问题,不能替代抗DDoS攻击产品,也不能替代HIDS产品,更不能代替日常的安全运营工作。但当你打算从零开始构建立体的安全防御体系(特别是应用安全防御体系)的时候,能够在关键的路径上,切断典型的入侵尝试,挡住大部分探测payload,大幅提高入侵难度,同时从一开始就能够利用此作为网关基础设施推广使用HTTPS,保护外网数据传输安全。

目录
相关文章
|
2月前
|
资源调度 监控 API
开源API网关APISIX分析与使用
开源API网关APISIX分析与使用
172 0
|
2月前
|
JSON 缓存 应用服务中间件
开源API网关APISIX源码分析(一)
开源API网关APISIX源码分析
96 0
|
2月前
|
传感器 监控 物联网
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
201 3
|
2月前
|
网络协议 Go 数据安全/隐私保护
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
253 2
|
1月前
|
Web App开发 监控 中间件
【开源视频联动物联网平台】视频接入网关的用法
【开源视频联动物联网平台】视频接入网关的用法
38 1
|
1月前
|
传感器 边缘计算 物联网
【开源视频联动物联网平台】为什么需要物联网网关?
【开源视频联动物联网平台】为什么需要物联网网关?
28 2
|
2月前
|
缓存 安全 应用服务中间件
开源API网关APISIX源码分析(二)
开源API网关APISIX源码分析(二)
59 0
|
4月前
|
NoSQL Java 关系型数据库
开源系统推荐短信网关
开源系统推荐短信网关
62 0
|
9月前
主流开源网关比较
主流开源网关比较
78 0
|
9月前
|
Kubernetes Cloud Native 应用服务中间件
对比 5 个开源网关项目,这家 SaaS 企业如何统一网关架构
对比 5 个开源网关项目,这家 SaaS 企业如何统一网关架构
44389 10