为 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ファイアウォールの構築

发表回复

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