QNAP QuFirewall 防火墙配置和虚拟网络设备管理

QNAP QuFirewall 防火墙概览

QuFirewall 是 QNAP NAS 设备上的防火墙功能,用于管理网络流量、控制数据包的流向和访问权限。在启用 QuFirewall 防火墙时,默认不会存在开放所有端口的规则,以提高网络安全性。

  • 默认规则和安全策略
    当 QuFirewall 开启时,默认不会有如下规则:

    ☑️ - 接口[ALL] - 服务端口[任何] - 协议[任何] - 来源[任何] - 权限[允许]

因为这样的规则将导致防火墙不再限制任何端口的流量,仅进行一些基础的安全防护。例如,在指定时段内多次尝试登录失败时,系统将自动阻止恶意 IP 地址,提高对 SSH、FTP、HTTP/HTTPS 等服务的破解抵抗能力。

  • 防火墙策略的配置

在大局域网中,NAS 设备相对较为安全。但在公网环境下,用户可能希望开放部分服务端口以供外部访问,同时又需要限制不必要的 IP 段的扫描。这时可以配置 QuFirewall 仅允许来自中国的流量,以有效保护免受互联网上的恶意扫描攻击。

当用户使用 ZeroTier、Tailscale 等服务时,它们通常会创建虚拟网络设备。由于 QNAP 防火墙无法识别第三方创建的虚拟网络设备,导致流量无法通过这些设备进入 NAS,只能从 NAS 流出。这可能导致 NAS 可以 ping 通其他设备,但其他设备无法 ping 通 NAS 的 IP。
QNAP 无法识别虚拟网络设备的情况下,可能导致 NAS 无法建立到虚拟网络的双向通信。这是因为防火墙默认不会包含虚拟设备的规则,导致进入 NAS 的流量被阻止,仅有流出的权限。

手动添加虚拟网络设备规则

为了解决虚拟网络设备流量无法进入 NAS 的问题,可以使用 Linux 系统命令 iptables 手动配置防火墙规则。当启用 QuFirewall 防火墙时,系统会自动创建一个名为 QUFIREWALL 的链,用于配置防火墙策略。通过运行命令 iptables -L QUFIREWALL -v 可以查看当前防火墙规则。

  • 首先要查看虚拟网络设备名,ZeroTier 创建的设备名是 ztfp6pggry
    当ZeroTier加入第二个Network ID后,会新增加类似ztrf2u52bz的名字,以zt开头的设备,这时就存在多个虚拟网络设备。
    第二个命令可以查找以zt开头的设备名字

    ip link show
    ip link show | awk -F'[[:space:]]|:' '/zt/ && NF>2 {print $3}'

  • 要手动添加虚拟网络设备,可以使用以下命令:

    iptables -I QUFIREWALL 1 -i ztfp6pggry -j ACCEPT

  • 也可以使用下面代码,避免多次运行导致规则列表中出现冗余的重复规则

    iptables --check QUFIREWALL -i ztfp6pggry -j ACCEPT || iptables -I QUFIREWALL 1 -i ztfp6pggry -j ACCEPT

这将允许虚拟网络设备 ztfp6pggry 的所有流量通过QUFIREWALL防火墙。
运行 iptables -L QUFIREWALL -v 可以查看数字部分(如 pkts bytes),表示有多少数据包和字节数通过该规则,如果这个数值不断变大,表示该设备有流量通过,证明我们说的这个设备已经被系统防火墙接纳。
以下是运行iptables -L QUFIREWALL -v 的示例输出:

Chain QUFIREWALL (1 references)
 pkts bytes target     prot opt in     out     source               destination
  250 85642 ACCEPT     all  --  ztfp6pggry any     anywhere             anywhere
    0     0 ACCEPT     all  --  docker0 any     anywhere             anywhere
    0     0 ACCEPT     all  --  lxdbr0 any     anywhere             anywhere
    0     0 NFLOG      all  --  !lo    any     anywhere             anywhere             match-set PSIRT.ipv4 src nflog-prefix  "RULE=4 ACT=DROP"
   48 21272 ACCEPT     all  --  br0    any     192.168.1.0/24       anywhere
    9   456 ACCEPT     all  --  !lo    any     anywhere             anywhere             -m geoip --source-country CN
   18  5684 NFLOG      all  --  !lo    any     anywhere             anywhere             nflog-prefix  "RULE=15 ACT=DROP"
   18  5684 NFLOG      all  --  !lo    any     anywhere             anywhere             nflog-prefix  "RULE=15 ACT=DROP" nflog-group 1
   18  5684 DROP       all  --  !lo    any     anywhere             anywhere

删除虚拟网络设备规则

如果需要删除已添加的虚拟网络设备,可以使用以下命令:

iptables -D QUFIREWALL -i ztfp6pggry -j ACCEPT

注意

  • 当关闭/开启防火墙后,我们手动配置的 ztfp6pggry 在防火墙列表里会看不到,但是流量转发规则还存在。
  • 当 QNAP 系统重启后,此条规则会失效,需要重新手动配置。
  • 通过以上配置,用户可以更灵活地管理防火墙策略。

以上内容是在配置 ZeroTier 过程中发现的问题和解决方法,顺便写下来,作为备忘录。