打造一款开源的WAF网关

_U2_ · · 3136 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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

【背景】

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

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

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

【对标与产品方案设计】

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

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

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

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

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

【特色】

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

1.不要安装Agent

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

2.支持HTTPS

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

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

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

【备注】

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



欢迎关注微信公众号: 网络安全生命周期 ,共同探讨网络安全体系建设~


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:_U2_

查看原文:打造一款开源的WAF网关

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3136 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传