飞牛远程停服?FN Connect 引到 WAF 防护实操
这几天飞牛 OS 爆出的 0day 漏洞传得挺凶,不少没做防护的设备都受影响。
最新进展是:没升到 v1.1.18 的飞牛 OS,将暂停 FN Connect 远程服务。
光升级到新版本,并不能保证以后就高枕无忧。
根本原因在于 FN Connect 的访问方式相对固定,比自建 DDNS 更容易被批量探测;再加上部分用户起的设备名、子域名比较「好猜」,用常见关键词一枚举,很容易命中。我随手试了 nas、mynas、fn、fn-nas、home 这类关键词,确实一查一个准,而且不少设备到现在还没升级修复。
目前官方已说明 v1.1.18 已修复该漏洞,也有说法称修复手段主要是重置 nginx 配置(我这边实测升级后 nginx 会被重置,是否仅靠此修复不确定)。
对咱们普通用户来说,这件事算是个提醒:谁也说不好以后还会出什么新问题。 所以建议至少做两件事:
1️⃣ 尽量用自建穿透或组网,少依赖 FN Connect 的 ID 暴露在公网,缩小被扫到的面。组网可以试试 星空组网:把飞牛 NAS、手机、电脑组进同一虚拟局域网,走 P2P 直连访问,没有固定 ID 可被枚举,暴露面小很多,也不用经过厂商中转。

2️⃣ 加一层 WAF,用现成产品兜住 Web 层可能出现的攻击。
下面就用「把 FN Connect 的 Web 流量引到 WAF,再转发回飞牛 WebUI」的方式,做一层防护。全程以雷池 WAF 为例。
一、把 FN Connect 的 Web 流量引到 WAF
FN Connect 是飞牛自带的远程访问方式,通过官方服务器中转到你设备上的飞牛 Web 管理界面。
查 Nginx 可知,飞牛 WebUI 涉及端口:5666、5667、8000、8001;若你做了 80/443 跳转,还要算上 80/443。
大致的路径是:用户从公网发起访问 → 经 FN Connect 连到你的 NAS → NAS 把本地高位端口(5666/5667 等)的流量转给 FN Connect → 再经官方 80/443 返回给用户。
FN Connect 会自动发现本机 WebUI 配置并做转发,我们没法直接让它「只走 WAF」,所以只能在本机做文章:把发往本机 Web 端口(默认 5666)的流量先转到 WAF 监听端口,再由 WAF 把请求转发回 5666。
实测发现,FN Connect 产生的访问会走本机的 iptables OUTPUT 链(PREROUTING 管的是「从外网进来的包」,OUTPUT 管的是「本机进程发出的包」)。
因此需要在 SSH 里用 root 权限加两条 NAT 规则,把目标为 5666 的流量重定向到 8182(8182 是我这边 WAF 的监听端口,你可改成自己的):
# IPv4
iptables -t nat -A OUTPUT -s 127.0.0.1 -p tcp --dport 5666 -j REDIRECT --to-port 8182
# IPv6
ip6tables -t nat -A OUTPUT -s ::1 -p tcp --dport 5666 -j REDIRECT --to-port 8182
建议:能关 IPv6 就关掉,原因有三:
若有公网 IPv6,更推荐用 DDNS 等方式访问,尽量不要走 FN Connect。
雷池开 IPv6 要专业版。
FN Connect 会优先走 IPv6,若雷池没开 IPv6,这条重定向对 IPv6 流量不生效,防护会漏。
加完规则后,用下面两条命令确认是否生效:
iptables -t nat -L OUTPUT -n -v
ip6tables -t nat -L OUTPUT -n -v
看到 tcp dpt:5666 redir ports 8182 就说明规则已生效。
二、在飞牛上安装雷池 WAF
雷池 WAF 社区版免费,目前用下来 9.3.2 版本 能拦得住这次路径穿越一类的请求。路径穿越、WebSocket 滥用等都算 Web 应用层攻击,雷池个人版自带的防护规则能覆盖,够用。
先在飞牛 Docker 里加一个镜像加速源(如 1ms 等),拉镜像会快很多。
再通过 SSH 连上飞牛,切换到 root(用 Docker 安装需要 root),执行一键安装:
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
脚本会提示输入安装路径,必须是一个空目录,我这里填的是 /vol1/1000/docker/safeline。
安装结束后会给出雷池管理端的访问地址。
先别急着打开页面,在 SSH 里执行:
docker exec safeline-mgt resetadmin
重置一下管理员密码,再用浏览器访问刚才的地址。首次访问可能提示 SSL 证书不受信任,在浏览器里点「高级」→「继续访问」即可。
进控制台后,先改掉默认密码。路径一般是:「通用设置 → 控制台管理 → 控制台用户管理 → 三点菜单 → 修改密码」。有条件的话建议开启 TOTP 双因素。
三、在雷池里配置防护站点
新建一个「防护站点/应用」:
监听端口:删掉默认的 443,改成 8182(若你前面 iptables 用的是其他端口,这里保持一致)。
上游服务器:填你飞牛在局域网内的访问地址(不能填 127.0.0.1 或 localhost,必须用局域网 IP 或主机名)。
保存后,把该站点下的防护模块能开的都打开,先用默认规则即可。
进入站点详情,把访问日志和错误日志打开,方便以后排查。
身份认证建议开启:访问会先经过雷池的认证页,即使有人利用 FN Connect 做路径穿越,也会被挡在登录页前。
在身份认证里设置一套独立的账号密码,专门用于过雷池这一关。
设置好后,用浏览器访问一次,完成首次登录并授权。
再配置攻击防护,打开「语义分析」相关模块。
把相关防护等级全部调到最高。
实测:平衡模式下,这次这种路径穿越请求不会被拦;高强度/严格模式下,雷池会直接拦截。
四、让 iptables 规则开机保留
回到 SSH,安装持久化工具:
apt-get install iptables-persistent
安装过程中提示是否保存当前规则时,选 Yes,这样重启后规则还在。
总结与免责
最后再强调一句:安全没有银弹。
就算开了 HTTPS、双因素、强密码,这次依然有人通过 FN Connect 这条链路被打穿。想从根上减少风险,优先考虑用自建组网(如星空组网)替代 FN Connect 做远程访问;如果暂时还得用 FN Connect,可以按本文思路把 Web 流量引到 WAF 过一遍,多一层防护。
其他服务(比如飞牛影视的 8005 端口)也可以用同样方式,在前面挂一层 WAF。本文只处理了 WebUI 的 5666,不确定 FN Connect 是否还有其他端口或路径依赖,所以有可能带来未知问题。
因此仅供参考,是否照做、以及可能出现的任何问题,由读者自行判断和承担,本文仅提供一种思路,不对后续使用结果负责。

一只懒蚂蚁
校验提示文案
Cainlee
校验提示文案
一只懒蚂蚁
校验提示文案
Cainlee
校验提示文案