柳雲(yún)莉
黑龍江農(nóng)業(yè)職業(yè)技術學院信息工程系 黑龍江 154002
Linux提供的防火墻軟件包內(nèi)置于 Linux內(nèi)核中,是一種基于包過濾防火墻的技術。其中心思想是根據(jù)網(wǎng)絡層 IP包頭中的源地址、目的地址及包類型等信息來控制包的流向。更徹底地過濾則是檢查包中的源端口中目的端口以及連接狀態(tài)等信息。netfilter是Linux核心中一個通用架構(gòu),用于擴展各種服務的結(jié)構(gòu)化底層服務。它提供一系列的表(table),每個表由若干鏈(Chain)組成,而每條鏈中可以由一條或數(shù)條規(guī)則(Rule)組成。它可以和其他模塊(iptables模塊和nat模塊)結(jié)合起來實現(xiàn)包過濾功能。iptables是一個管理內(nèi)核包過濾的工具,可以加入、插入或刪除核心包過濾表格中的規(guī)則。實際上真正來執(zhí)行這些過濾規(guī)則的是netfilter。
若要實現(xiàn)一臺功能完善的防火墻,不是一件很輕松的事情,RHEL4中提供了圖形化界面很容易完成圖形化配置,單擊【Applications】→【System Settings】→【Security Level】命令,打開如圖1所示的界面。
圖1 圖形化配置防火墻
文本方式配置是手動輸入相應的命令行,實際上就是使用 iptables這個工具來設置相應的規(guī)則,允許什么樣的數(shù)據(jù)包通過,拒絕哪些數(shù)據(jù)包通過。最后可以將這些規(guī)則放入一個文中,作為一個可執(zhí)行的腳本來執(zhí)行,這樣就完成了防火墻的架設。
1.2.1 iptables規(guī)則鏈
iptables的作用在于為netfilter的處理提供相關的規(guī)則,這些規(guī)則具有目標,它們告訴 netfilter對來自某些源、前往某些目的地或具有某些協(xié)議類型的數(shù)據(jù)包做些什么。由于一條規(guī)則只定義了某一類型的數(shù)據(jù)包,而對于其他類型的數(shù)據(jù)包,就需要另一條規(guī)則來描述,也就有了多種類型的規(guī)則存在。iptables默認具有 5條規(guī)則鏈:PREROUTING、POSTOUTING、INPUT、OUTPUT和FORWARD它們在網(wǎng)絡數(shù)據(jù)處理流程中的位置如圖2所示。
INPUT鏈 處理輸入包的規(guī)則鏈。
OUTPUT鏈 處理輸出包的規(guī)則鏈。
FORWARD鏈 處理轉(zhuǎn)發(fā)包的規(guī)則鏈。
PREROUTING鏈 對到達且未經(jīng)路由判斷之前的包進行處理的規(guī)則鏈。
POSTROUTING鏈 對發(fā)出且經(jīng)過路由判斷之后的包進行處理的規(guī)則鏈。
1.2.2 iptables規(guī)則表
iptables的規(guī)則鏈組織在3個不同的規(guī)則表中:filter、nat、mangle。其中filter針對過濾系統(tǒng),nat針對地址轉(zhuǎn)換系統(tǒng),mangle針對策略路由和特殊應用。規(guī)則鏈分配如下:
filter表中包含INPUT、FORWARD和OUTPUT3個鏈。
nat表中包含 PREROUTING、POSTOUTING和OUTPUT3個鏈。
mangle表中包含 PREROUTING、POSTOUTING、INPUT、OUTPUT和FORWARD5個鏈。
1.2.3 iptables命令格式
iptables [-t 表名] <命令> [鏈名] [規(guī)則號] [規(guī)則] [-j 目標]
-A在指定鏈的末尾添加一條或多條規(guī)則。
-t選項用于指定所使用的表。
-D從指定的鏈中刪除一條或多條規(guī)則。可以按照規(guī)則的序號進行刪除,也可以刪除滿足匹配條件的規(guī)則。
-L列出指定鏈中的所有規(guī)則,如果沒有指定鏈,則所有鏈中的規(guī)則都將被列出。
-F刪除指定鏈中的所有規(guī)則,如果沒有指定鏈,則所有鏈中的規(guī)則都將被刪除。
-X刪除指定的用戶自定義鏈,這個鏈必須沒有被引用,而且里面也不包含任何規(guī)則。如果沒有給出鏈名,這條命令將試著刪除每個非內(nèi)建的鏈。
-Z將表中數(shù)據(jù)包計數(shù)器和流量計數(shù)器歸零。
比如自己擁有一臺計算機,不論通過撥號上網(wǎng)還是小區(qū)寬帶,都不會向 Internet提供服務,但是自己能夠不受限制地上網(wǎng)。首先利用相應的編輯器,編輯如下腳本,需要將其執(zhí)行權限修改為root權限。
#!/bin/sh
modprobe iptables
iptables -F #清除filter表中的所有規(guī)則iptables -X #刪除用戶定義的鏈
iptables -Z #省略-t參數(shù)默認清除filter表
#設定默認策略,只涉及filter表
iptables -P INPUT -j DROP
iptables -P OUTPUT -j ACCEPT
iptables -P FORWARD -j ACCEPT
#設定規(guī)則,因為是過濾的一些規(guī)則,所以要注意這些規(guī)則添加的鏈的位置
#允許本地鏈接
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
#允許自己使用網(wǎng)絡服務,1024以上端口都可使用
iptables -A INPUT -p tcp -dport 1024: -j ACCEPT
iptables -A INPUT -p udp -dport 1024: -j ACCEPT
編輯好后,運行就可以了,如果需要開機啟動,將該腳本放置在/etc/rc.d/rc.local中即可。防火墻在進行數(shù)據(jù)包分析時,是按順序去對比一條一條的規(guī)則,遇到適用的規(guī)則就會執(zhí)行,而不再去對比下面的規(guī)則,也就是第一匹配優(yōu)先原則。
設置和管理Linux操作系統(tǒng)中的防火墻是網(wǎng)絡安全中一項重要工作。netfilter/iptables是Linux系統(tǒng)提供的一個非常優(yōu)秀的防火墻工具,它完全免費、功能強大、使用靈活、占用系統(tǒng)資源少,可以對經(jīng)過的數(shù)據(jù)進行非常細致的控制。
[1]胡劍鋒.Linux操作系統(tǒng)·清華大學出版社.2008.
[2]楊云.Linux網(wǎng)絡操作系統(tǒng)與實訓.中國鐵道出版社.2008.
[3]陳健.Linux防火墻.人民郵電出版社.2009.