定海WAF网站防火墙适用于个人开发者,工作室,小公司的开源防火墙.保护网站安全,降低网站漏洞带来的数据泄露等风险.致力于将定海开发为一个更加灵活,性能高效,更加安全的防火墙.
初衷:
1. **便捷: **如果是单纯的从自己的日志或者nginx,apache日志等查看信息不方便 , 不知道自己的网站到底谁在访问,请求了什么. waf在网站或者API防护可以更方便用户查询这些信息,做出及时的处理.
2. **DIY: **在开发过程中一些特定的功能加入自己的想法.
v1.0.1 开发目标:
- 开发前端UI界面
- 实现用户自定义防护规则功能
- 完成日志插件功能开发
项目上层服务使用kratos框架进行开发,内核服务使用coraza waf开源引擎,提高内核开发效率.
需要掌握的知识:
- golang 【置顶】Go语言学习之路/Go语言教程 | 李文周的博客
- kratos 简介 | Kratos
- resetful 重新认识RESTful | 少个分号
- grpc Basics tutorial | Go | gRPC
- proto3+protobufvalidate Language Guide (proto 3) | Protocol Buffers Documentation
- coraza waf OWASP Coraza - Enterprise-grade open source web application firewall library
- mysql + gorm GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
- redis
- kafka
- etcd
- clickhouse 什么是ClickHouse? | ClickHouse Docs
修改DNS,让域名解析到反向代理服务器。所有流量经过反向代理进行检测,检测无问题之后再回源至真正的Web服务器。
- 优点
- 隐藏真正的后端web服务地址
- 缺点
- 权限过高,容易造成不可预计的风险
尽可能的保证waf内核的轻量级,避免出现过多的冗余功能,保证waf内核的稳定性. 用户通过上层服务去设置防护配置,利用etcd的watch属性进而修改内置中waf实列的配置.
├─api #/ 下面维护了微服务使用的proto文件以及根据它们所生成的go文件
│ ├─dashBorad # 数据看板
│ │ └─v1
│ ├─user # 用户相关服务
│ │ └─v1
│ └─wafTop # 防护配置
│ └─v1
├─app # app
│ ├─dashBorad # 数据看板相关服务
│ │ ├─cmd # // 整个项目启动的入口文件
│ │ │ └─dashBorad
│ │ ├─configs
│ │ ├─internal // 该服务所有不对外暴露的代码,通常的业务逻辑都在这下面,使用internal避免错误引用
│ │ │ ├─biz // 业务逻辑的组装层
│ │ │ ├─conf // 内部使用的config的结构定义,使用proto格式生成
│ │ │ ├─data // 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。
│ │ │ ├─server // http和grpc实例的创建和配置
│ │ │ └─service // 实现了 api 定义的服务层,类似 DDD 的 application 层
│ │ └─third_party
│ │ ├─errors
│ │ ├─google
│ │ │ ├─api
│ │ │ └─protobuf
│ │ │ └─compiler
│ │ ├─openapi
│ │ │ └─v3
│ │ └─validate
│ ├─user # 用户相关服务
│ │ ├─cmd // 整个项目启动的入口文件
│ │ │ └─user
│ │ ├─configs
│ │ ├─internal
│ │ │ ├─biz
│ │ │ │ └─iface
│ │ │ ├─conf
│ │ │ ├─data
│ │ │ │ └─model
│ │ │ ├─server
│ │ │ │ └─plugin
│ │ │ └─service
│ │ └─third_party
│ │ ├─errors
│ │ ├─google
│ │ │ ├─api
│ │ │ └─protobuf
│ │ │ └─compiler
│ │ ├─openapi
│ │ │ └─v3
│ │ └─validate
│ └─wafTop # 上层防护配置相关服务
│ ├─cmd
│ │ └─wafTop
│ ├─configs
│ └─internal
│ ├─biz # 业务逻辑
│ │ ├─iface
│ │ ├─rule
│ │ ├─site
│ │ └─strategy
│ ├─conf
│ ├─data # 数据处理
│ │ ├─dto
│ │ └─model
│ ├─server
│ │ └─plugin
│ └─service #
│ ├─rule
│ ├─site
│ └─strategy
└─third_party # 依赖的外部porto文件
├─buf
│ └─validate
│ └─priv
├─errors
├─google
│ ├─api
│ └─protobuf
│ └─compiler
├─openapi
│ └─v3
└─validate
v1.0.0
mysql8.0版本以上 , redis推荐使用6版本以上
- 下载DingHai.zip文件 , 解压缩
- 将上层用户服务 , 防护配置服务以及内核的配置文件中的配置信息修改为正确地址
- 启动三个exe文件
- v1.0.0暂无UI界面 , 需要开发人员通过接口文档使用.将json文件导入apifox即可, wafCoraza会占用端口8887
下载 DingHai_linux.zip文件,在linux系统上解压即可,其余步骤和上述操作系统
v1.0.0
- 内核具有基础防护功能 , 支持动态更新策略 , 以及各个网站之间的waf实列隔离,简单的实现了反向代理,将请求转发至真正的后端地址支持coraza内置防护策略,包括:SQL注入(SQLi),跨站点脚本(XSS),PHP和Java代码注入,HTTPoxy,Shellshock,脚本/扫描器/机器人检测&元数据和错误泄漏。可以将攻击事件落地本地磁盘的csv文件.
- 上层服务,用户配置需要防护的网站,策略,规则组以及自定义规则. 目前内置规则不支持用户自定义.
后续更新目标:
- 无UI界面 , 不便于操作
- 用户自定义防护规则功能缺失
- 日志插件功能开发