柳雲莉
黑龍江農業職業技術學院信息工程系 黑龍江 154002
Linux提供的防火墻軟件包內置于 Linux內核中,是一種基于包過濾防火墻的技術。其中心思想是根據網絡層 IP包頭中的源地址、目的地址及包類型等信息來控制包的流向。更徹底地過濾則是檢查包中的源端口中目的端口以及連接狀態等信息。netfilter是Linux核心中一個通用架構,用于擴展各種服務的結構化底層服務。它提供一系列的表(table),每個表由若干鏈(Chain)組成,而每條鏈中可以由一條或數條規則(Rule)組成。它可以和其他模塊(iptables模塊和nat模塊)結合起來實現包過濾功能。iptables是一個管理內核包過濾的工具,可以加入、插入或刪除核心包過濾表格中的規則。實際上真正來執行這些過濾規則的是netfilter。
若要實現一臺功能完善的防火墻,不是一件很輕松的事情,RHEL4中提供了圖形化界面很容易完成圖形化配置,單擊【Applications】→【System Settings】→【Security Level】命令,打開如圖1所示的界面。

圖1 圖形化配置防火墻
文本方式配置是手動輸入相應的命令行,實際上就是使用 iptables這個工具來設置相應的規則,允許什么樣的數據包通過,拒絕哪些數據包通過。最后可以將這些規則放入一個文中,作為一個可執行的腳本來執行,這樣就完成了防火墻的架設。
1.2.1 iptables規則鏈
iptables的作用在于為netfilter的處理提供相關的規則,這些規則具有目標,它們告訴 netfilter對來自某些源、前往某些目的地或具有某些協議類型的數據包做些什么。由于一條規則只定義了某一類型的數據包,而對于其他類型的數據包,就需要另一條規則來描述,也就有了多種類型的規則存在。iptables默認具有 5條規則鏈:PREROUTING、POSTOUTING、INPUT、OUTPUT和FORWARD它們在網絡數據處理流程中的位置如圖2所示。

INPUT鏈 處理輸入包的規則鏈。
OUTPUT鏈 處理輸出包的規則鏈。
FORWARD鏈 處理轉發包的規則鏈。
PREROUTING鏈 對到達且未經路由判斷之前的包進行處理的規則鏈。
POSTROUTING鏈 對發出且經過路由判斷之后的包進行處理的規則鏈。
1.2.2 iptables規則表
iptables的規則鏈組織在3個不同的規則表中:filter、nat、mangle。其中filter針對過濾系統,nat針對地址轉換系統,mangle針對策略路由和特殊應用。規則鏈分配如下:
filter表中包含INPUT、FORWARD和OUTPUT3個鏈。
nat表中包含 PREROUTING、POSTOUTING和OUTPUT3個鏈。
mangle表中包含 PREROUTING、POSTOUTING、INPUT、OUTPUT和FORWARD5個鏈。
1.2.3 iptables命令格式
iptables [-t 表名] <命令> [鏈名] [規則號] [規則] [-j 目標]
-A在指定鏈的末尾添加一條或多條規則。
-t選項用于指定所使用的表。
-D從指定的鏈中刪除一條或多條規則。可以按照規則的序號進行刪除,也可以刪除滿足匹配條件的規則。
-L列出指定鏈中的所有規則,如果沒有指定鏈,則所有鏈中的規則都將被列出。
-F刪除指定鏈中的所有規則,如果沒有指定鏈,則所有鏈中的規則都將被刪除。
-X刪除指定的用戶自定義鏈,這個鏈必須沒有被引用,而且里面也不包含任何規則。如果沒有給出鏈名,這條命令將試著刪除每個非內建的鏈。
-Z將表中數據包計數器和流量計數器歸零。
比如自己擁有一臺計算機,不論通過撥號上網還是小區寬帶,都不會向 Internet提供服務,但是自己能夠不受限制地上網。首先利用相應的編輯器,編輯如下腳本,需要將其執行權限修改為root權限。
#!/bin/sh
modprobe iptables
iptables -F #清除filter表中的所有規則iptables -X #刪除用戶定義的鏈
iptables -Z #省略-t參數默認清除filter表
#設定默認策略,只涉及filter表
iptables -P INPUT -j DROP
iptables -P OUTPUT -j ACCEPT
iptables -P FORWARD -j ACCEPT
#設定規則,因為是過濾的一些規則,所以要注意這些規則添加的鏈的位置
#允許本地鏈接
iptables -A INPUT -i lo -p all -j ACCEPT
#允許dns查詢
iptables -A INPUT -p tcp -dport 53 -j ACCEPT
iptables -A INPUT -p udp -dport 53 -j ACCEPT
#允許自己使用網絡服務,1024以上端口都可使用
iptables -A INPUT -p tcp -dport 1024: -j ACCEPT
iptables -A INPUT -p udp -dport 1024: -j ACCEPT
編輯好后,運行就可以了,如果需要開機啟動,將該腳本放置在/etc/rc.d/rc.local中即可。防火墻在進行數據包分析時,是按順序去對比一條一條的規則,遇到適用的規則就會執行,而不再去對比下面的規則,也就是第一匹配優先原則。
設置和管理Linux操作系統中的防火墻是網絡安全中一項重要工作。netfilter/iptables是Linux系統提供的一個非常優秀的防火墻工具,它完全免費、功能強大、使用靈活、占用系統資源少,可以對經過的數據進行非常細致的控制。
[1]胡劍鋒.Linux操作系統·清華大學出版社.2008.
[2]楊云.Linux網絡操作系統與實訓.中國鐵道出版社.2008.
[3]陳健.Linux防火墻.人民郵電出版社.2009.