CDN与WAF构建平台-GoEdge
2023-04-11 13:07:19 阿炯

GoEdge 是一款管理分布式 CDN 与 WAF 边缘节点的开源工具软件,目的是让用户轻松地、低成本地创建 CDN/WAF 等应用。利用开源的GoEdge可以零成本制作自己专属的CDN系统,支持集群式管理和API。采用Go语言开发并在3类BSD协议下授权,官方为部分高阶功能提供增值服务。


支持 HTTP、HTTPS、Websocket、TCP、TLS、UDP、PROXY Protocol、IPv6、WAF 等特性,支持多个第三方 DNS 服务。


特性

免费 - 开源、免费、自由、开放
简单 - 架构简单清晰,安装简单,使用简单,运维简单
高扩展性 - 可以自由扩展新的节点,支持亿级数据

功能
多用户、日志审计、集群管理
HTTP/HTTPS/TCP/UDP等协议支持
WAF、缓存
DNS自动解析
多域名绑定
免费证书申请
IP黑白名单
访问日志
统计、内容压缩
Protocol Proxy协议
本地静态文件
URL跳转
路由与重写规则
访问控制
字符编码
自定义页面与HTTP Header
Websocket
WebP自动转换
Fastcgi
请求限制
流量限制

完整的管理界面 - 可以通过管理界面操作一切功能,无需使用代码,为我们节省了记忆负担,也减少了出错的机会;
安装简单 - 得益于我们发布的程序都是编译好的二进制文件,即使是一个技术小白也可以轻松安装、启动,无需安装额外的系统库,上传、解压、启动可以一气呵成;
完整的解决方案 - 不仅仅包含反向代理服务、Web 服务,还包含了多租户(用户)、日志、监控、安全(WAF)、DNS 等功能;
容易集成到别的系统 - 所有数据都通过 GRPC 操作,第三方系统可以轻易通过 GRPC 同 GoEdge 通讯;
更容易二次开发 - 基于 Go 语言开发,相对于其他 C 语言的应用来说更加容易二次开发,入门也相对更加简单,学习 一段时间落Go 语言即可上手;
提供定制服务 - 如果你是企业级的应用,我们还为你提供定制服务,由于掌握了所有代码的细节,所以我们更容易提供个性化的功能。

架构


最新版本:1.0
在经历 3 年研发、1500 + 社群用户深度使用、5000 个 commits 之后,GoEdge 于2023年4月中旬发布 1.0.0 版本。GoEdge v1.0.0 版本主要大幅优化攻击拦截功能、更新免费版 IP 库、批量上传 SSL 证书。

EdgeAdmin - 管理系统

网站服务
优化创建网站服务界面:简化界面,减少必填项
当 HTTP 和 HTTPS 端口冲突时提示用户;避免用户同时在 HTTP 和 HTTPS 设置中使用同样的端口
集群服务设置增加 “支持低版本 HTTP” 选项,可以选择不支持 HTTP/1.0 及以下版本的 HTTP 协议
缓存、访问日志、边缘节点
修复在未初始化缓存设置时添加缓存条件产生的 panic 错误,但此错误不会影响系统正常运行
访问日志数据库节点详情中密码使用星号(*)代替,以提升安全性
SSL 证书内容输入框支持拖动文件上传,支持批量上传,此功能可以在” 证书管理 “中找到
在创建服务和修改服务设置时自动根据填写的域名匹配对应的证书
创建服务和修改服务时也可以批量上传证书
选择证书时可以通过用户筛选
上传证书时可以选择所属用户
优化节点列表显示,包括统计项宽度、连接数更加可读、带宽使用两位小数、隐藏和显示更多 IP
创建节点时自动从节点名称中提取节点 IP,比如节点名称可以为 “CDN 节点 192.168.2.100”,则自动提取 “192.168.2.100” 作为节点默认 IP
生成节点 DNS 解析时区分节点是否已安装;如果节点未完成安装,则不会解析,避免在安装过程中,用户通过域名解析访问到未安装的节点
SSH 认证
创建 SSH 认证私钥时校验私钥内容;避免填入错误的私钥
SSH 认证添加私钥时可以从私钥文件中直接拖入内容
管理员
管理员列表页增加关键词搜索支持
管理员列表在有弱密码的管理员下增加弱密码标识,只有超级管理员才能看到此标识
首页看板可以提示有需要修改的弱密码管理员
日志审计增加日志级别筛选
如果管理系统同时设置了 HTTP 和 HTTPS 端口,那么访问 HTTP 登录页时自动跳转到 HTTPS 地址
增强 Cookie 安全性,可以防止 Cookie 被截取后异地登录
MySQL
自动安装 MySQL 时自动生成所需的动态库软链接,以适应一些比较新的系统
自动安装 mysql 时调整 innodb_sort_buffer_size、innodb_buffer_pool_size 参数值

EdgeAPI - API 节点

数据库
使用 sql.json 取代以往的 sql.go 作为数据库结构存储文件
优化服务列表查询方法,避免因 MySQL 参数设置而导致查询失败
在 API 节点启动时,如果无法连接到本地 MySQL 数据库,则尝试启动固定位置上的 MySQL,避免有些用户不知道如何启动 MySQL
域名解析、流量带宽、消息提醒、IP 名单
修复无法同时对相同对象执行多次 DNS 解析任务的问题
DNS 解析发生变化时立即触发同步任务,即让域名解析生效更快
优化节点配置生成,合并证书数据,减少配置文件尺寸
增加 RPC 消息最大尺寸到 512MB,避免大的配置信息无法传输
增加 edge-api token --role=[admin|user|api] 命令用来快速查询节点 Token,方便用户在忘记 EdgeAdmin、EdgeUser、EdgeAPI 令牌时令牌时快速查询
合并部分流量查询和带宽查询,提升查询速度
修复发送站内消息时将标题作为内容的 Bug
优化证书到期提醒等相关消息,可以在提示信息中看到域名相关信息
修复删除 IP 名单中 IP 时状态设置错误的问题,此问题可能会导致节点在从 IP 名单中删除单个 IP 时消耗大量的 CPU

EdgeNode - 边缘节点

WAF
在 GET302 和 CAPTCHA 验证中不记录特殊 URL 的访问日志,避免生成大量无效的访问日志
优化 IP 名单上传程序,自动去重,并可以批量上传
优化 WAF 黑名单处理,即使 WAF 不开启也仍然有效,并自动结合本地防火墙进行拦截
nftables 规则使用 REJECT 代替 DROP
URL 跳转没有选择状态码时,对搜索引擎访问默认值设置为 301,以提升 SEO 效果
源站返回分片内容时提示访问用户内容不支持低版本 HTTP 协议
增加网站服务加载和删除调试日志,这些日志不会上传到 API 节点
限制单个服务每次上传的域名统计数不超过 20 个,避免大量的域名统计对 API 节点数据库造成很大的压力
修复在高并发下修改服务配置可能导致服务崩溃(panic)的问题
重启服务时自动保存未上传的带宽统计信息,以便在下次启动的时候恢复
增加 RPC 消息最大尺寸到 512MB,避免大的配置信息无法传输
不提示单个端口 Reload 信息,防止不重要的日志过多
节点启动时自动调整相关内核参数,如 net.core.somaxconn、net.ipv4.tcp_fin_timeout 等

EdgeCommon - 通用库

修复 IP 查询结果显示时可能不显示县级单位的问题

完整的发行说明请参看此处

官方主页:https://goedge.cn/