Skip to content

Releases: zzmlb/secgate

v1.5.6 - 白名单 SPOF 告警 + Token 自动过期迁移

20 Apr 09:29

Choose a tag to compare

P1: Dashboard 红条新增 5 类配置风险告警

同服务暴露告警一起显示:

  • ⚠️ 白名单 SPOF:只有 1 个 IP 受信任,该 IP 被入侵即全网沦陷
  • ⚠️ Token 无过期:历史 token 没设过期时间(本次会自动迁移)
  • ⚠️ Token <7 天过期或已过期
  • ⚠️ config.json 权限不是 600
  • ⚠️ Fail2Ban secgate-auth jail 未启用

P3: Token 自动迁移到 90 天过期

load_config() 每次启动会给没有 expires 字段的历史 token 自动设为 90 天后过期(幂等,不会覆盖已有过期时间)。这与 create_token 默认逻辑一致。

升级方式:secgate update

v1.5.5 - P0 修复 Fail2Ban filter 失效 + 收紧 rate limit

20 Apr 09:10

Choose a tag to compare

渗透测试发现的 严重安全 bug,必须升级。

🔴 P0-1: Fail2Ban secgate-auth filter 自 v1.5.1 起就没工作过

失败的 token 尝试虽然写到日志,但 filter 正则和 datepattern 冲突,never matched,从来没封过任何人。升级前你可以自查:

fail2ban-client status secgate-auth | grep 'Total failed'
# 如果是 0 但日志里有 LOGIN_FAILED → 你受影响了

🔴 P0-2: 应用层 rate limit 太宽松

10 次/5 分钟 → 5 次/1 分钟。超限时也记 RATE_LIMITED 日志让 fail2ban 叠加封禁。

升级

secgate update(或按节点 curl install.sh | bash -s 1.5.5)。

v1.5.4 - 修复 nginx sites-enabled 不同步 (critical config bug)

20 Apr 08:53

Choose a tag to compare

修复一个自 v1.0.0 就存在的 关键配置 bug

generate-nginx.py 只写入 sites-available/gateway.conf,完全没处理 sites-enabled/。在 sites-enabled 是独立文件(非 symlink)的节点上,Dashboard 新增/修改受保护端口、改白名单永远不会生效,nginx reload 是 no-op。

本次修复后会自动检测并同步:

  • sites-enabled 是 symlink → 什么都不做(已自动同步)
  • sites-enabled 是独立文件 → shutil.copy2 覆盖
  • sites-enabled 不存在 → 创建 symlink

强烈建议所有节点升级。 你可以这样快速检查节点是否有此 bug:

diff /etc/nginx/sites-available/gateway.conf /etc/nginx/sites-enabled/gateway.conf
# 如果输出不一致 → 有 bug,升级后会自动修复

升级方式:secgate update

v1.5.3 - 修复 nginx 反代吃掉 WebSocket 升级头

20 Apr 08:44

Choose a tag to compare

修复 v1.5.2 一个重要 bug:\n\ngenerate-nginx.py 默认模板的 proxy_set_header Connection ""; 会清除 WebSocket 升级头,导致:\n- noVNC (6080) 页面能打开但连不上桌面\n- Chainlit (8502) 流式响应被中断\n- 任何 SSE 长连接的业务端口被 SecGate 保护后无法工作\n\n修复方案:用 map $http_upgrade $secgate_connection_upgrade 正确传递 Upgrade/Connection 头。普通 HTTP 请求行为不变。\n\n升级方式:secgate updatecurl ...install.sh | bash -s 1.5.3

v1.5.2 - 修复 dashboard API 路径硬编码

20 Apr 08:16

Choose a tag to compare

修复 v1.5.1 /api/iptables-health 和 /api/danger-services 硬编码了 /root/pj226/ 路径的问题,改为动态解析。对于非 master 节点(安装在 /opt/secgate/)的用户必须升级到本版本。

v1.5.1 - 6 项安全加固(审计补丁)

20 Apr 08:03

Choose a tag to compare

🔒 安全加固 (6 fixes)

继 v1.5.0 修复 iptables 自动恢复后,基于 114.66.26.139 节点被入侵事件的审计,补发安全加固补丁。

H1 - 敏感文件权限

config.json 写入时强制 0600(原 0644),保护 token + 白名单不被非 root 账号(如被入侵的业务账号)读取。secgate start 每次启动都会修正已有文件权限。

H2 - Cookie Secure flag

检测到 HTTPS(request.is_secureX-Forwarded-Proto: https)时自动启用 Secure=True,纯 HTTP 部署下不影响。

M1 - Fail2Ban 集成网关认证失败

新增 filter.d/secgate-auth.conf + jail.d/secgate-auth.conf,10 分钟 5 次 token 失败 → 封禁 1 小时。secgate setup 自动部署。

