王 莉
(南京信息職業技術學院,江蘇 南京 210023)
網絡安全除了關注網絡上的軟件漏洞和安全通報之外,最好能根據環境的需要,設置符合自身要求的防火墻機制。防火墻就是可以對流進流出網絡的數據包進行分析和過濾一種安全機制,而在Linux系統中本身就提供了Netfilter防火墻功能,該功能分析進入網絡的數據包,將數據包的頭部數據提取出來,以決定該連接為放行或者抵擋,該方式可以直接分析數據包頭部數據,包括硬件地址(MAC)、軟件地址(IP)、TCP、UDP以及ICMP等數據包信息,因此用途非常廣泛[1]。 Linux下的Netfilter軟件iptabls
PTABLES軟件是Linux內部集成的信息包過濾系統,是Linux內核中的一個通用框架,該框架定義了數據包過濾子系統的系統功能,提供了filter、NAT和Mangle這3個表,默認使用的是filter表。每個表中包括若干條內建的鏈(Chains),用戶也可在表中創建自定義鏈。在每條鏈中,可定義一條或多條過濾規則(Rules),即鏈是規則的一個列表。每條規則應指定所要檢查的包的特征以及如何處理與之匹配的包的關系,這種處理被稱為目標(Target)。目標值可以是用戶自定義的一個鏈名,可以根據該鏈的名字跳轉到同一個表內的鏈里,以便對該鏈內的規則進行檢查,目標還可以是ACCEPT、DROP、REJECT等。
Filter表主要跟進入Linux本機的數據包有關,是Iptables中默認存在的表之一。該表內建有3個鏈。1)INPUT用于處理目標地址是本機的數據包。2)FORWARD用于處理要通過或轉發的數據包,即目標地址不是本機的數據包。3)OUTPUT用于處理本地進程生成的要外發的數據包[2]。當一個數據包從網卡進入防火墻時,內核首先根據路由表決定數據包的目標,根據數據包的目的地址來決定數據包將送往哪一條鏈進行規則匹配。Filter表中數據包具體的處理流程如下。
發現到達防火墻的數據包的目的地址是本機,則將數據包發送給INPUT鏈進行處理。當發現數據包的目的地址不是本機,則會檢查內核設置是否允許數據包的轉發,如果允許,則將數據包交給FORWARD鏈進行處理,如果不允許轉發,數據包就會被丟棄。如果到達防火墻的數據包是由內部網絡的進程產生的,則會交給OUTPUT鏈進行處理。
NAT的全名是Network Address Translation,即網絡地址轉換,私有地址可以在不同的企業網內部重復使用,雖說現在使用IPV6技術,緩解了IP地址短缺的問題,但IPV4私有地址的使用方便管理,企業內部仍然需要,但使用私有地址的主機不能訪問互聯網。利用NAT,可以實現私有地址與公有地址的互相轉換。
NAT表內建有PREROUTING、POSTROUTING、OUTPUT3個鏈。
1.2.1 PREROUTING
PREROUTING這個鏈在Filter表的最前面,當一個數據包來到Linux的網絡接口時,首先通過mangle的PREROUTING,然后再通過NAT的PREROUTING,而這條鏈是數據包在經過路由之前就要過濾的。
1.2.2 POSTROUTING
該鏈是在路由判斷之后,如果我們使用ACCEPT放過了這個包,它將進入POSTROUTING部分,如果是轉發的話,應該要再次進行路由選擇然后將其送出,此時Linux系統已經為該數據包選擇好路由,并找到合適的接口送出該數據包。
在該鏈里要進行一個非常重要的動作稱為SNAT,即修改源IP地址。
1.2.3 OUTPUT
對本地進程產生并準備發出的數據包由OUTPUT鏈進行檢查處理,可以在該鏈進行DNAT操作,即修改目的IP地址[3]。NAT表中封包的處理流程如圖1所示。
在實際的網絡環境中,Linux服務器主機連接著內部網絡,Linux主機也是內網的路由器,擔任著簡單的IP路由功能,外部網絡使用eth0,內部網絡使用eth1,且內部使用192.168.100.0/24這個網段,主機默認開發的服務有WWW、SSH、HTTPS等。
根據該網絡的環境及組網要求,由于希望將信任網絡(內網)與不信任網絡(外網)完全分開,最重要的防火墻的策略是關閉所有的連接,僅開放特定服務模式。可以設置防火墻策略為:INPUT鏈為DROP、OUTPUT鏈及FORWARD鏈為ACCEPT。具體防火墻流程圖如圖2所示。

圖1 NAT數據包處理流程圖
根據防火墻的流程圖設置,可以為該網絡環境提供網絡防護,具體的操作可以通過Shell Script來實現。將Script拆成3個部分來實現。1)iptables.rule:在該文件中設置防火墻最基本的規則,包括清除規則、模塊的加載以及服務的許可。
主要設置項為設置相關參數,例如網卡接口、網段說明以及進出網絡的接口等信息。設置內核網絡功能,加載一些有用的模塊。清除規則、設置默認策略及開放lo與相關的設置值。啟動額外的防火墻Script模塊,允許某些類型的ICMP數據包進入,允許某些服務進入,依照自己的環境開啟。2)iptables.deny:該文件里設置阻擋進入內網的惡意主機。主要設置項是填寫允許進入本機的其他網絡或主機。3)iptables.allow:設置某些特殊的可以進入內網的主機。主要設置項是填寫需要阻擋的內容。

圖2 防火墻設置流程圖
根據防火墻的設置語法規則,在以上3個文件中設置好腳本,最后將這些功能存儲下來,并將文件的權限設置為700,這樣文件只屬于Root的權限,就可以直接執行iptables.rule文件了。如果希望開機自動執行該文件,可以將這個文件寫入/etc/rc.d/rc.local中。
該文介紹了Linux系統內的防火墻機制Netfilter,研究了Iptables防火墻的工作流程,重點介紹了Iptales防火墻中的filter表和NAT表,剖析了這2個表的工作機制,并將其應用到實際的工作環境中,提供給網絡環境安全防護,有一定的實用價值。