Compare commits

...

21 Commits

Author SHA1 Message Date
xbingW
a66b82d878 feat: release 5.3.2 (#812) 2024-04-12 16:44:47 +08:00
xiaobing.wang
d081ae11ea feat: release 5.3.1 2024-04-12 10:15:14 +08:00
xiaobing.wang
37960b6c70 feat: release 5.3.1 2024-04-12 09:45:49 +08:00
xbingW
f92b914551 feat: release 5.3.1 (#810) 2024-04-11 20:07:03 +08:00
ct-jaryn
e5ede1c94f 增加syslog详情 (#809) 2024-04-11 17:27:29 +08:00
ct-jaryn
75c9510aa5 更新文档 (#807) 2024-04-11 10:46:29 +08:00
yrluke
3593b12c67 Merge pull request #798 from Lvshujun0918/patch-1
改正06-other.md中一处错误的加粗,没加空格而没生效
2024-04-09 11:46:02 +08:00
吕舒君
80e2616c19 改正06-other.md中一处错误的加粗,没加空格而没生效 2024-04-03 12:59:32 +08:00
ct-jaryn
b61a1bd169 新增告警 (#796) 2024-04-02 17:48:13 +08:00
bens.CN
d0165d5a1c fix: img typo (#787)
Co-authored-by: 杨纲 <gang.yang@chaitin.com>
2024-04-01 10:19:52 +08:00
bens.CN
3a549322af feat: 有奖征文 (#781)
Co-authored-by: 杨纲 <gang.yang@chaitin.com>
2024-03-28 19:14:37 +08:00
ct-jaryn
7d5328d7e6 对应5.2.0 更新文档 (#780)
* 对应5.2.0 更新文档
2024-03-28 14:50:17 +08:00
yrluke
9d4b987c93 Update 05-test.md 2024-03-28 14:47:15 +08:00
xbingW
ac15c5f015 feat: release 5.2.0 (#779) 2024-03-28 14:43:53 +08:00
ct-jaryn
7d0dcf828c 更新登录帮助文档 (#772) 2024-03-22 18:16:51 +08:00
xiaobing.wang
fa642c12c9 fix: wait pg ready 2024-03-21 17:08:10 +08:00
xbingW
a4a178bdfd feat: add river ip (#768) 2024-03-21 16:25:43 +08:00
xiaobing.wang
43c40ec29f feat: release 5.1.0 (#767) 2024-03-21 14:29:16 +08:00
xbingW
e967686adc feat: release 5.1.0 (#767) 2024-03-21 11:58:29 +08:00
ct-jaryn
58f65d6cca syslog文档、优化升级文档 (#766)
* syslog文档、优化升级文档
2024-03-21 11:44:19 +08:00
xbingW
6941f74d2e 新增身份认证文档 (#754)
* 新增身份认证内容 (#18)

---------

Co-authored-by: 张华杰 <huajie.zhang@chaitin.com>
Co-authored-by: ct-jaryn <151006958+ct-jaryn@users.noreply.github.com>
2024-03-15 09:25:07 +08:00
29 changed files with 552 additions and 106 deletions

View File

@@ -1,5 +1,64 @@
# SAFELINE-CE CHANGELOG
## [5.3.2] - 2024-04-12
### 修复
* 修复了地理位置库识别错误的问题
### 优化
* 优化了一些 UI 交互细节
## [5.3.1] - 2024-04-11
### 新增
* 专业版支持*钉钉告警*
* 专业版新增高级数据统计
### 优化
* 上线新版智能 AI 攻击分析,分析结果由长亭问津安全大模型提供,大幅度提升安全分析效果
* 支持全种类的攻击分析,包含 注入、CSRF、SSRF、后门等
* 标准化输出内容,例如 攻击影响、意图分析、防护建议等
* 优化站点上游服务器的格式校验([#792](https://github.com/chaitin/SafeLine/issues/792) 中涉及问题)
* 修复了其他一些已知问题
* 优化了一些 UI 交互细节
## [5.2.0] - 2024-03-28
### 新增
* 黑白名单、人机验证、身份认证中,规则匹配条件增加 “Method”请求方法方便对 POST、PUT、DELETE 等客户端操作进行限制
* 攻击原始日志的防护模块为 “补充规则” 时,“命中规则” 处增加规则的 ID
### 优化
* 优化导航,调整功能位置,方便寻找:
* 证书管理 移动到 防护站点->证书管理
* IP 组 移动到 防护配置->通用配置->IP 组
* 源 IP 获取方式、站点通用配置 移动到 防护站点->代理设置
* 拦截页面附加说明、自定义拦截页面、IP 情报共享计划 移动到 防护配置->通用配置->拦截页面、IP 情报共享计划
* 雷池控制台登录设置、雷池控制台证书、Syslog 设置、系统信息 移动到一级导航 系统设置
* 密码登录框增加请求频率限制,提高暴力猜解的难度
* 免费证书由过期前 10 天自动续期,改为过期前 30 天就自动续期
* 修复站点数量较多时,站点管理处采集不到资源的问题
* 修复移动端点击登录页的 “忘记密码” 无法弹出重置命令的问题
* 修复 syslog 因请求内容较多被截断时json 格式会被截得不合法的问题
* 修复其他一些已知问题
* 优化一些 UI 交互细节
## [5.1.0] - 2024-03-21
### 新增
- 专业版支持 syslog 转发攻击日志到外部服务器。
### 修复
- 修复某些情况下站点资源批量删除失败的问题。
- 修复身份认证中配置 ip 组规则时功能异常的问题。
- 修复某些攻击日志不显示地址位置的问题。
- 修复页面缓存导致显示错误的问题。
- 修复其他一些已知问题。
## [5.0.0] - 2024-03-14
### 新增

View File

@@ -6,11 +6,23 @@ title: "登录雷池"
> TOTP (Time-based One-Time Password algorithm) 将密钥与当前时间进行组合,通过哈希算法产生一次性密码,已被采纳为 RFC 6238被用于许多双因素身份验证系统。
## 登录演示
## 登录流程
浏览器打开后台管理页面 `https://<waf-ip>:9443`
1.浏览器打开后台管理页面 `https://<waf-ip>:9443`
根据界面提示,使用 **支持 TOTP 的认证软件或者小程序** 扫描二维码,然后输入动态口令登录:
2.输入初始的admin密码
完成安装后在shell会自动输出密码。
![Alt text](/images/docs/guide_config/login_1.png)
若忘记查看,需手动执行重置命令获得初始密码
`docker exec safeline-mgt resetadmin`
![Alt text](/images/docs/guide_config/login_2.png)
3.根据界面提示,使用 **支持 TOTP 的认证软件或者小程序** 扫描二维码,然后输入动态口令登录:
<iframe src="//player.bilibili.com/player.html?aid=748637002&bvid=BV1wC4y177zN&cid=1339420830&p=1&autoplay=0" scrolling="no" border="0" frameBorder="no" framespacing="0" allowFullScreen='{true}'
style={{ width: '100%', height: '350px' }}

View File

@@ -61,14 +61,20 @@ title: "测试防护"
3. 使用以下请求开始测试
```
./blazehttp -t http://<IP或域名>:<端口>
./选择对应版本 -t http://<IP或域名>:<端口>
windows下
./blazehttp_windows.exe -t http://<IP或域名>:<端口>
linux下
./blazehttp_linux_x64 -t http://<IP或域名>:<端口>
```
### 测试效果展示
```sh
# 测试请求
.//blazehttp -t http://127.0.0.1:8008
# linux测试请求演示
./blazehttp -t http://127.0.0.1:8008
sending 100% |█████████████████████████████████████████████████████████| (33669/33669, 940 it/s) [35s:0s]
总样本数量: 33669 成功: 33669 错误: 0
检出率: 71.65% (恶意样本总数: 575 , 正确拦截: 412 , 漏报放行: 163)

View File

@@ -6,53 +6,21 @@ title: "配置其他"
其他配置项介绍
### 黑白名单
黑名单:拦截
白名单:放通
注意:条件 AND 是指同时符合,如果希望多个匹配条件需要增加多条黑名单或者白名单
![Alt text](/images/docs/guide_config/other_config1.png)
### 频率限制
通过开启频率限制功能封锁恶意 IP
![Alt text](/images/docs/guide_config/other_config2.png)
### 人机验证
人机验证的有效时间默认是一个小时,未来可能会支持配置,敬请期待
详情查看 [人机验证 2.0](/about/challenge)
### 语义分析
详情查看 [语义分析检测算法](/about/syntaxanalysis)
## 通用配置
### IP 组配置
1.支持自定义 IP 组
2.长亭社区恶意 IP 情报,需要加入 IP 情报共享计划才可以使用
## 防护站点
### 证书管理
管理需要使用的证书,点击添加证书添加
### 其他
### 代理配置
#### 源 ip 获取方式
1.使用默认的方式获取源 IP
2.自定义获取源 IP 的 header
2.自定义获取源 IP 的 header
#### 站点通用配置
#### 其他代理配置
1.如果配置站点需要 http 自动转为 https 功能时,需要手动开启
@@ -64,17 +32,177 @@ title: "配置其他"
注:开启后并不会遵循源请求的信息,雷池会覆盖,为防止客户端伪造
#### 拦截页面附加说明
## 防护配置
自定义拦截页面的提示信息
### 黑白名单
黑名单:拦截
白名单:放通,优先级大于黑名单
注意:条件 AND 是指同时符合,如果希望多个匹配条件需要增加多条黑名单或者白名单
![Alt text](/images/docs/guide_config/other_config1.png)
### 频率限制
通过开启频率限制功能封锁恶意 IP
对已经限制的ip可以在限频日志页面点击解除限制进行放行
![Alt text](/images/docs/guide_config/other_config2.png)
### 人机验证
人机验证的有效时间默认是一个小时,未来可能会支持配置,敬请期待。
详情查看 [人机验证 2.0](/about/challenge)
### 语义分析
详情查看 [语义分析检测算法](/about/syntaxanalysis)
### 补充规则(专业版)
补充规则能在语义分析的基础上,针对一些特殊的业务漏洞、框架漏洞的利用行为进行防护。
社区版默认进行平衡防护,专业版可进一步配置防护模式。
![Alt text](/images/docs/guide_config/other_config3.png)
### 身份认证
可以通过添加认证规则,对雷池保护的站点额外增加身份认证功能。
![Alt text](/images/docs/guide_config/other_config4.png)
如图,触发身份认证规则后需要使用账户密码登录后继续访问网站。
![Alt text](/images/docs/guide_config/other_config5.png)
### 通用配置
#### IP 组
1.支持自定义 IP 组
2.长亭社区恶意 IP 情报,需要加入 IP 情报共享计划才可以使用
#### 拦截页面
1.自定义拦截页面的提示信息
2.自定义拦截页面(专业版),可以修改替或换拦截页面
#### 攻击告警(专业版)
支持钉钉、飞书、企业微信
支持发送(攻击、频率限制)告警到钉钉
#### IP 情报共享计划
默认加入共享计划,加入后将共享攻击 IP 信息到社区,并可使用 IP 组 “长亭社区恶意 IP 情报”。
## 系统设置
#### 雷池控制台登录设置
用于配置登录雷池管理端的方式
低于5.0.0版本升级上来的shell会显示初始密码忘记可以手动重置
社区版支持单用户,**专业版**支持多用户管理
管理员固定为 admin非管理员不能修改其他用户配置
#### 雷池控制台证书
存放默认证书,可以自定义证书
#### IP 情报共享计划
#### Syslog 设置
默认加入共享计划,加入后将共享攻击 IP 信息到社区,并可使用 IP 组 “长亭社区恶意 IP 情报”
让雷池发送syslog到设置的服务器**当前只支持UDP协议**
![Alt text](/images/docs/guide_config/other_config6.png)
保存信息后可以点击测试按钮测试,收到测试信息表示配置成功
雷池发现攻击事件后会发送事件的syslog信息
![Alt text](/images/docs/guide_config/other_config7.png)
```
#syslog 内容详情
{
"scheme": "http", // 请求协议为 HTTP
"src_ip": "12.123.123.123", // 源 IP 地址
"src_port": 53008, // 源端口号
"socket_ip": "10.2.71.103", // Socket IP 地址
"upstream_addr": "10.2.34.20", // 上游地址
"req_start_time": 1712819316749, // 请求开始时间
"rsp_start_time": null, // 响应开始时间
"req_end_time": 1712819316749, // 请求结束时间
"rsp_end_time": null, // 响应结束时间
"host": "safeline-ce.chaitin.net",// 主机名
"method": "GET", // 请求方法为 GET
"query_string": "", // 查询字符串
"event_id": "32be0ce3ba6c44be9ed7e1235f9eebab", // 事件 ID
"session": "", // 会话
"site_uuid": "35", // 站点 UUID
"site_url": "http://safeline-ce.chaitin.net:8083", // 站点 URL
"req_detector_name": "1276d0f467e4", // 请求检测器名称
"req_detect_time": 286, // 请求检测时间
"req_proxy_name": "16912fe30d8f", // 请求代理名称
"req_rule_id": "m_rule/9bf31c7ff062936a96d3c8bd1f8f2ff3", // 请求规则 ID
"req_location": "urlpath", // 请求位置为 URL 路径
"req_payload": "", // 请求负载为空
"req_decode_path": "", // 请求解码路径
"req_rule_module": "m_rule", // 请求规则模块为 m_rule
"req_http_body_is_truncate": 0, // 请求 HTTP 主体
"rsp_http_body_is_truncate": 0, // 响应 HTTP 主体
"req_skynet_rule_id_list": [ // 请求 Skynet 规则 ID 列表
65595,
65595
],
"http_body_is_abandoned": 0, // HTTP 主体
"country": "US", // 国家
"province": "", // 省份
"city": "", // 城市
"timestamp": 1712819316, // 时间戳
"payload": "",
"location": "urlpath", // 位置为 URL 路径
"rule_id": "m_rule/9bf31c7ff062936a96d3c8bd1f8f2ff3", / 规则 ID
"decode_path": "", // 解码路径
"cookie": "sl-session=Z0WLa8mjGGZPki+QHX+HNQ==", // Cookie
"user_agent": "PostmanRuntime/7.28.4", // 用户代理
"referer": "", // 引用页
"timestamp_human": "2024-04-11 15:08:36", // 时间戳
"resp_reason_phrase": "", // 响应
"module": "m_rule", // 模块为 m_rule
"reason": "", // 原因
"proxy_name": "16912fe30d8f", // 代理名称
"node": "1276d0f467e4", // 节点
"dest_port": 8083, // 目标端口号
"dest_ip": "10.2.34.20", // 目标 IP 地址
"urlpath": "/webshell.php", // URL 路径
"protocol": "http", // 协议为 HTTP
"attack_type": "backdoor", // 攻击类型
"risk_level": "high", // 风险级别
"action": "deny", // 动作
"req_header_raw": "GET /webshell.php HTTP/1.1\r\nHost: safeline-ce.chaitin.net:8083\r\nUser-Agent: PostmanRuntime/7.28.4\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, br\r\nCache-Control: no-cache\r\nCookie: sl-session=Z0WLa8mjGGZPki+QHX+HNQ==\r\nPostman-Token: 8e67bec1-6e79-458c-8ee5-0498f3f724db\r\nX-Real-Ip: 12.123.123.123\r\nSL-CE-SUID: 35\r\n\r\n", // 请求头原始内容
"body": "", // 主体
"req_block_reason": "web", // 请求阻止原因
"req_attack_type": "backdoor", // 请求攻击类型
"req_risk_level": "high", // 请求风险级别
"req_action": "deny" // 动作
}
```
#### 系统信息
显示系统版本和设备机器码
## 常见配置问题

View File

@@ -26,9 +26,8 @@ title: "安装问题"
需要安装 docker。尝试 `curl -fLsS https://get.docker.com/ | sh` 或者 [Install Docker Engine](https://docs.docker.com/engine/install/)。
#### 报错:docker not found, unable to deploy
#### 报错:failed to create network safeline-ce
failed to create network safeline-ce
safeline-ce 是雷池部署时候创建的 network出现类似报错先重启下 dockerd 之后重试
需要启动 docker daemon 才能执行相关的命令。尝试 `systemctl start docker`
@@ -37,10 +36,6 @@ safeline-ce 是雷池部署时候创建的 network出现类似报错先重
需要安装 `docker compose v2`。尝试 `[Install Docker Compose](https://docs.docker.com/compose/install/)`
#### 报错: `failed to create network safeline-ce`
safeline-ce 是雷池部署时候创建的 network出现类似报错先重启下 dockerd 之后重试。
#### 报错: safeline-tengine 出现 Address already in use
`docker logs -f safeline-tengine` 容器日志中看到 `Address already in use` 信息。
@@ -103,8 +98,11 @@ security_opt:
在安装目录(默认 safeline)下
根据本地的compose版本执行 `docker compose down` 或者 `docker-compose down`
1.根据本地的compose版本执行 `docker compose down` 或者 `docker-compose down` 停止容器
2.手动删除镜像
3.动手删除目录
## 问题无法解决

View File

@@ -6,6 +6,16 @@ title: "登录问题"
记录常见的登录问题
## admin密码错误
### 使用命令重置
需手动执行重置命令获得初始密码
```
docker exec safeline-mgt resetadmin
```
## 动态口令错误
### 时间不一致
@@ -30,7 +40,7 @@ TOTP 动态口令只有 30 秒的有效期,如果认证失败,请在动态
命令执行完成后打开雷池页面重新绑定即可。
```
docker exec safeline-mgt resetadmin
docker exec safeline-mgt resettotp
```
**注意:重置动态口令后要尽快完成绑定,别被其他人捷足先登了。**

View File

@@ -81,10 +81,16 @@ title: "配置问题"
## 配置完成后,测试时返回 400 Request Header Or Cookie Too Large
请麻烦检查是否形成了环路,即:雷池将请求转发给上游服务器后,上游服务器又将请求转发回雷池。
检查是否形成了环路,即:雷池将请求转发给上游服务器后,上游服务器又将请求转发回雷池。
重新修改配置后再次测试
## 不同版本关闭防火墙的命令
默认使用雷池不需要关闭防火墙,配置对应的开放规则即可
如果需要直接关闭防火墙可以参考
Ubuntu 18.04 LTS 、 Ubuntu 20.04 LTS 、 Ubuntu 22.04 LTS
Debian 9 (Stretch)、Debian 10 (Buster)、Debian 11 (Bullseye)

View File

@@ -45,6 +45,22 @@ docker exec safeline-tengine nginx -s reload
**_注意该操作会加快对硬盘的消耗请定时清理访问日志_**
## 有信任的ip进入了社区黑名单怎么办
社区黑名单的进入条件是需要多个雷池设备上报恶意行为,自动移出条件是连续一段时间没有被上报
由于网络环境的复杂性存在ip被利用或者规则误报导致进入社区黑名单的情况
出于安全考虑,雷池社区不会主动为任何人移出社区黑名单
误报如何处理
1.排查信任ip的情况确认是否真的安全
2.对信任的ip针对性配置加白规则
3.等待信任ip自动被移出社区黑名单
## 问题无法解决
1. 通过右上角搜索检索其他页面

View File

@@ -6,6 +6,18 @@ title: "升级问题"
记录常见的升级问题
## 默认账号密码
雷池社区版5.0.0以后的版本都有一个默认的账户密码
正常情况升级时shell会自动输出新密码
若非在线升级,需手动执行重置命令获得密码
重置密码命令:`docker exec safeline-mgt resetadmin`
初始密码是随机的,需要修改可以进入【通用配置-其他-雷池控制台登录设置】设置新的密码
## 升级提示目录不对
在错误的目录下执行(比如 safeline 的子目录)会导致无法升级成功。
@@ -20,7 +32,6 @@ title: "升级问题"
恢复(还原):把备份的内容放回安装目录执行 `docker compose down && docker compose up -d`,重新启动雷池
## 升级过程中下载超时
网络问题导致,建议等待网络稳定或者尝试离线升级。

View File

@@ -143,7 +143,7 @@ docker run -d --restart=always --name safeline-fluentd --net safeline-ce -v ./sq
## 自定义站点 nginx conf
雷池每次修改站点或者重启服务时都会在waf的安装目录下的**resources/nginx/sites-enabled/**重新生成 nginx conf 文件。因为没法“智能”合并用户自定义的配置和自动生成的配置。但是也还是有方式能持久化地添加一些 nginx conf不会被覆盖。
雷池每次修改站点或者重启服务时都会在waf的安装目录下的 **resources/nginx/sites-enabled/** 重新生成 nginx conf 文件。因为没法“智能”合并用户自定义的配置和自动生成的配置。但是也还是有方式能持久化地添加一些 nginx conf不会被覆盖。
每个 `IF_backend_XXX` 的 location 中都有 `include proxy_params;` 这一行配置,且 `resources/nginx/proxy_params` 这个文件不会被修改站点、重启服务等动作覆盖。2.1.0 版本之后支持 `include custom_params/backend_XXX;` 可以自定义站点级的 nginx location 配置。

View File

@@ -6,6 +6,66 @@ title: "版本更新记录"
[版本升级方法](/guide/upgrade)
### [5.3.2] - 2024-04-12
#### 修复
* 修复了地理位置库识别错误的问题
#### 优化
* 优化了一些 UI 交互细节
### [5.3.1] - 2024-04-11
#### 新增
* 专业版支持*钉钉告警*
* 专业版新增高级数据统计
#### 优化
* 上线新版智能 AI 攻击分析,分析结果由长亭问津安全大模型提供,大幅度提升安全分析效果
* 支持全种类的攻击分析,包含 注入、CSRF、SSRF、后门等
* 标准化输出内容,例如 攻击影响、意图分析、防护建议等
![](/images/docs/about_changelog/5.3.1-1.png)
* 优化站点上游服务器的格式校验([#792](https://github.com/chaitin/SafeLine/issues/792) 中涉及问题)
* 修复了其他一些已知问题
* 优化了一些 UI 交互细节
### [5.2.0] - 2024-03-28
#### 新增
* 黑白名单、人机验证、身份认证中,规则匹配条件增加 “Method”请求方法方便对 POST、PUT、DELETE 等客户端操作进行限制
* 攻击原始日志的防护模块为 “补充规则” 时,“命中规则” 处增加规则的 ID
#### 优化
* 优化导航,调整功能位置,方便寻找:
* 证书管理 移动到 防护站点->证书管理
* IP 组 移动到 防护配置->通用配置->IP 组
* 源 IP 获取方式、站点通用配置 移动到 防护站点->代理设置
* 拦截页面附加说明、自定义拦截页面、IP 情报共享计划 移动到 防护配置->通用配置->拦截页面、IP 情报共享计划
* 雷池控制台登录设置、雷池控制台证书、Syslog 设置、系统信息 移动到一级导航 系统设置
* 密码登录框增加请求频率限制,提高暴力猜解的难度
* 免费证书由过期前 10 天自动续期,改为过期前 30 天就自动续期
* 修复站点数量较多时,站点管理处采集不到资源的问题
* 修复移动端点击登录页的 “忘记密码” 无法弹出重置命令的问题
* 修复 syslog 因请求内容较多被截断时json 格式会被截得不合法的问题
* 修复其他一些已知问题
* 优化一些 UI 交互细节
### [5.1.0] - 2024-03-21
#### 新增
- 专业版支持 syslog 转发攻击日志到外部服务器。
#### 修复
- 修复某些情况下站点资源批量删除失败的问题。
- 修复身份认证中配置 ip 组规则时功能异常的问题。
- 修复某些攻击日志不显示地址位置的问题。
- 修复页面缓存导致显示错误的问题。
- 修复其他一些已知问题。
### [5.0.0] - 2024-03-14
#### 新增

View File

@@ -4,7 +4,7 @@ title: "雷池技术架构"
# 雷池技术架构
查看雷池的服务架构图。最上面虚线框住的是数据流,也就是访问业务服务器的流量数据的流动情况。中间框起来的部分是雷池的各个服务。
查看雷池的服务架构图(示意图较老,参考为主)。最上面虚线框住的是数据流,也就是访问业务服务器的流量数据的流动情况。中间框起来的部分是雷池的各个服务。
![framework](/images/docs/framework.png)
@@ -12,11 +12,14 @@ title: "雷池技术架构"
| 名称 | 定义 | 详情 |
| ----------------- | ------------ | ------------------------------------------------------- |
| safeline-mgt | 管理容器 | 接收管理后台行为,向其他服务或容器推送消息 |
| safeline-mgt | 管理容器(管理端) | 接收管理后台行为,向其他服务或容器推送消息 |
| safeline-detector | 检测容器 | 执行检测的容器,从 Tengine 进入的流量会转发到该节点检测 |
| safeline-mario | 日志容器 | 记录与统计恶意行为的节点 |
| safeline-tengine | 网关 | 转发网关,有简单的过滤功能 |
| safeline-tengine | 网关 | 转发网关,有简单的过滤功能基于nginx实现 |
| safeline-pg | 关系型数据库 | 存储攻击日志、保护站点、黑白名单配置的数据库 |
| safeline-luigi | 数据统计服务 | 统计qps等信息 |
| safeline-fvm | 规则处理容器 | 将规则传递到检测容器 |
| safeline-bridge | 支持云托管 | 通讯的桥接器 |
对于后台管理人员,可以直接通信的节点为管理服务 `safeline-mgt`,该节点负责:

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -2001,10 +2001,10 @@
prop-types "^15.8.1"
react-is "^18.2.0"
"@node-rs/jieba-darwin-x64@1.7.2":
"@node-rs/jieba-darwin-arm64@1.7.2":
version "1.7.2"
resolved "https://registry.npmmirror.com/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.7.2.tgz"
integrity sha512-euDawBU2FxB0CGTR803BA6WABsiicIrqa61z2AFFDPkJCDrauEM0jbMg3GDKLAvbaLbZ1Etu3QNN5xyroqp4Qw==
resolved "https://registry.npmmirror.com/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.7.2.tgz"
integrity sha512-M2cHIWRaaOmXGKy446SH2+Y2PzREaI2oYznPbg55wYEdioUp01YS/2WRG8CaoCKEj0aUocA7MFM2vVcoIAsbQw==
"@node-rs/jieba@^1.6.0":
version "1.7.2"

View File

@@ -201,3 +201,10 @@
66.249.79.32/27
66.249.79.64/27
66.249.79.96/27
# river
39.105.229.198
101.37.81.162
47.106.222.10
8.137.22.18
8.222.172.192

View File

@@ -24,7 +24,9 @@ services:
networks:
safeline-ce:
ipv4_address: ${SUBNET_PREFIX}.2
command: [postgres, -c, max_connections=200]
command: [postgres, -c, max_connections=600]
healthcheck:
test: pg_isready -U safeline-ce -d safeline-ce
mgt:
container_name: safeline-mgt
restart: always

View File

@@ -250,6 +250,7 @@ fi
qrcode
check_container_health safeline-pg
check_container_health safeline-mgt
docker exec safeline-mgt /app/mgt-cli reset-admin --once

View File

@@ -268,12 +268,14 @@ $compose_command down --remove-orphans && $compose_command up -d
if [ $? -ne "0" ]; then
abort "替换 Docker 容器失败"
fi
info "雷池升级成功"
qrcode
check_container_health safeline-pg
check_container_health safeline-mgt
docker exec safeline-mgt /app/mgt-cli reset-admin --once
info "雷池升级成功"
warning "雷池 WAF 社区版安装成功, 请访问以下地址访问控制台"
warning "https://0.0.0.0:9443/"

View File

@@ -1,4 +1,4 @@
{
"latest_version": "v5.0.0",
"rec_version": "v4.4.2"
"latest_version": "v5.3.2",
"rec_version": "v5.2.0"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@@ -1,10 +1,28 @@
import React, { useEffect, useState } from 'react';
import { AppBar, Drawer, Grid, Toolbar, Typography, Button, Box, Container, Link, List, ListItem, ListItemText, Stack, IconButton } from '@mui/material';
import Image from 'next/image';
import dynamic from 'next/dynamic';
import React, { useEffect, useState } from "react";
import {
AppBar,
Drawer,
Grid,
Toolbar,
Typography,
Button,
Box,
Container,
Link,
List,
ListItem,
ListItemText,
Stack,
IconButton,
} from "@mui/material";
import Image from "next/image";
import dynamic from "next/dynamic";
import Icon from "@/components/Icon";
import CloseIcon from '@mui/icons-material/Close';
import usePopupState, { bindPopover, bindHover } from '@/components/Popover/usePopupState'
import CloseIcon from "@mui/icons-material/Close";
import usePopupState, {
bindPopover,
bindHover,
} from "@/components/Popover/usePopupState";
const navs = [
{ to: "/docs", label: "帮助文档", target: "_blank" },
@@ -14,61 +32,142 @@ const navs = [
const menus = [
...navs,
{ to: "https://github.com/chaitin/SafeLine", label: "GitHub", target: "_blank" },
{ to: "https://demo.waf-ce.chaitin.cn:9443/dashboard", label: "演示 Demo", target: "_blank" },
{
to: "https://github.com/chaitin/SafeLine",
label: "GitHub",
target: "_blank",
},
{
to: "https://demo.waf-ce.chaitin.cn:9443/dashboard",
label: "演示 Demo",
target: "_blank",
},
];
const HoverPopover = dynamic(() => import('@/components/Popover/HoverPopover'), {
ssr: false,
});
const HoverPopover = dynamic(
() => import("@/components/Popover/HoverPopover"),
{
ssr: false,
}
);
export default function NavBar() {
const [isSticky, setIsSticky] = useState(false);
const [open, setOpen] = useState(false);
const popoverState = usePopupState({
popupId: "wechat-qrcode-popover"
})
popupId: "wechat-qrcode-popover",
});
const popoverState1 = usePopupState({
popupId: "bounty-popover",
});
useEffect(() => {
const handleScroll = () => {
const scrollTop = window.pageYOffset;
setIsSticky(scrollTop > 0);
};
handleScroll()
window.addEventListener('scroll', handleScroll);
handleScroll();
window.addEventListener("scroll", handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
window.removeEventListener("scroll", handleScroll);
};
}, []);
return (
<>
<AppBar position='fixed' color='transparent'
<AppBar
position="fixed"
color="transparent"
sx={{
boxShadow: 'none',
...(isSticky ? { backdropFilter: 'blur(8px)', background: 'rgba(255,255,255,0.8)' } : {}),
alignItems: 'center'
boxShadow: "none",
...(isSticky
? {
backdropFilter: "blur(8px)",
background: "rgba(255,255,255,0.8)",
}
: {}),
alignItems: "center",
}}
>
<Container maxWidth="lg" sx={{ mx: 0 }}>
<Toolbar sx={{ backgroundColor: 'transparent', py: 1, ml: 2, px: { sm: 0 } }}>
<Toolbar
sx={{ backgroundColor: "transparent", py: 1, ml: 2, px: { sm: 0 } }}
>
<Grid container justifyContent="space-around">
<Grid item xs={10} md={6} display="flex">
<Box display="flex" alignItems="center">
<SafelineTitle />
<Box display={{ xs: 'none', md: 'flex' }} alignItems="center">
<Box display={{ xs: "none", md: "flex" }} alignItems="center">
{navs.map((nav, index) => (
<Box component="span" key={index} mr={3.5}>
<Link key={index} href={nav.to} sx={{ color: "common.black" }} target={nav.target}>{nav.label}</Link>
<Link
key={index}
href={nav.to}
sx={{ color: "common.black" }}
target={nav.target}
>
{nav.label}
</Link>
</Box>
))}
</Box>
</Box>
</Grid>
<Grid item xs={2} md={6} display="flex" justifyContent="flex-end">
<Box sx={{ fontSize: "16px", display: { xs: "none", md: "flex" }, alignItems: "center" }}>
<Box
sx={{
fontSize: "16px",
display: { xs: "none", md: "flex" },
alignItems: "center",
}}
>
<Box mr={3.5}>
<Typography
{...bindHover(popoverState1 as any)}
variant="body1"
sx={{
color: popoverState1.isOpen
? "primary.main"
: "common.black",
cursor: "pointer",
"&:hover": {
color: "primary.main",
backgroundColor: "transparent",
},
transition: "unset",
}}
>
<Image
src="/images/bounty_btn.png"
alt="wechat"
width={93}
height={22}
style={{ cursor: "pointer", marginTop: '3px' }}
/>
</Typography>
<HoverPopover
{...bindPopover(popoverState1)}
anchorOrigin={{
vertical: 42,
horizontal: "left",
}}
transformOrigin={{
vertical: "top",
horizontal: "left",
}}
marginThreshold={16}
>
<Image
src="/images/bounty.png"
alt="wechat"
width={672}
height={491}
/>
</HoverPopover>
</Box>
<Link
href="https://github.com/chaitin/SafeLine"
target="_blank"
@@ -87,15 +186,17 @@ export default function NavBar() {
<Box mr={3.5}>
<Typography
{...bindHover(popoverState as any)}
variant='body1'
variant="body1"
sx={{
color: popoverState.isOpen ? 'primary.main' : 'common.black',
color: popoverState.isOpen
? "primary.main"
: "common.black",
cursor: "pointer",
'&:hover': {
"&:hover": {
color: "primary.main",
backgroundColor: "transparent",
},
transition: 'unset',
transition: "unset",
}}
>
@@ -104,11 +205,11 @@ export default function NavBar() {
{...bindPopover(popoverState)}
anchorOrigin={{
vertical: 42,
horizontal: 'left',
horizontal: "left",
}}
transformOrigin={{
vertical: 'top',
horizontal: 'left',
vertical: "top",
horizontal: "left",
}}
marginThreshold={16}
>
@@ -120,7 +221,14 @@ export default function NavBar() {
/>
</HoverPopover>
</Box>
<Link href="https://demo.waf-ce.chaitin.cn:9443/dashboard" sx={{ color: "common.black" }} mr={3.5} target="_blank"> Demo</Link>
<Link
href="https://demo.waf-ce.chaitin.cn:9443/dashboard"
sx={{ color: "common.black" }}
mr={3.5}
target="_blank"
>
Demo
</Link>
<Button
variant="contained"
target="_blank"
@@ -147,18 +255,25 @@ export default function NavBar() {
</Container>
</AppBar>
<Drawer
anchor='right'
anchor="right"
sx={{ width: "100%" }}
variant="temporary"
open={open}
PaperProps={{
style: {
width: '100%',
width: "100%",
},
}}
onClose={() => setOpen(false)}
>
<Stack direction="row" justifyContent="space-between" pl={4} pr={0.5} py={1} sx={{ boxShadow: "rgba(0, 0, 0, 0.1) 0px 1px 2px 0px" }}>
<Stack
direction="row"
justifyContent="space-between"
pl={4}
pr={0.5}
py={1}
sx={{ boxShadow: "rgba(0, 0, 0, 0.1) 0px 1px 2px 0px" }}
>
<Box>
<SafelineTitle />
</Box>
@@ -191,8 +306,18 @@ export default function NavBar() {
export const SafelineTitle: React.FC = () => {
return (
<Link href="/">
<Grid container flexDirection="row" display="flex" spacing={2} sx={{ marginTop: '0px', minWidth: "192px" }}>
<Box width={{ xs: "40px", md: "24px" }} height={{ xs: "43px", md: "26px" }} position="relative">
<Grid
container
flexDirection="row"
display="flex"
spacing={2}
sx={{ marginTop: "0px", minWidth: "192px" }}
>
<Box
width={{ xs: "40px", md: "24px" }}
height={{ xs: "43px", md: "26px" }}
position="relative"
>
<Image
src="/images/safeline.svg"
alt="SafeLine Logo"
@@ -207,8 +332,8 @@ export const SafelineTitle: React.FC = () => {
ml: { xs: 2, md: 1 },
mr: { xs: 0, md: 7 },
fontSize: { xs: "24px", md: "16px" },
display: 'flex',
alignItems: 'center',
display: "flex",
alignItems: "center",
fontFamily: "AlimamaShuHeiTi-Bold",
}}
>