基于飞牛漏洞安全访问Lucky反代&雷池防护

最后更新于:

基于飞牛漏洞安全访问Lucky反代&雷池防护

1 序言

1.1 为什么要安全防护?

众所周知,飞牛 OS 最近有漏洞,被人当肉鸡。所以我害怕被**“光临偷看”**,所以一想之下暂时弄了这个防护。

1.2 安全防护建议

  • 关闭飞牛 FN Connect,也就是关闭飞牛自带的内网穿透

  • 关闭飞牛 SSH 和修改默认 22 端口

  • 推荐优先使用内网穿透访问飞牛,比如 Tailscale、星空组网

  • 次推荐使用公网访问飞牛

    • 使用反向代理并且不泄露域名,在网络上已经安全 90%
    • 使用Lucky反代时候 web 增加一个账号密码验证,那么相当于在飞牛外面加上一道锁。
    • 如果需要更好的防护就再加上一道锁雷池 WAF
  • 如果增加 web 账号密码验证,那么飞牛 APP 不能使用,毕竟 APP 不能弹出这个账号密码验证,网页端是正常的。

  • 反代时候增加 IP 白名单,我觉得没有必要,若想加也是可以的。

1.3 防护思路

  • 雷池 WAF (Safeline):作为反向代理的下一跳,清洗恶意流量,实现“虚拟补丁”。

  • Lucky 反代 + Basic Auth:在入口处直接暴力验证账号密码,把连门都摸不清的人直接拒之门外。

  • 架构思路: 外网请求 -> Lucky (SSL卸载+基础认证) -> 雷池 WAF (清洗攻击) -> 飞牛 OS (业务)

2 准备工作

  • 硬件:已安装飞牛 OS 的 NAS(或同局域网下的其他机器)。
  • 软件
    • Docker 环境(飞牛自带)。
    • Lucky:用于端口转发、SSL 证书管理和第一道认证。
    • 雷池 (Safeline):用于 WAF 防护(只有 x86 免费)。

3 雷池 WAF

3.1 安装雷池 WAF

我这里采用 docker 安装雷池 WAF,以下是 docker-compose.yaml文件

  1# 官方文档
  2# https://docs.waf-ce.chaitin.cn/
  3# web 访问 https://IP:29443
  4# 账号 admin 密码在 safeline-mgt 日志
  5# 重置密码 docker exec safeline-mgt resetadmin
  6
  7# ---
  8
  9name: safeline
 10# 最后编辑时间:2026-02-03
 11services:
 12  # -----------------------
 13  # 1. 数据库
 14  # -----------------------
 15  postgres:
 16    container_name: safeline-pg
 17    restart: always
 18    image: chaitin/safeline-postgres:15.2
 19    volumes:
 20      - /mnt/docker/apps/safeline/resources/postgres/data:/var/lib/postgresql/data
 21      - /etc/localtime:/etc/localtime:ro
 22    environment:
 23      - POSTGRES_USER=safeline-ce
 24      - POSTGRES_PASSWORD=safeline-pwd-change-me
 25    networks:
 26      - safeline-ce
 27    command: [postgres, -c, max_connections=600]
 28    healthcheck:
 29      test: pg_isready -U safeline-ce -d safeline-ce
 30
 31  # -----------------------
 32  # 2. 管理后台
 33  # -----------------------
 34  mgt:
 35    container_name: safeline-mgt
 36    restart: always
 37    image: chaitin/safeline-mgt:latest
 38    volumes:
 39      - /etc/localtime:/etc/localtime:ro
 40      - /mnt/docker/apps/safeline/resources/mgt:/app/data
 41      - /mnt/docker/apps/safeline/logs/nginx:/app/log/nginx:z
 42      - /mnt/docker/apps/safeline/resources/sock:/app/sock
 43      - /var/run:/app/run
 44    ports:
 45      - 29443:1443
 46    healthcheck:
 47      test: curl -k -f https://localhost:1443/api/open/health
 48    environment:
 49      - MGT_PG=postgres://safeline-ce:safeline-pwd-change-me@safeline-pg/safeline-ce?sslmode=disable
 50    depends_on:
 51      - postgres
 52      - fvm
 53    logging:
 54      driver: "json-file"
 55      options:
 56        max-size: "100m"
 57        max-file: "5"
 58    networks:
 59      - safeline-ce
 60
 61  # -----------------------
 62  # 3. 检测引擎
 63  # -----------------------
 64  detect:
 65    container_name: safeline-detector
 66    restart: always
 67    image: chaitin/safeline-detector:latest
 68    volumes:
 69      - /mnt/docker/apps/safeline/resources/detector:/resources/detector
 70      - /mnt/docker/apps/safeline/logs/detector:/logs/detector
 71      - /etc/localtime:/etc/localtime:ro
 72    environment:
 73      - LOG_DIR=/logs/detector
 74    networks:
 75      - safeline-ce
 76
 77  # -----------------------
 78  # 4. 流量转发 (Tengine) 
 79  # -----------------------
 80  tengine:
 81    container_name: safeline-tengine
 82    restart: always
 83    image: chaitin/safeline-tengine:latest
 84    volumes:
 85      - /etc/localtime:/etc/localtime:ro
 86      - /etc/resolv.conf:/etc/resolv.conf:ro
 87      - /mnt/docker/apps/safeline/resources/nginx:/etc/nginx
 88      - /mnt/docker/apps/safeline/resources/detector:/resources/detector
 89      - /mnt/docker/apps/safeline/resources/chaos:/resources/chaos
 90      - /mnt/docker/apps/safeline/logs/nginx:/var/log/nginx:z
 91      - /mnt/docker/apps/safeline/resources/cache:/usr/local/nginx/cache
 92      - /mnt/docker/apps/safeline/resources/sock:/app/sock
 93    environment:
 94      - TCD_MGT_API=https://safeline-mgt:1443/api/open/publish/server
 95      - TCD_SNSERVER=safeline-detector:8000
 96      - CHAOS_ADDR=safeline-chaos
 97    ulimits:
 98      nofile: 131072
 99    ports:
