淺析基于Linux的跨NAT上網(wǎng)監(jiān)控原理
上網(wǎng)行為管理軟件已經(jīng)很多了,然而很多種都無(wú)法實(shí)現(xiàn)跨NAT設(shè)備的監(jiān)控,這是因?yàn)闊o(wú)法定位到真實(shí)的源IP地址,在NAT設(shè)備前面的設(shè)備看來(lái),所有的流量都是NAT設(shè)備發(fā)起的,NAT設(shè)備的存在為其后面的主機(jī)提供了一層屏障。那么有沒(méi)有什么辦法可以精確定位真實(shí)源IP地址呢?辦法是有的,只是需要NAT設(shè)備的配合。1.使用conntrack-tools監(jiān)控事件 在Linux上,NAT一般是由ip_conntrack機(jī)制實(shí)現(xiàn)的,Linux本身肯定可以精確定位到真實(shí)的轉(zhuǎn)換前的地址,需要做的僅僅是將這些信息傳遞給上網(wǎng)行為管理系統(tǒng)即可,這些信息可以在/proc/net/ip_conntrack中看到,然而我們關(guān)注的不是這些信息本身,而是針對(duì)這些信息的一系列的事件,比如某IP在某時(shí)間發(fā)起了一個(gè)到某目標(biāo)地址的連接,某時(shí)間段后拆除了該連接等等。
conntrack-tools工具是Netfilter社區(qū)提供的一款功能強(qiáng)大的ip_conntrack信息操作工具,可以方便實(shí)時(shí)的管理ip_conntrack信息,比如刪除某條記錄,提取事件等等。Linux的機(jī)制在內(nèi)核實(shí)現(xiàn),所謂的conntrack-tools只是一個(gè)用戶(hù)態(tài)的信息操作工具,如果想監(jiān)控ip_conntrack事件,則只需要執(zhí)行conntrack -E即可 關(guān)于更多的conntrack-tools信息,請(qǐng)參考:http://conntrack-tools.netfilter.org/manual.html 2.總體原理 以下是一條conntrack -E的輸出: [NEW] tcp 6 120 SYN_SENT src=128.129.0.3 dst=9.24.15.123 sport=4592 dport=8080 [UNREPLIED] src=9.24.15.123 dst=9.24.15.222 sport=8080 dport=4592 該條信息的意義不言自明,從字面意義上肯定是做了NAT,將源地址128.129.0.3轉(zhuǎn)換為了9.24.14.222,如果說(shuō)能將這類(lèi)信息傳遞給監(jiān)控網(wǎng)關(guān),那么就可以做到針對(duì)真實(shí)源地址的監(jiān)控,在監(jiān)控網(wǎng)關(guān)上需要做的就是數(shù)據(jù)的整理。我們知道在監(jiān)控網(wǎng)關(guān)上肯定有下列信息: 9.24.15.222:4592這個(gè)地址訪問(wèn)了9.24.15.123:8080 該數(shù)據(jù)和上述的conntrack -E輸出的數(shù)據(jù)做一個(gè)匯總就能得到: 128.129.0.3:4592這個(gè)地址訪問(wèn)了9.24.15.123:8080 3.ip_conntrack信息導(dǎo)出 如果NAT設(shè)備不配合或者根本就不是Linux系統(tǒng),那么就需要其它的方案來(lái)拿到NAT設(shè)備上的連接信息。因此為了使這一切可用,有兩種辦法,一種是提供一個(gè)針對(duì)熟知NAT設(shè)備系統(tǒng)的連接信息導(dǎo)出接口以及規(guī)定一種文件格式或者協(xié)議格式,自行開(kāi)發(fā)信息導(dǎo)出機(jī)制,當(dāng)然對(duì)于Linux的NAT設(shè)備,就是上面說(shuō)的那樣;另一種方法就是直接強(qiáng)制使用基于Linux的NAT,不過(guò)這種方法有點(diǎn)流氓,你必須要做到的就是你的Linux NAT設(shè)備既便宜又好用... 注解: conntrack-tools工具功能強(qiáng)大,一般用于無(wú)縫雙機(jī)熱備環(huán)境,Linux主機(jī)可以實(shí)時(shí)的將一臺(tái)機(jī)器的conntrack信息同步到相應(yīng)的備機(jī)上,一旦主機(jī)宕機(jī)IP地址漂到備機(jī),流量就會(huì)無(wú)縫的經(jīng)過(guò)備機(jī),而不需要在流量經(jīng)過(guò)備機(jī)時(shí)重新生成conntrack信息(因?yàn)樵谥匦律傻那闆r下,對(duì)于已經(jīng)建立連接的TCP流量會(huì)有問(wèn)題的)