为 Unraid 开启 ipv6 防火墙

最近 Arteria 这家 ISP 抽风,IPv4 很难用,于是便把 Unraid 的 IPv6 打开了。由于这边的 DHCP v6 和 RA 均为 Relay,路由器防火墙不能管理 IPv6 的数据包,这也就导致开启了 IPv6 的 Unraid 服务器直接暴露于 IPv6 公网中。并且 Unraid 默认并没有任何防火墙设置,很不安全。
但 Unraid 系统内有安装 iptables 和 ip6tables,所以配合 User Scripts 这个插件,我们便可实现启动后自动设置 ip6tables 的操作,进而强化服务器安全性。

首先在 Unraid 中安装 Community Applications 插件以开启应用中心,接下来安装 User Scripts 插件。
安装完成后在 “设置-用户实用程序” 中即可找到 User Scripts 入口,进入后点击 Add New Script 即可创建新的脚本。
大致规则就是下面这样,需要放行其它端口自己添加就行(建议不要把控制台的 80/443 端口暴露于公网上)。最后设置 Schedule 为 At Startup of Array 即可,这样重启后便会自动应用 ip6tables 的规则了。

顺便记录一下:
-A:将规则追加到链的末尾。
-I:将规则插入到链的指定位置,默认为链的开头。
这两个选项的使用取决于你希望新规则在链中的优先级。通常情况下,越早被匹配到的规则越优先被应用,所以如果需要优先处理某些规则,使用 -I 插入到前面的位置会更合适。
也就是说如果你要使用 ip6tables -A INPUT -j DROP 来丢弃数据包,则需要将该规则放到末尾。

#!/bin/bash
# 设置默认规则为 DROP
ip6tables -P INPUT DROP
# 允许 DHCPv6 的相关数据包
ip6tables -A INPUT -p udp --dport 546 -j ACCEPT
ip6tables -A INPUT -p udp --dport 547 -j ACCEPT
# 允许 ICMPv6 目的地不可达消息 type 1
ip6tables -A INPUT -p icmpv6 --icmpv6-type 1 -j ACCEPT
# 允许 ICMPv6 分组过大消息 type2
ip6tables -A INPUT -p icmpv6 --icmpv6-type 2 -j ACCEPT
# 允许 ICMPv6 时间超时消息 type3
ip6tables -A INPUT -p icmpv6 --icmpv6-type 3 -j ACCEPT
# 允许 ICMPv6 参数问题消息 type4
ip6tables -A INPUT -p icmpv6 --icmpv6-type 4 -j ACCEPT
# 允许路由通告消息 (RA) type 134
ip6tables -A INPUT -p icmpv6 --icmpv6-type 134 -j ACCEPT
# 允许邻居请求消息 (NS) type 135
ip6tables -A INPUT -p icmpv6 --icmpv6-type 135 -j ACCEPT
# 允许邻居通告消息 (NA) type 136
ip6tables -A INPUT -p icmpv6 --icmpv6-type 136 -j ACCEPT

# 允许已经建立和相关的连接的数据包
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 为 transmission 开启 IPv6 端口
ip6tables -A INPUT -p tcp --dport 51413 -j ACCEPT
ip6tables -A INPUT -p udp --dport 51413 -j ACCEPT
Bash

参考资料
iptablesを使ったIPv4/v6ファイアウォールの構築

“为 Unraid 开启 ipv6 防火墙”的3个回复

  1. 大佬有用 Unraid-Cloudflared-Tunnel 吗?这玩意需要开什么端口吗?有没有其他防火墙方案?软路由啥的?
    这个感觉配置起来危险又麻烦,我还搜了下 iptables 可视化,目前没有比较方便落地的方案

    1. 我没有用过 Cloudflare Tunnel,但看了一下文档 (https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) Cloudflare Tunnel 应该只需要放行出站流量和允许已经建立和相关的连接的数据包就行了。

      如果你的 Unraid 是在路由器后面且没有打开 DMZ 和 IPv6 的话根本不需要在 Unraid 上配置防火墙,只需要管理好路由器的端口转发规则即可。另外我写的这个 iptables 规则是默认丢弃所有入站流量、除一些必须的数据包和端口外只放行了 51413 端口的流量,(我觉得)已经很安全了。

      另外我不知道为什么需要可视化,你就一个链的话直接往里面写规则就行了啊(而且很不推荐在 Unraid 上搞花里胡哨的东西,它底层是 slackware,什么包都没有麻烦的要死,甚至前一段的 openssh 漏洞 CVE-2024-6378 他们社区都没啥反应(

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注