有一个 IPv6 防火墙总开关就够了

2022-02-13 15:45:51 +08:00
 LnTrx

2022 年了,很多家用路由器还是没有 IPv6 防火墙的开关,这不应该。
但也有不少人希望路由的防火墙能像 IPv4 那样提供开放端口、控制映射等高级功能,楼主觉得大可不必。

原因如下:

  1. IPv4 下暴露端口最大的威胁是被人扫到,而 IPv6 的 SLAAC 和隐私扩展机制使得终端极难被外部暴力扫描发现(不含网关)。现代操作系统通常自带有防火墙,即使 IPv6 用户的主动访问被探测并发起回访,只要没有乱改配置风险也不大。

  2. SLAAC 和隐私扩展机制使得用户的 IPv6 地址是经常变化的,用户要么需要设法固定地址,要么就得不断调整防火墙配置,无论哪种都非常麻烦。(楼主还没找到可以根据终端 MAC 自动配置的方案,如有还请指出)

  3. 点对点直连才是互联网本来的样子。当用户被 IPv4 NAT 保护惯了,突然回到无阻碍直连的状态反而没有安全感,这才是反常。如果为了顺从过去的习惯,在网关默认屏蔽入站连接,那么当需要开放端口时就又得搞出一套适用于 IPv6 的打洞机制。应该没有人希望在 IPv6 时代还要折腾 UPnP 、NAT-PMP 、Hole Punching 之类的事情吧?

需要指出的是,在 IPv6 地址长期固定的服务端场景下,网关防火墙的精细控制还是有意义的。
如果有考虑不周的地方,欢迎交流讨论。

13653 次点击
所在节点    宽带症候群
65 条回复
LnTrx
2022-02-14 00:27:59 +08:00
@delpo Windows 和部分 Linux 类操作系统的默认采用了 stable privacy addresses ( RFC7217 ),当网络环境变化时“固定”IPv6 地址的后缀也可能改变,需要用户配置才能改成 EUI64 或者固定值

顺便一提,如果防火墙只放通了固定地址,那主机内软件在开启端口时会面临两难:
1. 让外界连接临时地址,那么端口在外网无法直接访问,需要增加复杂性、引入 v6 打洞机制
2. 让外界连接固定地址,那么就相当于架空了隐私扩展,这样做的软件多了就可能关联身份
NXzCH8fP20468ML5
2022-02-14 00:53:48 +08:00
@fetich 群晖这类 NAS 本来防火墙就设计完善,只要不搞弱密码等窒息操作,面对公网完全没问题。引入临时地址还增加了访问难度,所以没有人在意临时地址也是很正常的事情。类似还有 Debian, Ubuntu 等的 server iso 都默认没有开启临时 IPv6 地址。
LnTrx
2022-02-14 01:31:19 +08:00
@LnTrx 更正:Windows 默认采用的是 RFC4941 的方案,地址随机但相对稳定。部分 Linux 类操作系统默认用的是 RFC7721 ,会随着网络环境(如前缀)而变化。
duke807
2022-02-14 04:57:33 +08:00
@v2tudnew 我自己的路由器當然不會用這種垃圾貨,只是對我們程序員來說,遇到用這種垃圾路由器的用戶,日後做產品會麻煩很多。
v2tudnew
2022-02-14 06:44:14 +08:00
@duke807 #24 有什么麻烦?监听端口应该让用户知道自己在做什么对吧?例如远程之类的,就那么监听用户又不知道,这不是安全风险吗?那么让用户自己解决问题好了。
loopinfor
2022-02-14 09:58:59 +08:00
我有个疑问。虽然 IPv6 数量多难以暴力扫描,但是是不是还可以主动搜集呢?
比如我做个垃圾网站页面,通过 SEO 或者 JS 植入吸引很多人来浏览页面,然后记录访问者的 IP 是不是就可以得到一个有效 IP 池了?而且理论上这个 IP 池还可以附带 OS 信息是吧?
delpo
2022-02-14 10:06:10 +08:00
@LnTrx 我看了一下,windows 好像默认的确默认没有开启固定后缀

不过你说的隐私问题我感觉是矛盾的,如果你想在暴露某个端口或者地址供公网访问,那自然就要使用相对固定的地址,才能方便使用。那为什么又要考虑隐私问题呢?如果你觉得可能会暴露 mac 地址,那也可以手动使用 dhcpv6 进行地址分配。
ppbaozi
2022-02-14 11:27:44 +08:00
其实不需要太纠结动态后缀的问题

