使用Lucky保护你的飞牛,开启waf防火墙,设置IP过滤
摘要
针对飞牛 NAS 近期严重漏洞,本文提出了一套基础加固方案:升级系统并运行查杀脚本;修改默认端口,关闭 FN Connect;配置防火墙默认拒绝策略,并利用 Lucky 添加 IP 白名单;开启 Coraza WAF 防御 Web 攻击。这些措施能大幅提升安全性,但无法保证 100% 安全,最彻底方案是切断外网。
前言
近期飞牛的安全漏洞还是很严重的,希望飞牛团队通过这次事件能够正视安全问题。我自己一是没有中招,二是有一款好用的国产系统真的不容易,所以继续使用飞牛,但还是要尽可能升级一下防护等级。
比较麻烦的是,这次漏洞的成因和利用路径一直没有公开的技术细节,我翻了不少讨论也没找到确切的中招机制。既然不知道敌人从哪进来,那就只能用笨办法:把能堵的口都堵上,把暴露面压到最小。下面这套方法挑选的原则就是操作简单、见效直接、不需要改硬件。
这些方法即使全做了,也不保障 100% 安全,最安全的方法是切断所有外网,只在内网环境使用。

这套措施到底防住了什么
先把话说在前面,免得你照着做完产生错误的安全感。
NAS 被入侵通常是三条路径:一是弱口令/默认口令被字典扫中;二是服务端口直接暴露在公网,被自动化工具批量探测已知漏洞;三是应用层漏洞(比如管理面板的路径穿越、注入类问题)被针对性利用。
本文的做法分别对应这三条:改端口和关服务是缩小第二条的暴露面,防火墙和 IP 白名单是给访问加一道闸门,Coraza WAF 是补第三条的应用层防护。它们不能解决弱口令问题——那是要靠强密码加二次验证解决的,我在另一篇里单独写过(用 Lucky 给服务加手机二次验证)。
一、基础加固:四件必须做的事
1. 升级系统 + 跑一遍官方查杀脚本
截止到目前,官方已经针对漏洞升级过 2 次系统,现在系统版本是 1.1.9,并且要求修改系统密码并关闭 SSH 功能——这两个要求不是形式主义,SSH 一旦开着又有弱口令,等于把命令行直接交出去。
升级完成后,执行官方提供的查杀脚本:
这行命令做了三件事:下载脚本、赋予执行权限、立即运行。脚本会检查系统里是否存在被植入的后门文件或异常进程。如果无法升级,或者脚本明确查出有病毒,别犹豫,直接重装系统——被植入过的系统清理干净的成本远高于重装。

2. 把这几个默认端口全部改掉
改端口不会让服务变安全,但能挡掉绝大部分无差别扫描——互联网上每天都有海量机器人在扫固定的默认端口,端口一改,你的设备在它们眼里就"消失"了。真正被盯上的人才会去做全端口扫描,这是小概率事件。
开启 SSH 功能前,先把
22端口改成其他端口

修改飞牛默认端口,把
5666和5667改成其他值(这两个是管理面板的默认入口)

禁掉
8000和8001端口。这两个端口到现在还能使用,也反映出飞牛团队确实不重视安全——它们属于历史遗留的服务端口,日常根本用不到,能关就关

改端口前建议先记下新端口,改完后 DDNS、手机客户端、浏览器书签里所有指向旧端口的地方都要同步更新,不然会出现"面板打不开"的假故障。
3. 防火墙的正确开法
我的网络结构是主路由华硕(开启防火墙),旁路由 iStoreOS(开启防火墙 + AdGuardHome),入口层已经做了一轮过滤,所以我的飞牛防火墙没有开启。如果你的网络拓扑没有这道前置防线,建议打开。
要特别提醒的是:飞牛防火墙的默认设置基本等于无效。默认策略是放行,你加几条规则只是往上叠加允许项,没有意义。正确的配置逻辑是反过来的:
把默认策略改成拒绝访问
再把真正需要暴露的应用端口作为放行规则填进第一条
目标 IP 可以选择"境内",出入站都这样设置


这套"默认拒绝 + 白名单放行"的思路,下面用在 Lucky 的 IP 过滤上也是一样的。顺便说一句,改完防火墙规则后先别关掉当前会话,用手机的蜂窝网络去访问一次确认能通,再退出,否则规则写错很容易把自己锁在外面。
4. 关掉 FN Connect 和自带 DDNS
FN Connect 是飞牛官方的中转服务,它的便利性是用"多一条外部可达路径"换来的。既然我们已经在用 Lucky 做 DDNS,官方这套中转就没有保留的必要。
顺带把 FN ID 也改掉——FN ID 是设备在网络里的唯一标识,固定不变的话,理论上可以被用来定位设备。改完 ID、关掉 FN Connect 和自带 DDNS 之后,你的设备对外就只剩自己配置的那一个入口。

二、用 Lucky 添加 IP 过滤
我一直使用 Lucky 实现 DDNS 功能,设置简单、功能丰富,仅暴露一个端口就可以实现多个服务的外网访问,使用方法我之前也做过。
选它的理由很直接:它把"反代 + DDNS + 访问控制"合在一个界面里,不用再单独部署一套 Nginx 再去配规则。IP 过滤是它的内置能力,配好之后所有走 Lucky 的服务自动继承这套白名单,不需要一个一个去改。
家用 NAS 主要是内网环境,外网使用对象最好仅限自己及几个人的家庭或团队。真正建站的还是买个服务器吧——家用宽带的上行和稳定性都不适合对外提供服务,出了问题也担不起责任。
配置步骤
1. IP 过滤 → 设置白名单 → 添加子规则。我的飞牛地址是 192.168.2.185,所以内网规则写 192.168.2.0/24

192.168.2.0/24是 CIDR 写法,/24表示前 24 位是网络位,换算过来就是192.168.2.1到192.168.2.254这一整段。写成这个格式,整个内网的所有设备就一次性全部放进白名单了,比逐个 IP 添加省事得多。
2. 添加"境内 IP",IP 列表先留空

3. 添加计划任务,自动获取 IP 列表,可以选择每日更新

4. 下划添加子任务 → 类型选择"IP 过滤规则更新",接口地址查询:https://github.com/metowolf/iplist

5. 手动触发一次,IP 就添加好了


6. 根据需求可以如法添加香港等地区规则。手机无法访问的话,还需要添加手机运营商的 IP 段

7. 添加自动记录 IP 设置,添加安全入口,复制链接,保存配置

打开链接,说明配置好了。

会多一条自动配置的规则。

8. Web 服务 → 右键 → 编辑

IP 过滤规则选择白名单,保存后就设置完毕了。

为什么列表必须每天自动更新
这一步最容易被忽略,但很关键。国内运营商的 IP 段并不是固定不变的,会定期调整和扩充;如果你的手机是动态 IP,每次重连拿到的地址都不一样。列表如果不更新,你会发现"昨天还能访问,今天突然被拦了"。
所以计划任务一定要开着,让它每天从 iplist 拉一次最新的国内 IP 段。iplist 这个项目的做法是定期从 APNIC 等权威来源生成各地区的 IP 段列表,比手工维护靠谱得多。
几个容易踩的坑
现象 | 原因 | 处理办法 |
|---|---|---|
手机流量访问不了,WiFi 正常 | 手机运营商 IP 段不在白名单里 | 如法添加对应运营商的 IP 规则 |
自己突然被拦在外面 | 白名单没包含当前出口 IP | 提前配好"安全入口"链接,或改用内网地址访问 |
加地区规则后部分服务异常 | 反代回源流量被自身规则拦了 | 确保内网段 |
IP 列表一直为空 | 计划任务没触发或接口地址填错 | 手动点一次"触发",确认接口返回正常 |
三、给 Web 服务加上 Coraza WAF
以下内容整理自 Lucky 作者的文档说明。
WAF 解决的是哪一层问题
IP 白名单解决的是"谁可以访问",WAF 解决的是"访问的内容有没有问题"。哪怕对方 IP 在白名单里,一个精心构造的恶意 URL 依然可能触发管理面板的漏洞——WAF 就是在请求真正到达后端之前,把这类请求拦下来。
Coraza 是一款功能强大的企业级 OWASP Web 应用程序防火墙。自 2.12.0 版本起,Coraza 已集成于 Lucky(万吉)的 Web 服务中。这里只讲快速设置方法,详细说明请访问官方文档。
请注意,不建议在硬件配置较低的路由器上运行万吉的 WAF。 原因很简单:WAF 的每一条规则都要对每个请求做模式匹配,请求量一大就是纯 CPU 消耗。低配设备跑起来会明显拖慢访问速度。
配置步骤
1. 创建和配置 Coraza WAF 实例
如果只是简单使用,可以直接创建一条规则,选择类型为"OWASP 核心规则集":勾选所有规则或按需选择,系统将自动调用内置的规则集。如果只是用于防御路径穿越攻击,只需勾选 901、930、949 三条规则即可。