100      - 29080:80
101      - 28443:443
102    networks:
103      - safeline-ce
104
105  # -----------------------
106  # 5. 任务调度
107  # -----------------------
108  luigi:
109    container_name: safeline-luigi
110    restart: always
111    image: chaitin/safeline-luigi:latest
112    environment:
113      - MGT_IP=safeline-mgt
114      - LUIGI_PG=postgres://safeline-ce:safeline-pwd-change-me@safeline-pg/safeline-ce?sslmode=disable
115    volumes:
116      - /etc/localtime:/etc/localtime:ro
117      - /mnt/docker/apps/safeline/resources/luigi:/app/data
118    logging:
119      driver: "json-file"
120      options:
121        max-size: "100m"
122        max-file: "5"
123    depends_on:
124      - detect
125      - mgt
126    networks:
127      - safeline-ce
128
129  # -----------------------
130  # 6. 威胁情报
131  # -----------------------
132  fvm:
133    container_name: safeline-fvm
134    restart: always
135    image: chaitin/safeline-fvm:latest
136    volumes:
137      - /etc/localtime:/etc/localtime:ro
138    logging:
139      driver: "json-file"
140      options:
141        max-size: "100m"
142        max-file: "5"
143    networks:
144      - safeline-ce
145
146  # -----------------------
147  # 7. 混沌测试
148  # -----------------------
149  chaos:
150    container_name: safeline-chaos
151    restart: always
152    image: chaitin/safeline-chaos:latest
153    logging:
154      driver: "json-file"
155      options:
156        max-size: "100m"
157        max-file: "10"
158    environment:
159      - DB_ADDR=postgres://safeline-ce:safeline-pwd-change-me@safeline-pg/safeline-ce?sslmode=disable
160    volumes:
161      - /mnt/docker/apps/safeline/resources/sock:/app/sock
162      - /mnt/docker/apps/safeline/resources/chaos:/app/chaos
163    networks:
164      - safeline-ce
165
166# 网络配置
167networks:
168  safeline-ce:
169    driver: bridge

3.2 配置雷池 WAF