我用 routeros ,对于非常规的端口比如 bt ,没必要放行到具体的后缀,全局放行就好,毕竟很少会有两台机子撞端口

对于可能存在相同端口的服务,可以根据网口或者 vlan 放行。比如 ap 网口下都是智能家居和娱乐设备,全部 reject ,esxi 网口下,或者 esxi 中某个 vlan 可单独放行
LnTrx
2022-02-14 13:33:53 +08:00
@v2tudnew 监听端口向用户请求授权可以在操作系统内实现,比如现在的 Windows Denfender Firewall 。
IPv6 的高级防火墙即使存在,家庭用户中也只有很小的比例会配置。IPv4 时代的自动端口规则协议大多不适用 IPv6 ,即使未来出现了,那还要考虑不同路由厂家的支持情况、如何配置多级路由等。可以说 NAT 的老毛病很多都回来了。
IPv6 下的打洞相比 IPv4 NAT 确实会简单一点,但作为开发者,肯定还是希望少碰到这种事情。

@loopinfor 这就是我说的“主动访问被探测并发起回访”,也是隐私扩展提出临时 IPv6 地址的原因。

@delpo 典型的服务端需求建议用固定地址,典型的客户端需求建议用动态地址。但是还存在很多客户端需求比如 BT 、Sync 、VoIP 、PS4 ,他们既需要放通端口以提供便利,又可能有隐私顾虑不宜长期固定。家庭宽带的前缀本来就是会变的,如果不是要配置防火墙白名单,后缀的变动本来也不会增加多少问题。路由设成 DHCPv6 不是很推荐,因为地址空间小、安卓设备可能获取不了 IPv6 等,还不如直接固定后缀。
duke807
2022-02-14 13:53:18 +08:00
@v2tudnew 和監聽端口是否讓用戶知道沒有關係

我還是舉上面遠程桌面的例子,可以主動連接的話,A 用戶把自己的 ip 和 pin 告訴 B 用戶,然後 B 就可以協助 A 完成一些操作。

如果不能主動連接,雖然也可以使用 serverless webrtc ,但是讓用戶自行交換 ice 打洞數據会比分享 ip 地址麻煩很多,否則又要引入第三方服務器。
即便引入服務器,也會限制開發人員只能使用 webrtc ,用其他 web 不支持的協議的話,就沒辦法使用 h5 頁面來跨平台,下場是 android ios windows linux 不同平台的程序要單獨寫。
而且,一些低成本的硬件,譬如安防攝像頭 /寵物陪伴機器人,硬件也跑不動 headless webrtc 。

最後補充說一下安全問題,如果不提升終端設備本身的安全性,靠路由器不讓外界通過 ipv6 主動訪問內部主機的意義不大,病毒木馬可以主動連接外界,而且局域網內一台機器中招,其它機器都要完蛋。
v2tudnew
2022-02-14 15:38:17 +08:00
@duke807 #30 你这是要求用户裸奔来达到减少你代码量的目地啊。防火墙是一定要有的,最多也就做成允许某个 IP 开放某些端口,绝不能完全不设防。不允许开放端口这点我是一样喷的,但本身不关 v6 的事情。
病毒木马虽然可以办到,但也必须先被下载运行了,这和你把门打开任何人都可以进完全是两码事,一个是随便进,一个是要先和门卫说一句哪个人几点有预约!
IPv4 NAT/防火墙下也需要用户自行解决端口开放问题,v6 只是解决了用户拿不到公网 IP 的问题,不要把事情复杂化。
v2tudnew
2022-02-14 15:45:53 +08:00
@LnTrx #29 win 那个防火墙就算了,绝大部分用户都是无脑同意的,一个不需要联机的单机游戏都会请求防火墙权限。
开发者就不应该去管路由器防火墙的问题,这都是用户自行解决的事情。难道公司不允许连入就把网管干了?你们只需要在 UA 上提示端口开放检测就可以了。
IPv4 NAT 下 UPnP 也存在各种兼容问题,开发者能穷举所有问题解决吗?
duke807
2022-02-14 16:07:07 +08:00
@v2tudnew
是為了方便所有人
而且在一定程度上保護了用戶私隱,譬如我作為用戶,對於安防攝像頭,我只願意使用不需要接入商業公司服務器的開源攝像頭,不可能把小米這樣的商業攝像頭安裝在家裡自己光屁股走來走去

