家庭寬帶IPv6地址使用揭秘

2023.06.26

家庭寬帶IPv6地址使用揭秘


本文將探討家寬IPv6地址的公網可用性,分析智能網關設備安全機制的原理,結合白名單提出一種終端和服務器間端到端安全通信的方法。

Part 01  IPv6地址可用性 

設備獲取IPv6的全球單播地址後,理論上能夠實現設備和業務服務器的雙向端到端通信,我們使用筆記本電腦接入家寬網絡,分配IPv6地址後並驗證時,發現其公網連通性是不可達狀態,這是什麼原因呢?

bogon:~ root$ telnet 2409:8a28:ec3:51f0:2a12:93ff:fe68:fee5
Trying 2409:8a28:ec3:51f0:2a12:93ff:fe68:fee5...
telnet: connect to address
2409:8a28:ec3:51f0:2a12:93ff:fe68:fee5: Network is unreachable
  • 1.
  • 2.
  • 3.
  • 4.

原來是考慮到IPv6地址暴露後存在安全風險,運營商在智能網關標準中,提出了端口權限最小化和防攻擊功能的要求,在網關出廠時,廠商會在網關中預置特定的防火牆策略。由於網絡策略的存在,家寬網絡中IPv6地址實際可用性是很差的,直接下行的轉發流量基本都被網關攔截或丟棄。為了安全有效地使用IPv6地址,結合白名單機制的網絡策略或許是一個不錯的選擇。

圖1 《中國移動智能家庭網關技術規範》-端口權限最小化

圖片

圖2 《中國移動智能家庭網關技術規範》-防攻擊功能

Part 02  IPv6 session防火牆 

IPv6端到端的通信,由於網絡策略的原因,導致服務器到終端設備的下行流量被攔截。

經過對智能網關的分析,發現上述攔截能力可稱為IPv6 session防火牆,該防火牆功能基於iptables實現,在網關的iptables轉發鏈中,存在一個FORWARD_FIREWALL子鏈,用於存儲控制轉發的session防火牆策略。

防火牆策略FORWARD:

