1. 程式人生 > >認識防火牆與NAT服務

認識防火牆與NAT服務

防火牆是用來保護網路安全的,這個大家都知道,但是具體它是怎麼樣保護的呢?

首先,要從防火牆的分類說起。
根據保護目標的不同,防火牆可以分為用來保護一塊區域的和用來保護單一主機的。
在保護單一主機方面,包括通過資料包過濾來保護的Netfilter和通過監控服務來保護的TCP Wrapper。
在保護一塊區域方面,包括通過資料包過濾來保護的Netfilter和專用的Proxy Server ,代理伺服器。

那麼,防火牆是怎麼實行保護的呢?
防火牆具有自己的“規則”,通過這些規則來篩選網路的訊息,決定是否放行這些訊息對防火牆內的訪問,這些規則包括對MAC、IP、埠、程式等的篩選,例如,我們知道了某個IP段是黑客攻擊的高發段,就可以設定防火牆對拒絕放行來自這些IP的資料,從而達到保護系統的目的。
所以,防火牆是根據報頭資料來對訊息進行篩選的,這也就是說,它並不能夠識別資料包內的惡意檔案,所以一些病毒、木馬之類的攻擊並不能靠防火牆來保護,除非他們的來源是已知的。

這裡簡單介紹一下TCP Wrapper和Proxy Server,因為我看的書也沒有詳細講這兩個。
TCP Wrapper通過監控客戶端想要連結的程式檔名,然後將客戶端的IP與監控規則比對以決定是否放行的方法來進行保護的,其監控規則由/etc裡的hosts.allow和hosts.deny來指定,比對順序是先比對allow,再比對deny,而對於沒有規定的,則直接予以放行。

與其他兩個不同,Proxy Server其實是一個實體的伺服器,它是在子網和外網中的一道屏障,所有子網內的服務請求都是由Proxy Server代理的,外部網路無法看到子網的情況,如果外部網路要攻擊子網內的主機,就必須先攻破Proxy Server。

接著就是Netfilter了,2.6核心版本之後的Linux都是採用iptables這個軟體來提供Netfilter功能。
iptable的功能除了提供資料包過濾之外,還會提供NAT(Network Address Translation,網路地址轉換)功能,後面會一起講,所以先介紹NAT。

簡單來說,NAT是內部網路的一種IP分享器,實現Private IP和Public IP的轉換。Private IP就是我們常見的區域網的192.198.xxx.xxx,而Public IP就是能被Internet上的伺服器識別的IP。
舉個例子,現在你家裡有3臺電腦,但是你只開通了一條網線,只申請到一個Public IP 171.68.1.1,那麼怎麼讓3臺電腦同時上網呢?這時就要用到NAT了,一個NAT路由器會給你的三臺電腦各自分配一個Private IP,當某一臺電腦192.168.1.212需要傳送資料包給外部網路時,這個資料包會首先到達NAT路由器,NAT路由器會將這個資料包的IP修改為自己的Public IP 171.68.1.1再發送出去,而同樣的,收到的資料包也會先達到NAT,由NAT將IP修改為對應的Private IP後再發到目標主機上,以此完成IP通訊。

下面正式開始講iptables的篩選規則。
之所以叫iptables,是因為它將這些規則按照適用的情況分為了filters、NAT、Mangle和Options這幾個table(表),而每個table又有各自的chain(鏈),對於不同的資料包,會採取不同的table和chain來進行篩選。每個table含有的chain如下:
filter:chain INPUT 、chain OUTPUT 、chain FORWARD
NAT:chain PREROUTING 、chain OUTPUT 、chain POSTROUTING
Mangle:chain INPUT 、chain OUTPUT
Options:這個table由使用者自定義

Mangle和Options較為少用,所以只講講 table filter和table NAT。

資料包對於本機而言包括三種:要傳入到本機的,要從本機傳出的,要由經過本機進行轉發的。而對於這幾種資料包,應用table和chain的順序如下:
對於要傳入本機的(進站規則):
1、先經過 table NAT 的 chain PREROUTING,把資料包的目標IP從Public IP修改為Private IP.
2、再經過 table chain 的 chain INPUT,篩選出允許進入本機的資料包,進行放行

對於要從本機傳出的(出站規則):
1、先經過 table NAT 的 chain OUTPUT,篩選出允許傳送出去的資料包,進行放行
2、再經過 table filter 的 chain OUTPUT。
3、最後經過 table NAT 的 chain POSTROUTING,把資料包目標IP改成Public IP,然後傳送出去。

對於要經過本機進行轉發的(轉發規則):
1、先經過 table NAT 的 chain PREROUTING,把資料包的目標IP從Public IP修改為Private IP.
2、再經過 table chain 的 chain FORWARD,篩選出允許轉發的資料包。
3、最後經過 table NAT 的 chain POSTROUTING,把資料包目標IP改回成Public IP,然後傳送出去。