登录 Lucky 后台(默认
http://IP:16601/安全入口),进入左侧菜单栏 → Coraza WAF

添加实例

自定义实例名称,如"基础防护",然后点击添加规则按钮

点击规则列表 → 类型选框,下拉菜单中选择"OWASP 核心规则集"

勾选 901、930、949 三条规则,保存即可


2. 应用 WAF 实例
Lucky 中的 WAF 配置是**"按服务独立启用"**的,在每一个"Web 服务"中按需绑定。也就是说:
可以为飞牛 OS 管理页面开启这个 WAF 实例
为 Docker 部署的 qBittorrent 单独开启或关闭
为 Bitwarden 绑定同一个 WAF 实例
也可以为不同服务绑定不同的 WAF 实例(比如一个用"基础防护",另一个用"高强度防护")

这种粒度的好处很实际:像 PT 下载、媒体串流这类对性能敏感的服务可以只挂轻量规则,而管理面板这种低频但高价值的入口可以上全套规则。
进入左侧菜单栏 → Web 服务

选择需要配置的子规则 → 修改子规则 → Coraza WAF → 选择已创建的 WAF 实例,保存即可自动应用

3. 测试是否生效
在已开启防护的 URL 后添加 ?test=../../ 参数,如被拦截则说明路径穿越防护已生效。例如 https://域名/?test=../../../
URL 参数中包含
?test=../../../是典型的路径遍历(Path Traversal)攻击测试,也称为目录遍历。这是黑客或安全测试人员探测 Web 应用程序安全漏洞的一种常见手法。生效表现:页面被拦截(显示 403 Forbidden,Lucky/WAF) 未生效表现:页面能正常打开或显示 404
四、内网穿透这件事,我的建议
这类软件、技术众多,各种声音都有,看下来最好不用,用就用大厂的。种类选择不暴露端口的,比如异地组网、VPN 等技术的,不要用地址转发或端口映射的。
这两种做法的差别在于:端口映射是把你的服务直接摆到公网上,任何扫到端口的人都能尝试攻击;而异地组网(如 Tailscale、ZeroTier)是在设备之间先建立一条加密隧道,服务本身不对外开放,外部扫描根本看不到端口。
我之前推荐的公益 frp 虽然免费,但我自己已经不用了——免费中转节点的稳定性和隐私边界都不透明,把自己的管理后台挂上去,等于把钥匙交给一个不了解的第三方。
五、常见问题
Q:改完端口后 Lucky 反代失效了?
反代的目标地址要同步改成新端口。管理面板端口改了,Lucky 里"回源地址"那一项也要跟着改,否则它会一直往旧端口发请求。
Q:防火墙开了之后 DDNS 更新失败?
DDNS 更新是设备主动向外的请求,检查出站规则是否被默认拒绝策略挡住了。出站建议放行内网到任意,或者至少放行 DNS(53)和 HTTP/HTTPS(80/443)。
Q:WAF 开启后某些正常功能报错?
说明该请求命中了规则。先把规则集缩到 901/930/949 三条基础规则试试,确认是哪个服务受影响后,再为该服务单独绑定更宽松的实例,而不是直接全局关掉 WAF。
Q:这些做完还需要开二次验证吗?
需要,而且优先级更高。端口隐藏和 IP 白名单防的是"无差别扫描",二次验证防的是"拿到了密码"。Lucky 支持给服务加手机二次验证,配置不难,建议一并做上。
最后
把这一套做下来,你的飞牛大致从"默认配置直接联网"变成了"只有白名单 IP、只能从非默认端口、只能通过 WAF 过滤的请求才能碰到管理面板"。这个防护强度对家用场景已经足够了。
再说一遍开头那句话:这些方法即使全做了,也不保障 100% 安全。安全加固的本质是提高攻击成本,不是造一个绝对打不穿的壳。真的把安全当第一诉求,最彻底的方案永远是切断外网访问,只在内网使用。
相关文章
暂无相关文章