Chain FORWARD (policy ACCEPT 107 packets, 14852 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     138K   34M SKIPLOG    all      *      *       ::/0                 ::/0                 mark match ! 0x4000000/0x4000000
2     3547  290K TCPMSS     tcp      *      ppp0    ::/0                 ::/0                 tcp flags:0x06/0x02 tcpmss match 1300:65535 TCPMSS set 1380
3     3176  235K TCPMSS     tcp      ppp0   *       ::/0                 ::/0                 tcp flags:0x06/0x02 tcpmss match 1300:65535 TCPMSS set 1380
4    73122   11M FORWARD_ALG  all      *      !br+    ::/0                 ::/0                
5     146K   36M JNI_FILTER  all      *      *       ::/0                 ::/0                
6    72710   25M IP_FILTER_IN  all      !br+   *       ::/0                 ::/0                
7    73122   11M IP_FILTER_OUT  all      br+    *       ::/0                 ::/0                
8    73122   11M PARCTL_MAC  all      br+    *       ::/0                 ::/0                
9    73122   11M URL_FILTER  all      br+    *       ::/0                 ::/0                
10   73122   11M MAC_FILTER  all      br+    *       ::/0                 ::/0                
11    146K   36M FORWARD_FIREWALL  all      *      *       ::/0                 ::/0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

(1)當關閉時,防火牆策略為空,

Chain FORWARD_FIREWALL (1 references)
pkts bytes target prot opt in out source destination
  • 1.
  • 2.

(2)開啟ipv6 session防火牆後,Forward鏈策略中新增了兩條策略:

Chain FORWARD_FIREWALL (1 references)
pkts bytes target prot opt in out source destination 
252 26905 ACCEPT all br+ * ::/0 ::/0 
234 72274 ACCEPT all * br+ ::/0 ::/0 ctstate RELATED,ESTABLISHED
  • 1.
  • 2.
  • 3.
  • 4.

這兩條策略即為實現IPv6 Session防火牆的核心,基於iptables狀態跟踪實現,其實現的轉發控制能力如下:

(1)接收從任意br開頭的網卡到其它網卡的流量(上行);

(2)接收從網卡到任意br開頭的網卡的流量,該流量的狀態必須是已經建立雙向連接或該連接的衍生連接(下行)。

簡單來說,就是終端設備往外訪問的一律放行,外部服務器來訪問終端設備,如果之前沒建立過連接,直接攔截,反之則放行。具體的狀態信息可參考如下概念:

- 概念分析

(1)iptables狀態跟踪

從Linux2.6.15的內核版本後,iptables開始支持狀態跟踪(conntrack),該功能依賴於netfilter的內核模塊nf_conntrack。此後,iptables可以根據包的狀態進行二次的過濾攔截和狀態跟踪。它也是state/ctstate和nat的主要依賴模塊。

conntrack將數據流的狀態信息以Hash表的形式儲存在內存中,包括五元組信息以及超時時間等。這裡說的狀態跟踪並非是指狀態協議(如TCP)中連接狀態的跟踪,而是conntrack特有的與網絡傳輸協議無關的狀態的跟踪。

(2)conntrack五種狀態

conntrack共可以為連接標記五種狀態,分別如下:

➟ NEW:新建連接請求的數據包,且該數據包沒有和任何已有連接相關聯。判斷的依據是conntrack當前“只看到一個方向數據包(UNREPLIED)”,沒有回包。

➟ ESTABLISHED:該連接是某NEW狀態連接的回包,也就是完成了連接的雙向關聯。

➟ RELATED:匹配那些屬於helper模塊定義的特殊協議的網絡連接,該連接屬於已經存在的一個ESTABLISHED連接的衍生連接。簡而言之,A連接已經是ESTABLISHED,而B連接如果與A連接相關,那麼B連接就是RELATED。這部分不理解沒有關係,也很難一句話說清,後面章節會用大量筆墨來闡明它。

➟ INVALID:匹配那些無法識別或沒有任何狀態的數據包。這可能是由於系統內存不足或收到不屬於任何已知連接的ICMP錯誤消息,也就是垃圾包,一般情況下我們都會DROP此類狀態的包。

➟ UNTRACKED :這是一種特殊狀態,或者說並不是狀態。它是管理員在raw表中,為連接設置NOTRACK規則後的狀態。這樣做,便於提高包過濾效率以及降低負載。

conntrack是一種狀態跟踪和記錄的機制,本身並不能過濾數據包,只是提供包過濾的依據。有狀態是一種過濾依據,無狀態實際也是一種過濾依據。

Part 03 IPv6白名單機制 

IPv6 Session防火牆通過兩條策略實現了轉發防護的能力,那麼是否可以在此基礎上實現白名單機制,答案是肯定的,使用白名單機制將限定通道兩端的發送者和接受者,同時又保持原有的網絡策略開啟,符合智能網關的標準。

iptables可以通過策略添加實現白名單機制,在智能網關的轉發策略中加入允許發起下行請求的IPv6地址,並按照該地址篩選下行的源IP地址的數據包並放行。經測驗,開啟ipv6 session防火牆,並添加特定白名單後,終端設備即可支持ipv6地址的下行訪問。以6.ipw.cn為例,我們新增策略如下:

ip6tables -t filter -I FORWARD -s 6.ipw.cn -j ACCEPT 
ip6tables -t filter -I FORWARD -d 6.ipw.cn -j ACCEPT
  • 1.
  • 2.

新增後的iptables策略清單。

Chain FORWARD (policy DROP 3 packets, 246 bytes)
pkts bytes target     prot opt in     out     source               destination 
7  1833 ACCEPT     all      *      *       ::/0                 2409:8928:e20:84fe:a11b:b839:66ae:84a7 
101  7226 ACCEPT     all      *      *       2409:8928:e20:84fe:a11b:b839:66ae:84a7  ::/0
  • 1.
  • 2.
  • 3.
  • 4.

外網獲取ipv6地址結果,即設備IPv6地址能夠被6.ipw.cn訪問。

curl 6.ipw.cn
2409:8a28:efb:b8a6:d1b6:9c3b:2f2e:c3ee
  • 1.
  • 2.

上述結果即說明該IPv6地址可被公網訪問,說明白名單機制在理論上可行。

Part 04總結 

本文從實際家庭網絡環境出發,分析家庭寬帶網絡中設備的IPv6實際可用性和安全分析,並嘗試了一種基於白名單的IPv6地址使用方式,能夠保證地址在防火牆開啟的前提下使用公網的訪問能力,但從家庭網絡全局角度來看,目前缺少整體的安全發現和分析的能力,特別是在IPv6開放的情況下,原有的安全分析設備的支持性和分析能力,需要適配提升。下一篇文章我們來談一談,如何提供一種針對家庭網絡的安全監測能力。