M2 - 凭证轮换

新增 secgate rotate-creds 命令,一键重置 Dashboard 密码。secgate creds 显示凭证超过 180 天会提示轮换。

M3 - 白名单 IP 加固(最重要)

白名单 IP 不再从 iptables 直接 RETURN,改为走 nginx → /auth/verify → Gateway 识别白名单 bypass token。这样:

  • ✅ 所有访问都有 nginx 日志
  • ✅ 白名单被入侵时 Fail2Ban 能封锁异常访问
  • ✅ 告别"白名单一刀切"

127.0.0.0/8 和本机公网 IP 仍保留 iptables RETURN(防环回死循环)。

L1 - 危险服务红色告警条

Dashboard 顶部新增告警横幅:检测到对外暴露但未被 iptables REDIRECT 保护的 VNC/Redis/MongoDB/Docker API 等会红色置顶提示。

目的:避免"装了 SecGate 就万事大吉"的预期陷阱。114 节点就是因为 5900 虽然在配置里,但 iptables 未生效,导致直连被攻破。

升级方式

secgate update
#
curl -fsSL https://github.com/zzmlb/secgate/raw/main/packaging/install.sh | sudo bash -s 1.5.1

v1.5.0 - 修复 iptables 防护自动恢复

20 Apr 07:07

Choose a tag to compare

🔒 安全修复 (Critical)

修复了一个 严重安全缺陷:iptables 的 GATEWAY_AUTH 链在服务重启或系统重启后不会自动重建,导致本应被 Token 认证保护的端口(VNC/noVNC/数据库等)静默暴露到公网

已知受影响:

  • 服务重启 / 系统重启 / iptables flush 后,防护规则丢失
  • Dashboard 仍显示"已保护",但实际公网可直连原始端口
  • 攻击者可绕过 Nginx token 认证层直接访问业务服务

修复内容 (P0-P3)

优先级 修复
P0 secgate start/restart 启动前自动执行 setup-iptables.sh
P1 setup-iptables.sh 末尾持久化到 /etc/iptables/rules.v4
P2 新增 secgate-iptables-check.timer 每 5 分钟自动巡检 + 自愈
P3 Dashboard 顶部健康灯(绿/黄/红),点击可查看详情并一键修复

其他改进

  • Token scope 改用指纹存 cookie,删除 Token 后立即撤销 session
  • UI:多端口选择改为单个"全选/反选"toggle 按钮

升级方式

curl -fsSL https://github.com/zzmlb/secgate/raw/main/packaging/install.sh | sudo bash -s 1.5.0
#
secgate update

升级后会自动:

  1. 重建 iptables 防护链
  2. 持久化规则到磁盘
  3. 启用每 5 分钟健康检查 timer
  4. 安装 iptables-persistent(开机自动恢复)

v1.4.0

31 Mar 10:00

Choose a tag to compare

What's New

WAF 防护子标签页

  • 安全看板新增 WAF 防护 子标签页,展示 Nginx 403 拦截统计
  • 支持攻击类型分类:恶意扫描器 UA、漏洞探测、SQL 注入、XSS、路径遍历、命令注入
  • 拦截趋势折线图(天/时维度切换)、攻击类型分布饼图
  • Top 10 攻击 IP(含地理位置)、最近 50 条拦截日志详情
  • 统计卡片:总拦截数、攻击 IP 数、WAF 规则数、攻击类型数

WAF Nginx 规则生成

  • generate-nginx.py 新增 WAF 规则:恶意 UA 拦截 + 恶意路径拦截,共 88 条规则

改进

  • 异常请求检测模块排除已被 WAF 拦截的 403 请求,避免重复展示
  • WAF 数据采集使用 120s TTL 缓存,避免频繁扫描日志文件

安全加固

  • 所有前端渲染均使用 escHtml 转义(包括修复已有的 renderFWTopIPs XSS 漏洞)
  • recent_blocks 内存上界保护,防止大量 403 日志导致内存溢出
  • API 响应中不暴露 User-Agent 原始值

v1.3.9

16 Mar 03:44

Choose a tag to compare

What's New

  • AI 助手会话持久化: 同一聊天窗口内的消息现在共享上下文,AI 能记住之前的对话内容
    • 利用 Claude CLI --resume 机制实现
    • 刷新页面或重新打开自动创建新会话
    • resume 失败时自动降级为新会话

Full Changelog

v1.3.8...v1.3.9

v1.3.6

02 Mar 12:25

Choose a tag to compare

修复

  • 修复 Chainlit/Streamlit/Gradio 等 WebSocket 服务加入端口保护后无法访问的问题
  • 前端自动检测服务类型,使用正确的 Nginx 代理模板(WebSocket upgrade 头)