家庭寬帶IPv6地址使用揭秘
Part 01 IPv6地址可用性
設(shè)備獲取IPv6的全球單播地址后,理論上能夠?qū)崿F(xiàn)設(shè)備和業(yè)務(wù)服務(wù)器的雙向端到端通信,我們使用筆記本電腦接入家寬網(wǎng)絡(luò),分配IPv6地址后并驗(yàn)證時(shí),發(fā)現(xiàn)其公網(wǎng)連通性是不可達(dá)狀態(tài),這是什么原因呢?
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
原來(lái)是考慮到IPv6地址暴露后存在安全風(fēng)險(xiǎn),運(yùn)營(yíng)商在智能網(wǎng)關(guān)標(biāo)準(zhǔn)中,提出了端口權(quán)限最小化和防攻擊功能的要求,在網(wǎng)關(guān)出廠時(shí),廠商會(huì)在網(wǎng)關(guān)中預(yù)置特定的防火墻策略。由于網(wǎng)絡(luò)策略的存在,家寬網(wǎng)絡(luò)中IPv6地址實(shí)際可用性是很差的,直接下行的轉(zhuǎn)發(fā)流量基本都被網(wǎng)關(guān)攔截或丟棄。為了安全有效地使用IPv6地址,結(jié)合白名單機(jī)制的網(wǎng)絡(luò)策略或許是一個(gè)不錯(cuò)的選擇。
圖1 《中國(guó)移動(dòng)智能家庭網(wǎng)關(guān)技術(shù)規(guī)范》-端口權(quán)限最小化
圖2 《中國(guó)移動(dòng)智能家庭網(wǎng)關(guān)技術(shù)規(guī)范》-防攻擊功能
Part 02 IPv6 session防火墻
IPv6端到端的通信,由于網(wǎng)絡(luò)策略的原因,導(dǎo)致服務(wù)器到終端設(shè)備的下行流量被攔截。
經(jīng)過(guò)對(duì)智能網(wǎng)關(guān)的分析,發(fā)現(xiàn)上述攔截能力可稱為IPv6 session防火墻,該防火墻功能基于iptables實(shí)現(xiàn),在網(wǎng)關(guān)的iptables轉(zhuǎn)發(fā)鏈中,存在一個(gè)FORWARD_FIREWALL子鏈,用于存儲(chǔ)控制轉(zhuǎn)發(fā)的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)當(dāng)關(guān)閉時(shí),防火墻策略為空,
Chain FORWARD_FIREWALL (1 references)
pkts bytes target prot opt in out source destination
(2)開啟ipv6 session防火墻后,F(xiàn)orward鏈策略中新增了兩條策略:
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
這兩條策略即為實(shí)現(xiàn)IPv6 Session防火墻的核心,基于iptables狀態(tài)跟蹤實(shí)現(xiàn),其實(shí)現(xiàn)的轉(zhuǎn)發(fā)控制能力如下:
(1)接收從任意br開頭的網(wǎng)卡到其它網(wǎng)卡的流量(上行);
(2)接收從網(wǎng)卡到任意br開頭的網(wǎng)卡的流量,該流量的狀態(tài)必須是已經(jīng)建立雙向連接或該連接的衍生連接(下行)。
簡(jiǎn)單來(lái)說(shuō),就是終端設(shè)備往外訪問(wèn)的一律放行,外部服務(wù)器來(lái)訪問(wèn)終端設(shè)備,如果之前沒(méi)建立過(guò)連接,直接攔截,反之則放行。具體的狀態(tài)信息可參考如下概念:
- 概念分析
(1)iptables狀態(tài)跟蹤
從Linux2.6.15的內(nèi)核版本后,iptables開始支持狀態(tài)跟蹤(conntrack),該功能依賴于netfilter的內(nèi)核模塊nf_conntrack。此后,iptables可以根據(jù)包的狀態(tài)進(jìn)行二次的過(guò)濾攔截和狀態(tài)跟蹤。它也是state/ctstate和nat的主要依賴模塊。
conntrack將數(shù)據(jù)流的狀態(tài)信息以Hash表的形式儲(chǔ)存在內(nèi)存中,包括五元組信息以及超時(shí)時(shí)間等。這里說(shuō)的狀態(tài)跟蹤并非是指狀態(tài)協(xié)議(如TCP)中連接狀態(tài)的跟蹤,而是conntrack特有的與網(wǎng)絡(luò)傳輸協(xié)議無(wú)關(guān)的狀態(tài)的跟蹤。
(2)conntrack五種狀態(tài)
conntrack共可以為連接標(biāo)記五種狀態(tài),分別如下:
? NEW:新建連接請(qǐng)求的數(shù)據(jù)包,且該數(shù)據(jù)包沒(méi)有和任何已有連接相關(guān)聯(lián)。判斷的依據(jù)是conntrack當(dāng)前“只看到一個(gè)方向數(shù)據(jù)包(UNREPLIED)”,沒(méi)有回包。
? ESTABLISHED:該連接是某NEW狀態(tài)連接的回包,也就是完成了連接的雙向關(guān)聯(lián)。
? RELATED:匹配那些屬于helper模塊定義的特殊協(xié)議的網(wǎng)絡(luò)連接,該連接屬于已經(jīng)存在的一個(gè)ESTABLISHED連接的衍生連接。簡(jiǎn)而言之,A連接已經(jīng)是ESTABLISHED,而B連接如果與A連接相關(guān),那么B連接就是RELATED。這部分不理解沒(méi)有關(guān)系,也很難一句話說(shuō)清,后面章節(jié)會(huì)用大量筆墨來(lái)闡明它。
? INVALID:匹配那些無(wú)法識(shí)別或沒(méi)有任何狀態(tài)的數(shù)據(jù)包。這可能是由于系統(tǒng)內(nèi)存不足或收到不屬于任何已知連接的ICMP錯(cuò)誤消息,也就是垃圾包,一般情況下我們都會(huì)DROP此類狀態(tài)的包。
? UNTRACKED :這是一種特殊狀態(tài),或者說(shuō)并不是狀態(tài)。它是管理員在raw表中,為連接設(shè)置NOTRACK規(guī)則后的狀態(tài)。這樣做,便于提高包過(guò)濾效率以及降低負(fù)載。
conntrack是一種狀態(tài)跟蹤和記錄的機(jī)制,本身并不能過(guò)濾數(shù)據(jù)包,只是提供包過(guò)濾的依據(jù)。有狀態(tài)是一種過(guò)濾依據(jù),無(wú)狀態(tài)實(shí)際也是一種過(guò)濾依據(jù)。
Part 03 IPv6白名單機(jī)制
IPv6 Session防火墻通過(guò)兩條策略實(shí)現(xiàn)了轉(zhuǎn)發(fā)防護(hù)的能力,那么是否可以在此基礎(chǔ)上實(shí)現(xiàn)白名單機(jī)制,答案是肯定的,使用白名單機(jī)制將限定通道兩端的發(fā)送者和接受者,同時(shí)又保持原有的網(wǎng)絡(luò)策略開啟,符合智能網(wǎng)關(guān)的標(biāo)準(zhǔn)。
iptables可以通過(guò)策略添加實(shí)現(xiàn)白名單機(jī)制,在智能網(wǎng)關(guān)的轉(zhuǎn)發(fā)策略中加入允許發(fā)起下行請(qǐng)求的IPv6地址,并按照該地址篩選下行的源IP地址的數(shù)據(jù)包并放行。經(jīng)測(cè)驗(yàn),開啟ipv6 session防火墻,并添加特定白名單后,終端設(shè)備即可支持ipv6地址的下行訪問(wèn)。以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
新增后的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
外網(wǎng)獲取ipv6地址結(jié)果 ,即設(shè)備IPv6地址能夠被6.ipw.cn訪問(wèn)。
curl 6.ipw.cn
2409:8a28:efb:b8a6:d1b6:9c3b:2f2e:c3ee
上述結(jié)果即說(shuō)明該IPv6地址可被公網(wǎng)訪問(wèn),說(shuō)明白名單機(jī)制在理論上可行。
Part 04 總結(jié)
本文從實(shí)際家庭網(wǎng)絡(luò)環(huán)境出發(fā),分析家庭寬帶網(wǎng)絡(luò)中設(shè)備的IPv6實(shí)際可用性和安全分析,并嘗試了一種基于白名單的IPv6地址使用方式,能夠保證地址在防火墻開啟的前提下使用公網(wǎng)的訪問(wèn)能力,但從家庭網(wǎng)絡(luò)全局角度來(lái)看,目前缺少整體的安全發(fā)現(xiàn)和分析的能力,特別是在IPv6開放的情況下,原有的安全分析設(shè)備的支持性和分析能力,需要適配提升。下一篇文章我們來(lái)談一談,如何提供一種針對(duì)家庭網(wǎng)絡(luò)的安全監(jiān)測(cè)能力。