雷池不需要处理复杂的 HTTPS 证书,我们把它当做一个纯粹的 HTTP 过滤器。

  • 登录雷池后台 http://192.168.x.x:29443,点击 【防护应用】 -> 【添加站点】

  • 配置关键点

    • 域名:填写你的公网域名(如 fnnas.example.com
    • 端口:填写 80 (HTTP),把 443 那个关掉不然需要证书。注意:这里不要开启 SSL,证书交给 Lucky 管。
    • 上游服务器:填写飞牛 NAS 的真实内网 IP + 端口(如 http://192.168.x.x:5666)。
  • 提交保存。

此时,雷池已经准备好接收流量并转发给飞牛了。

https://img.nw177.cn/blog/20.routers/2011-lucky反代&雷池防护-01-waf-02.webp

进入站点详情 -> 【高级配置】

  • 获取客户端 IP 方式:选择 “从 HTTP Header 获取”
  • HTTP Header:填入 X-Forwarded-For

https://img.nw177.cn/blog/20.routers/2011-lucky反代&雷池防护-01-waf-01.webp

验证方法:用手机流量访问一次 NAS,去雷池【防护日志】看一眼,如果源 IP 显示的是公网 IP,说明透传成功!

4 Lucky 反向代理

4.1 安装 Lucky

略,因为我前面文章详细说过了。

4.2 配置 Lucky 反向代理

这个我也详细说过了,关键接入雷池 WAF,我着重说一下。Lucky 是流量的入口,它负责把外网的 HTTPS 流量“剥皮”成 HTTP,然后扔给雷池。

  • 在 Lucky 中添加一个子规则。

  • 前端地址:填写你的反代域名(如 fnnas.example.com)。

  • 后端设置 (关键)

    • 后端地址:指向 雷池的 IP 和端口(如 http://192.168.x.x:29080),千万不要直接指飞牛
  • SSL 证书:在 Lucky 里配置好你的 HTTPS 证书。

  • 安全设置 -> 基本认证 -> 网页认证 -> 认证信息设置 -> admin:admin123

    • 账号:密码的格式,请注意中间有一个英文的冒号

https://img.nw177.cn/blog/20.routers/2011-lucky反代&雷池防护-01-lucky-01.webp

5 效果验收与取舍

5.1 安全性验证

  • 漏洞测试:尝试访问 http://域名/漏洞路径
    • 结果:首先需要在输入账号密码验证,雷池直接拦截,显示 403 Forbidden 大红脸。
  • 暴力测试:在浏览器输入错误的 Basic Auth 密码。
    • 结果:直接 401 Unauthorized,连飞牛的影子的都见不到。

5.2 带来的副作用

  • 手机 APP 无法使用:飞牛的手机 APP 无法处理 Basic Auth 弹窗,所以开启此功能后,手机 APP 将无法连接
  • 解决方案
    • 日常使用:电脑端网页访问(安全无忧)。
    • 手机端:建议配合 Tailscale / WireGuard 等,走内网 IP 访问,绕过 Lucky 和雷池。

5.3 展示结果图

这是内网 oec-t 刷 飞牛自带漏洞的截图

https://img.nw177.cn/blog/20.routers/2011-lucky反代&雷池防护-01-result-01.webp

这是雷池 WAF 防护到了的图

https://img.nw177.cn/blog/20.routers/2011-lucky反代&雷池防护-01-result-02.webp

这是 Lucky Auth 验证的图

https://img.nw177.cn/blog/20.routers/2011-lucky反代&雷池防护-01-result-03.webp

6 总结

通过 Lucky (入口+认证) -> 雷池 (清洗) -> 飞牛 (业务) 的三层架构,我们实现了:

  • HTTPS 自动续期(Lucky 负责)。

  • WAF 虚拟补丁(拦截 SQL 注入、路径遍历等攻击)。

  • 真实 IP 封禁(解决了反代 IP 丢失问题)。

  • 强制身份锁(Basic Auth 物理隔绝)。

在官方彻底修复漏洞之前,这套方案能让你原本“裸奔”的 NAS 穿上一套“钢铁侠战衣”。折腾虽然麻烦,但数据安全无价!

Created with ❤️ by 十三

推荐使用微信支付
微信支付二维码
推荐使用支付宝
支付宝二维码
最新文章

文档导航

此分类暂无内容