1. 介绍:
Coraza有大量的内置安全规则,包括 OWASP Top 10,同时将错误警报降至最低。CRS保护免受许多常见攻击类别的攻击,包括SQL注入(SQLi)、跨站点脚本(XSS)、PHP和Java代码注入、HTTPoxy、Shellshock、脚本/扫描器/机器人检测以及元数据和错误泄漏。 对于个人开发者和工作室可以快速搭建出自己的防火墙,作为基础的防护.
2. 定海-实现WAF内核
拉取Coraza核心内置规则集
wget https://raw.githubusercontent.com/corazawaf/coraza/v3/dev/coraza.conf-recommended -O coraza.conf
git clone https://github.com/coreruleset/coreruleset
可以将拉取的规则集的相对路径存入etcd中
内核服务每次启动时,从etcd中获取到相关策略,从策略中读取策略应用的规则组,在加载规则,完成内核中初始化的WAF实列,
接入的网站在访问时,根据etcd中保存的此网站应用的策略,在map集合中读取对应的waf实列,检测访问的流量,检测完无任何问题后,通过反向代理,回源至真正的后端地址.
targetURL, err := url.Parse(fmt.Sprintf("http://%s", realAddr))if err != nil {http.Error(rw, err.Error(), http.StatusInternalServerError)return}req.Body = io.NopCloser(strings.NewReader(string(requestBody))) /* 重置请求体 */proxy := httputil.NewSingleHostReverseProxy(targetURL)proxy.ServeHTTP(rw, req)
3.利用etcd实现热更新策略,规则组,规则
此处仅简单介绍一下实现思路:
内核服务启动后,利用etcd监听策略/规则组/规则相关的键 , 当用户在上层服务修改策略/规则组/规则时,根据map之间的映射关系 , 重新加载影响到的策略 , 更新策略信息完成之后, 根据策略ID,更新waf实列. 这样可以做到用户在上层服务更新规则 , 不必重新启动内核,即可更新底层的WAF实列.
项目开源地址: YFGo/dinghai_waf: 定海
目标: 支持用户自定义规则 , 目前仅支持coraza内置的防护规则