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