V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acess
V2EX  ›  信息安全

日经小白问题: IPv6 下直接暴露在公网上,是不是安全方面有隐患?

  •  
  •   acess · 2021-09-18 23:44:00 +08:00 · 9827 次点击
    这是一个创建于 1161 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前经常听说 IPv6 地址空间大,所以 IPv4 下 zmap 这种高效扫描工具能不到 1 个小时就扫遍全网这种事情已经不再可能了。

    怎么说呢?

    我觉得这种说法貌似是有道理,但稍微想想……

    有几个人上网从来就没点击过什么奇怪的链接?(虽然有安全意识的人都知道链接不能乱点)
    也许一不小心、甚至毫无察觉的情况下(比如劫持、XSS ),就访问了什么奇奇怪怪的网站,然后——对方很显然就直接能知道你的 IPv6 地址了啊。

    虽然这样是守株待兔的,只能被动等着你上钩,相比主动扫描影响确实相对小多了,但并不是说就没影响了。

    相比而言,如果是 NAT 下的 IPv4,那他获取到的只是 NAT 网关的 IP 地址,并不能直接借助这个地址深入到内网(当然如果是 UPnP 、NAT-PMP 之类映射了那当然还是能访问到内网,不过我想有不少本来就不想暴露在公网的东西,从一开始就并不会支持 UPnP 之类的)。


    关于 Windows 防火墙……根据我现在的理解:

    貌似 Windows 防火墙是分“区域”的,默认是“公用网络”,比如我连了公共 WiFi 这种,我肯定不希望我的端口直接暴露出去;但有的时候,比如 BT 下载之类的,暴露一下可能也无妨。
    如果是我把笔记本背回家了,连的是家里的 WiFi,那么就切换到了“专用网络”。在家里的话,比如 SMB 共享,我希望可以在别的设备上访问,于是很多时候这些端口就是暴露的。

    于是问题来了,其实在“专用网络”下,我也不想让我家局域网之外的其他设备访问我的 SMB 共享不是么。

    我看了一下 Windows 防火墙高级设置,里面好像也没有限制远端 IP 地址。那么……

    如果是 NAT 下的 IPv4,那么“天然”就是只有我局域网里的手机啦、平板啦、第二台电脑啦……只有这些我家里的、自己的设备才能访问我的 SMB 共享。
    如果是 IPv6 呢?没有 NAT 了,那我的 SMB 共享岂不就是直接暴露在公网上了么?


    (当然也可以吐槽“专用网络”这个分类本身就太过笼统……比如一个学生,在寝室里愿意开放给舍友访问的东西,和放暑假回家后、在家里愿意开放给家里人访问的东西,很可能并不重合……但这其实是另一码事了)


    搜了一下,貌似有人说 OpenWrt 默认的防火墙规则,会默认阻止入站连接。但是运营商的光猫什么的就不好说了,貌似一般就是没有 NAT 、也没有这样的防火墙规则。(稍微搜了一下,貌似也有光猫可能有阻止入站的规则?但好像这个甚至都没在 web 界面给出选项,都需要 telnet 上去直接改配置文件,更遑论细粒度地放行某个设备或端口)

    ( IPv6 的 NAT 是啥情况我也不知道。IPv4 貌似很多时候提到的都是 NAPT,而且即便能打洞大多也是端口限制型锥形 NAT 这种,貌似只要不是刻意打洞就并不怎么暴露。IPv6 据说是“真正的 NAT”,也就是说地址是一一映射的?那么也许 v6 的 NAT 很多时候并不能起到阻挡入站连接的效果了)

    (另外其实我还在想一个问题,就是 IPv4 的 NAT 下有 UPnP 、NAT-PMP 之类协议能自动设置端口映射——虽然这些协议好像还是不能解决多层嵌套“级联”的问题……那么 IPv6 呢?如果说都是像(据说) OpenWrt 那样防火墙规则直接默认阻挡入站了,那如果一个 app 想像之前 UPnP 一样“开洞”要怎么办呢?是不是只能弹窗要求用户手动去设置?)


    另外其实我还想到一件事,就是 Electrum 这个 BTC 钱包曾经爆过的一个高危漏洞,在浏览器访问恶意网页时,因为 Electrum 钱包在运行时就监听本地端口开了一个 RPC 服务器,可以被浏览器里的恶意网页(比如 JS 代码?)访问,于是就可以直接窃取钱包里的资金或私钥(如果钱包没设密码的话,如果设置了密码也仍然有隐私泄露问题,也就是 BTC 地址可以被得知)。
    当时的修正措施是让 Electrum 的 RPC 服务器在响应头里加入一条来禁止 CORS,不过当时就有人说这样修得其实并不算彻底。

    一方面可以说,像 Electrum 的这个 RPC 漏洞,就是被动守株待兔的典型,并不是主动去“扫描”,但很显然一样很致命、很严重。

    但另一方面其实也可以说,Electrum 已经监听本地回环地址 127.0.0.1 了(如果我没记错的话),于是这反过来可以挑战上文提到的“IPv6 相比 NAT 下的 IPv4 会增加暴露面”这个概念——不说什么 IPv4 还是 IPv6 、是公网 IP 还是内网私有 IP,即便你监听的是本地回环地址又如何,不是照样有可能“暴露”么,虽然这大概因为浏览器环境所以受到一定的限制(大概就是……只能是 HTTP(S)、FTP 之类等浏览器能支持的协议,而且还会受 CORS 限制?)
    第 1 条附言  ·  2021-09-20 11:15:43 +08:00
    今天拿到一台电信版 TP-Link 路由器,感觉官方的设置界面里好像也没有怎么提到 IPv6 的防火墙。防火墙里有三个级别:
    (1)高:默认为高等级,广域网设备无法直接访问本路由和局域网设备。
    (2)中:允许广域网设备通过内外部端口的映射关系访问局域网设备(需在虚拟服务器功能设置具体规则)。
    (3)低:允许广域网设备直接访问 DMZ 主机(需在 DMZ 主机功能中设置具体主机地址)。
    然后 DMZ 和虚拟服务器(端口映射)这两个地方里好像都没提到 v6 的事情,范例里都是 v4 地址。

    至于光猫,虽然我的光猫魔改过、把设置界面从电信改成通用了,但是里面好像也没看到有 IPv6 防火墙相关的设置选项。XML 配置文件里貌似有一项顾名思义有点像,但我修改后好像也没产生什么效果,并没有阻挡入站连接。不过这个光猫固件也挺旧,貌似是 2017 年的。
    第 2 条附言  ·  2021-09-20 12:27:30 +08:00
    实测了一下,我这边光猫和 TP-Link 路由器里的“防火墙”好像都压根不管 v6 的,v6 入站连接畅通无阻……
    而且,貌似只有光猫桥接、路由器拨号,或者光猫拨号、路由器“桥模式”,这 2 种情况下,v6 才能通。如果是光猫拨号、路由器设置为“路由模式”(非“桥模式”)“自动获取地址”这种配置,我尝试了各种组合,都没能调通路由后面的 v6 。
    第 3 条附言  ·  2021-10-28 13:41:45 +08:00
    在维基百科上火星了一个东西(虽然这贴主要说的是 v6 ,然而 PCP 这个还是 IPv4 下折腾端口映射用的):
    在电信级 NAT 网络中,即使消费者端的路由器可能已配置为端口转发,ISP 处运行 CGN 的“主路由器”仍将阻止端口转发,因此实际的端口将不是消费者配置的端口。[6]为了克服前者的缺点,端口控制协议(英语:Port Control Protocol )( PCP )已在 RFC 6887 中标准化。
    40 条回复    2022-01-23 13:30:30 +08:00
    villivateur
        1
    villivateur  
       2021-09-18 23:49:31 +08:00 via Android
    我最近也在考虑这个问题,但这个问题显然可以用防火墙解决,不管什么系统都有限制远端地址的功能,直接只允许同网段 ipv6,以及本地 ipv6 地址的连接即可
    villivateur
        2
    villivateur  
       2021-09-18 23:50:25 +08:00 via Android
    楼主可以再多看看 ipv6 的原理什么的,思而不学则殆
    learningman
        3
    learningman  
       2021-09-18 23:55:34 +08:00 via Android   ❤️ 1
    就算是浏览器不支持的协议,也有可能构造 payload 的
    acess
        4
    acess  
    OP
       2021-09-18 23:56:06 +08:00
    @villivateur 啊,确实,IPv6 也有 link-local 地址……如果 Windows 默认没在规则里填写这个限制,自己去仔细设置一下其实就可以了。
    swulling
        5
    swulling  
       2021-09-19 01:02:39 +08:00
    1. 大部分路由器(已经支持 IPV6 )的情况下,都默认都屏蔽了 IPV6 的传入链接(但可能会允许 Ping,具体看策略),保留传出链接。此时就算给你分配的 IPV6 地址,你可以访问外部的 IPV6 网站,但是外部无法通过你的 IPV6 地址访问你。

    2. 那么同时就可以在路由器上配置允许外部 IPV6 连入功能(已 ASUS 为例,叫 IPV6 防火墙)

    3. 此外大部分服务只会监听 0.0.0.0,很少监听::

    结论:你考虑的事情卖路由器的已经考虑了。
    swulling
        6
    swulling  
       2021-09-19 01:04:08 +08:00
    基本上所有内网的安全标配就是屏蔽 IPV6 传入,这个也没啥困难的,加一个 ACL 就行~
    swulling
        7
    swulling  
       2021-09-19 01:06:25 +08:00
    4. ISP (联通、电信等)也有可能屏蔽部分端口的传入链接,防止你违反建站,如 80 443 等
    ysc3839
        8
    ysc3839  
       2021-09-19 01:14:17 +08:00 via Android
    我上的大学的 IPv6 网络就是禁止外部连入的。
    jim9606
        9
    jim9606  
       2021-09-19 01:27:29 +08:00
    严格来说:是的。
    例如在 IPv4 下,你一个服务监听 0.0.0.0,你可以认为只有在 NAT 网关后面的局域网主机可以访问你的服务,完全不设防也不用怎么担心被公网扫描器扫到。但如果你监听[::],那你得小心得知你的主机 ID (后 64 位)的扫描器。
    不过 Windows 默认还是有防范的,自带的 SMB 等服务默认只开放给本地子网(也就是 /64 相同的源地址)

    一刀切禁止传入 IPv6 的问题就等于是放弃 P2P 了,要知道这可是 IPv6 的重大优势。我这边教育网是只开放给教育网,也就是其他高校可以传入。
    hs0000t
        10
    hs0000t  
       2021-09-19 01:40:19 +08:00 via Android
    现在光猫都自带防火墙,默认禁止所有 ipv6 传入
    tril
        11
    tril  
       2021-09-19 01:48:16 +08:00
    虽然你拿到的是公网 ip,但对你家的路由器上的防火墙来说,你还是内网,路由器会和 ipv4 一样屏蔽所有的入站连接,你需要开放端口到公网的话也需要和 ipv4 的端口转发一样去路由器手动配置,并不会直接开放到公网。这和云服务器的 web 防火墙是类似的。

    如果考虑到防火墙设置错误的情况,防火墙允许了所有入站连接,那确实比较危险。nat 下被黑的一般是防火墙本身,linux 被黑没那么容易传染给 windows 设备,公网 ipv6 就直接黑你电脑了。

    实在担心,可以考虑回归 nat,反正 ipv6 也有 fd00::/8 供你做内网地址,就是 nat66 的兼容性可能没那么好。

    ipv6 也有 upnp 。
    crab
        12
    crab  
       2021-09-19 02:41:42 +08:00
    家用如果经过路由器只要不开放在 DMZ 区域或者映射端口,不管 ipv4v6 默认不就是在内网,外网怎么扫啊。又不是几十年前电话线 adsl 猫拨号后直接接电脑在公网冲浪。
    imdong
        13
    imdong  
       2021-09-19 03:07:10 +08:00 via iPhone
    如果我没记错,你的每台设备都会被分配至少两个 v6 地址,一个是相对动态的,临时的地址,用于出口,每隔一段时间就会失效。

    而同时,还有一个相对固定的地址,主要用于入站。

    对于你访问的网站,获取到的是动态地址,这个地址是可以屏蔽所有主动请求的,甚至你可以每分钟,每秒钟,或者每个网站都使用不同的出口 v6 地址。

    而对于你的服务,实际应该监听在固定 v6 上,防火墙应该允许到这个地址的部分访问。而这个地址,是不会被主动暴露的,被动扫描的话,那个效率你懂的。
    jim9606
        14
    jim9606  
       2021-09-19 06:02:33 +08:00
    @tril 如果环境需要靠 NAT66 来提供安全性,那基本有条件上防火墙。至少目前市面上的路由器都是带防火墙的,有些甚至不能关。
    而且好像也没多少路由实现了 UPnP WANIPv6FirewallControl 。
    ihipop
        15
    ihipop  
       2021-09-19 08:24:05 +08:00 via Android
    正常的路由器 /电信光猫都有默认配置,只允许家庭内部 v6 主动发起对外链接
    小白就用正常路由器就行了,爱折腾的朋友为自己的行为负责
    delpo
        16
    delpo  
       2021-09-19 08:32:00 +08:00
    我来说一个其他方面的风险
    现在用移动网络也能获取 ipv6 地址了,而运营商的网关一般是没有防火墙阻止入站流量的,那我只要知道某人的 ipv6 地址,就可以无限发数据包,然后他的流量很快就会被耗尽,即使手机本身有防火墙也不能阻止流量的消耗
    shynome
        17
    shynome  
       2021-09-19 08:43:14 +08:00 via Android
    @delpo 你怕是不知道 2n**64n 有 22 位,比你的密码还要长,而且移动网络基本只存在 1 小时左右
    delpo
        18
    delpo  
       2021-09-19 08:57:30 +08:00   ❤️ 2
    @shynome 当然不可能靠猜测得到 ipv6 地址,但是想要获取的话方法还是挺多的
    比如说陌生人发给你一个链接,你点了就会被记录 ip
    再或者使用语音聊天的时候 webrtc 也很容易暴露 ip
    cwbsw
        19
    cwbsw  
       2021-09-19 11:17:57 +08:00
    如果说都是像(据说) OpenWrt 那样防火墙规则直接默认阻挡入站了,那如果一个 app 想像之前 UPnP 一样“开洞”要怎么办呢?是不是只能弹窗要求用户手动去设置?)
    -------------------------------
    不需要。参考 FaceTime,在服务器帮助下节点之间是能够直连的。因为 IPv4 是 NAT+防火墙,而 IPv6 只有防火墙,双方节点在服务器帮助下拿到对方地址和端口后只需同时向对方发包就能在防火墙建立状态。
    v2tudnew
        20
    v2tudnew  
       2021-09-19 11:31:14 +08:00
    三个字:防火墙
    acess
        21
    acess  
    OP
       2021-09-19 11:44:33 +08:00
    @cwbsw 这样其实还是需要第三方服务器协调吧。
    另外 TCP 也可以么?
    cwbsw
        22
    cwbsw  
       2021-09-19 12:23:56 +08:00
    @acess VoIP 、游戏联机本来就有服务器的啊。如果你需要长期固定端口提供互联网服务,那自然还是需要配置防火墙的。
    pcslide
        23
    pcslide  
       2021-09-19 12:48:32 +08:00
    现在主流操作系统(包括手机),都支持随机生成 ipv6 后缀,哪有什么暴露问题?
    codehz
        24
    codehz  
       2021-09-19 13:01:33 +08:00
    没有 NAT 不代表就是直接暴露在公网,随机后缀只是为了隐私(避免猜测内网设备数量),防火墙和 NAT 完全是正交的关系。。。
    codehz
        25
    codehz  
       2021-09-19 13:06:41 +08:00
    关于家庭网络的防火墙问题,不应该由 windows 来解决,而应该是路由器上设置规则,毕竟关于哪些地址是外部的,只有路由器有这个能力去识别(当然你可以说按前缀,但是如果你的网络拓朴有两层呢,本地的防火墙设置得多复杂才能处理?
    expy
        26
    expy  
       2021-09-19 14:05:48 +08:00
    ipv4 也有不搞 NAT,一台设备一个公网 IP 。安全问题让防火墙解决。
    1arry
        27
    1arry  
       2021-09-19 18:18:36 +08:00
    入侵 lz 的 IPv6 是有什么好处吗?如果没有,lz 的 IPV6 需要做做 SEO 才能不安全吧。
    opengps
        28
    opengps  
       2021-09-19 20:34:18 +08:00
    目前的自动扫描器破解工具还有很多不支持 ipv6 的,所以攻击相对没有那么多
    exploreexe
        29
    exploreexe  
       2021-09-19 22:12:43 +08:00
    要是为了安全,就别这么干呀。
    非要把自己置于风险之下 干嘛呢
    acess
        30
    acess  
    OP
       2021-09-20 11:07:33 +08:00
    @swulling
    @jim9606
    以前没在用 v6 的时候太留意过,现在回想起来好像还是有一些服务会同时监听 v4 和 v6 ?具体是啥情况我也不是很清楚。
    acess
        31
    acess  
    OP
       2021-09-20 11:20:45 +08:00
    @swulling
    @hs0000t
    @tril
    @codehz
    我手头的一台老光猫和新的电信版 TP-Link,好像设置界面里都没找到 IPv6 防火墙……
    hs0000t
        32
    hs0000t  
       2021-09-20 11:28:02 +08:00 via Android
    @acess 电信不熟,我家用的联通,要找客服发工单,等电话来以后要管理员密码,然后在 http://192.168.1.1/CU.html 里改防火墙配置,默认只有高中低三档,管理员进去能看到具体的条目
    acess
        33
    acess  
    OP
       2021-09-20 11:41:35 +08:00
    @hs0000t 我这个光猫也有防火墙选项,但里面翻来翻去也没有 v6 相关的选项,实测也没有阻挡入站连接。
    acess
        34
    acess  
    OP
       2021-09-20 11:53:29 +08:00
    我去……我稍微观察了一下,TP-Link 的这个防火墙……好像就是新加了一个开关,调到“高”其实就是帮你关掉虚拟服务器(端口映射)和 DMZ 主机这俩功能😂
    实测这个“防火墙”调到“高”之后,(光猫桥接、路由器拨号的情况下) v6 入站连接依旧畅通无阻……
    yanqiyu
        35
    yanqiyu  
       2021-09-20 16:34:21 +08:00
    我更加倾向于设备自己实现防火墙(主要是小米的老款路由器默认拦截所有 v6 入站不给关让我恼火了一段时间)
    Windows 上不太了解,但是在我的 Linux 工作站上是按照 source ip 段设置了防火墙规则的,设备所在的 /64 段就是内部,其他的都是外部
    对于手机上一开始就不应该监听任何端口 (刚才 nmap 了一下,确实没有监听端口,要是有的话建议和厂商对线或者卸载对应 APP )

    不过归根结底还是监听所有地址不可取,需要监听 [::] 的服务其实屈指可数,要是多到了难以管理的话我认为是一开始的设计问题。
    zed1018
        36
    zed1018  
       2021-09-20 20:55:52 +08:00
    所以现在 Windows11 上无论在家还是在公司都推荐用“公开网络”配置。
    acess
        37
    acess  
    OP
       2021-09-20 22:16:20 +08:00
    @zed1018 其实“公用网络”真想开的话各种服务还是都能开的……我没感觉到这个模式和专用网络有啥本质区别……
    acbot
        38
    acbot  
       2021-09-20 23:04:57 +08:00
    v6 时代防火墙的重要性就很明显了。 除了路由器防火墙要设置正确外,也不能像以前 v4 时代那样关闭系统防火墙来使用了。如果你的系统打开了 SLAAC + stable-privacy (无状态模式 + 随机字符串 模式)一般你上网都是随机临时地址,加上如果是拨号上网的话前缀也会变 所以这个就是人家说不容易扫描的原因。其实最关键还是路由器防火墙要管理好
    tankren
        39
    tankren  
       2021-10-19 14:02:45 +08:00
    pfsense 防火墙好使
    Teleport
        40
    Teleport  
       2022-01-23 13:30:30 +08:00 via Android
    试了一下家里路由器的防火墙,v6 也挡了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.