防火牆我是認可的,自己做產品時,產品說明書指導用戶配置防火牆就行
『不允许开放端口这点我是一样喷的』這點是核心,意見一致就好
cest
2022-02-14 16:15:19 +08:00
@duke807 #33 目前有好用可刷 openipc 的 ipcam 吗?
duke807
2022-02-14 16:21:17 +08:00
@cest 抱歉,不了解 openipc ,我之前用 樹莓牌 zero diy 了一個簡易的,只能湊合用
LnTrx
2022-02-14 17:05:09 +08:00
@v2tudnew
Win 的防火墙好歹还需要同意,UPnP 这种开了以后就是自动配的。你觉得开发者就不应该去管路由器防火墙,但是用户用不了首先会找开发者而不是路由器。即使 IPv6 支持比较好的那些路由器,想让普通用户简单学会也称不上容易,用户搞不懂说不定还是全部关掉了事。

安全与便利是一对矛盾,如何取舍需要智慧。我发本帖的目的在于指出,在 IPv6 下端口暴露被攻击的风险大大降低,而正确配置防火墙的门槛比 IPv4 NAT 还要高,否则很多 IPv6 的优势就无法发挥。对于家庭的应用场景,默认放通入站相比默认拒绝设置例外,对开发者和用户来说都是更好的权衡。在 IPv6 下还要搞防火墙,是不信任硬件自身的防火墙,所以再加一道额外防护措施的小众专业级需求,我觉得不应该成为通行做法。当然,各位分享自己的权衡考量,也有助于大家做出更好的判断。
v2tudnew
2022-02-14 17:45:10 +08:00
@LnTrx #36 你这种需要主动暴露端口通过 IP 才能访问的产品(完全无中心化),也就是说用户还需要配置 DDNS 才能运行,你觉得这算小白产品、用户会完全不知道配置端口开放吗?
然后你提出关闭防火墙,让用户完全暴露出来,依赖随机地址来确保安全性,那么用户访问了别有用心的网站然后被攻击,这算谁的?你这是从厂商为了安全封死防火墙的极端到为了自己方便写代码完全暴露的另一个极端。
UPnP 是自动化,但应用正常情况下只会暴露自己的端口,操作系统那么多漏洞你来个完全暴露,那么你自己的服务器也是全端口完全暴露的吗?
你都提出让厂商关闭防火墙了为啥不去搞个联盟弄个 IPv6 时代的 UPnP 类似的功能出来呢?
LnTrx
2022-02-14 19:33:55 +08:00
@v2tudnew 主动暴露端口通过 IP 才能访问并不等于 DDNS ,例如 BT 、IPFS 、通话、对战等产品也用得上,不一定是专业级需求。
UPnP 和 NAT-PMP 是安全和便利性权衡的经典案例( https://docs.netgate.com/pfsense/en/latest/services/upnp.html ),这表明自动配置端口的需求是广泛存在的,为此可以牺牲一点安全性。
用户访问恶意网站被回访,然后被攻陷的可能性当然存在。对于应用程序级的高危漏洞,如果已经存在 IPv6 时代的类 UPnP 机制,那也可能会被自动放通而中招,网关有没有防火墙可能区别不大。
至于操作系统的高危漏洞,这一般是大新闻(如永恒之蓝),有很多限制条件(比如 Win 防护墙 445 的入站规则限定为本地子网),会很快发布升级补丁。未公开的 0day 不太可能攻击普通用户。而且恶意网站的攻击需要有主动访问恶意网站的行为,不像 IPv4 那样会“躺枪”。所以我觉得风险是可控的,并不是为了方便而忽视危险的极端。
我主帖已经提到,服务端场景下 IPv6 地址是长期固定的。加之地址会被 DNS 公开,有一个高级的网关防火墙还是有意义的。
v2tudnew
2022-02-14 20:09:20 +08:00
@LnTrx #38
BT 、IPFS 、通话、对战 这些都可以通过 UDP 打洞连接(已经在这么用了)
你的观点是因为某些应用本身的漏洞可以被攻击,所以就关闭整个防火墙?这就像本身只有一两个地方漏水,你倒好直接把屋顶掀了(顺便让对方攻击难度降低到几乎为零)。我也不知道该怎么说你了😆,让别人自己思考吧。
发现漏洞到弄出补丁到绝大部分用户都安装补丁这需要多少时间?你觉得风险是可控的因为不是你中毒罢了。你想这么干建议你先从软件控制把人家防火墙关闭做起,不要让别人来背黑锅。
v2tudnew
2022-02-14 20:09:54 +08:00
@v2tudnew #39 IPFS 不了解,补充一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/833550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX