linux網(wǎng)絡(luò)——iptables與網(wǎng)關(guān)
最近做關(guān)WiFi家庭網(wǎng)關(guān)項目,接觸到很多新的知識,本文對linux的iptables、網(wǎng)關(guān)中的NAT轉(zhuǎn)換、DMZ、端口映射和端口觸發(fā)等概念進行總結(jié)
linux iptableslinux iptables是linux2.6內(nèi)核以后使用的一套網(wǎng)絡(luò)工具,對其進行合理的配置,可實現(xiàn)防火墻、NAT轉(zhuǎn)換等網(wǎng)關(guān)功能
好,那么iptables怎么配置,這些配置是如何實現(xiàn)的呢
iptables配置方法應(yīng)用層的iptables是一個可執(zhí)行程序,iptabltes- h可看到命令幫助,這里首先要說明一下iptables中的3個層次遞進的概念:表(table)、鏈(chain)和規(guī)則(target),iptables應(yīng)用程序命令就是對某個表的某個鏈的某個規(guī)則操作
iptables默認(rèn)有4張表,nat、filter、mangle和raw,項目中使用了nat和filter,所以這里只說nat和filter
每個表都有幾條默認(rèn)的鏈,nat默認(rèn)有PREROUTING、INPUT、OUTPUT、POSTROUTING4個鏈,filter默認(rèn)有INPUT、FORWARD、OUTPUT3個鏈,表不可增減,但是表中的鏈可自定義增加或刪除
命令格式 : iptables -t [table] -[opt] [chain] -j ...
命令的格式變化太多,且無需記住所有命令,關(guān)鍵是實際中如何使用,常用哪些,后續(xù)再說
這里不會分析源碼,只注重大局和框架,上圖最方便
上圖表示的是網(wǎng)絡(luò)數(shù)據(jù)從網(wǎng)卡驅(qū)動接收程序中跳轉(zhuǎn)到協(xié)議層后,都經(jīng)歷了哪些東東,這些過程屬于linux的net子系統(tǒng),與設(shè)備無關(guān)
所有報文都經(jīng)過這個圖,從PREROUTING這里,報文的mac已經(jīng)被剝離,即從以后是三層處理,主要關(guān)注報文的ip地址,先拋開這些點是干嘛的,理一理數(shù)據(jù)報的流向
PREROUTING點表示還未進行路由之前,經(jīng)過路由后,報文的流向無非是兩個結(jié)果,要么該報文是發(fā)往本機的,即上面一條路,要么是發(fā)往其他設(shè)備的,走下面一條路
如果是發(fā)往本機,則經(jīng)過IUPUT點,到達(dá)Localhost,即發(fā)往上層協(xié)議處理,處理之后,還會經(jīng)過一個路由,判斷發(fā)往哪里
如果是發(fā)往其他設(shè)備,則經(jīng)過FORWARD點進行轉(zhuǎn)發(fā)
最后所有數(shù)據(jù)報都會經(jīng)過POSTROUTING點,出設(shè)備
這些點和iptables中的表和鏈?zhǔn)鞘裁搓P(guān)系?此即彼
iptables在內(nèi)核中的實現(xiàn)是通過netfilter完成的,本質(zhì)上是在這些預(yù)先設(shè)置好的點上添加各種內(nèi)核鉤子函數(shù),當(dāng)程序執(zhí)行到這些點上時,按照iptables應(yīng)用程序配置的規(guī)則進行處理,是接收、丟棄、轉(zhuǎn)發(fā),還是NAT轉(zhuǎn)換…,iptables和內(nèi)核通信通過netlink完成,當(dāng)然出于某些特殊需求,你也可以自己添加鉤子函數(shù),怎么添加,看/linux-2.6-xxx/net/netfilter/下的幾個源碼自然會了
NAT轉(zhuǎn)換NAT轉(zhuǎn)換是干嘛?轉(zhuǎn)換ip地址,為什么要轉(zhuǎn)換?一是地址不夠了,二是保護內(nèi)網(wǎng)
地址不夠的問題就要涉及到網(wǎng)絡(luò)地址劃分了,不展開說,地址分為A、B、C、D、E五類,所有地址中選取一些地址作為私有地址,只用于內(nèi)網(wǎng),它們是
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
怎么保護,外網(wǎng)不可訪問內(nèi)網(wǎng),內(nèi)網(wǎng)可以訪問外網(wǎng)
iptables的表nat專門用于設(shè)置和處理NAT轉(zhuǎn)換的規(guī)則,內(nèi)網(wǎng)訪問外網(wǎng)資源時,將源ip地址轉(zhuǎn)換為一個外網(wǎng)地址,該過程叫SNAT,iptables設(shè)置后,也可以讓外網(wǎng)訪問內(nèi)網(wǎng)部分資源,將目的ip地址轉(zhuǎn)換為一個內(nèi)網(wǎng)地址,該過程叫DNAT,說白了,核心在于對網(wǎng)絡(luò)結(jié)構(gòu)的理解,對iptables進行配置,以控制數(shù)據(jù)流的走向
DMZDMZ是干嘛的,官話是位于外網(wǎng)和防火墻之間的一個區(qū)域,可放置一些私人服務(wù)器資源,供外網(wǎng)訪問,上圖來理解
上圖中,共有三個區(qū)域,外網(wǎng)、DMZ和內(nèi)網(wǎng),一般用戶家中如果不放置私人服務(wù)器等東東,沒有DMZ
外網(wǎng)在網(wǎng)關(guān)左側(cè),DMZ和內(nèi)網(wǎng)在網(wǎng)關(guān)右側(cè),表明DMZ和內(nèi)網(wǎng)都是私有地址,內(nèi)網(wǎng)包括用戶會使用的PC、手機等設(shè)備,這些設(shè)備必須與外網(wǎng)嚴(yán)格隔離,不可被外網(wǎng)入侵,DMZ區(qū)域放置一些可以被外網(wǎng)訪問的服務(wù)器
一般的規(guī)則是:外網(wǎng)可訪問DMZ,不可訪問內(nèi)網(wǎng),DMZ不可訪問外網(wǎng)和內(nèi)網(wǎng),內(nèi)網(wǎng)可訪問外網(wǎng)和DMZ
但是規(guī)則都是人定的,關(guān)鍵在于iptables的配置,怎么玩都行其實