家庭寬帶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開放的情況下,原有的安全分析設備的支持性和分析能力,需要適配提升。下一篇文章我們來談一談,如何提供一種針對家庭網絡的安全監測能力。