Linux防火牆基本知識

一、防火牆的分類
(一)、包過濾防火牆。
數據包過濾(packet Filtering)技術是在網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,稱爲訪問控制表(access control lable,ACL)。通過檢查數據流中每個數據包的源地址和目的地址,所用的端口號和協議狀態等因素,或他們的組合來確定是否允許該數據包通過。
包過濾防火牆的優點是它對用戶來說是透明的,處理速度快且易於維護。缺點是:非法訪問一旦突破防火牆,即可對主機上的軟件和配置漏洞進行攻擊;數據包的源地址、目的地址和IP的端口號都在數據包的頭部,可以很輕易地僞造。“IP地址欺騙”是黑客針對該類型防火牆比較常用的攻擊手段。
(二)、代理服務型防火牆
代理服務(proxy service)也稱鏈路級網關或TCP通道。它是針對數據包過濾和應用網關技術存在的缺點而引入的防火牆技術,其特點是將所有跨躍防火牆的網絡通信鏈路分爲兩段。當代理服務器接收到用戶對某個站點的訪問請求後就會檢查請求是否符合控制規則。如果規則允許用戶訪問該站點,代理服務器就會替用戶去那個站點取回所需的信息,再轉發給用戶,內外網用戶的訪問都是通過代理服務器上的“鏈接”來實現的,從而起到隔離防火牆內外計算機系統的作用。
此外,代理服務也對過往的數據包進行分析和註冊登記,並形成報告,同時當發現有被攻擊跡象時會向網絡管理員發出警告,並保留攻擊記錄,爲證據收集和網絡維護提供幫助。
二、防火牆的工作原理
(一)、包過濾防火牆的工作原理
包過濾是在IP層實現的,因此,它可以只用路由器來完成。包過濾根據包的源IP地址、目的IP地址、源端口、目的端口及包傳遞方向等報頭信息來判斷是否允許包通過,過濾用戶定義的內容,如IP地址。其工作原理是系統在網絡層檢查數據包,與應用層無關。包過濾器的應用非常廣泛,因爲CPU用來處理包過濾的時間可以忽略不計。而且這種防護措施對用戶透明,合法用戶在進出網絡時,根本感覺不到它的存在,使用起來很方便。這樣系統就具有很好的傳輸性能,易擴展。
但是這種防火牆不太安全,因爲系統對應用層信息無感知--也就是說,它們不理解通信的內容,不能在用戶級別上進行過濾,即不能識別不同的用戶和防止地址的盜用。如果攻擊者把自己主機的IP地址設成一個合法主機的IP地址,就可以很輕易地通過包過濾器,這樣更容易被黑客攻破。基於這種工作機制,包過濾防火牆有以下缺陷:
1、通信信息:包過濾防火牆只能訪問部分數據包的頭信息。
2、通信和應用狀態信息:包過濾防火牆是無狀態的,所以它不可能保存來自於通信和應用的狀態信息。
3、信息處理:包過濾防火牆處理信息的能力是有限的。
(二)、代理服務型防火牆工作原理
代理服務型防火牆在應用層上實現防火牆功能。它能提供部分與傳輸有關的狀態,能外圈提供與應用相關的狀態和部分傳輸的信息,它還能處理和管理信息。
三、使用iptables實現包過濾防火牆
(一)、iptables概述及原理
從內核2.4之後使用全新的內核包過慮管理工具--iptables,這個工具使用戶更易於理解其工作原理,更容易被使用,也具有更強大的功能。
iptables只是一個管理內核包過濾的工具,可以加入、插入或刪除核心包過濾表格(鏈)中的規則。實際上真正執行這些過濾規則的是netfilter(linux核心中一個通用架構)及其相關模塊(如iptables模塊和nat模塊)。
netfilter是linux核心中一個通用架構,它提供一系列的“表”(tables),每個表由若干“鏈”(chains)組成,而每條鏈中可以由一條或數條規則(rule)組成。可以這樣理解,netfilter是表的容器,表是鏈的容器,鏈是規則的容器。
系統缺省的表爲“filter”,該表中包含了INPUT、FORWARD和OUTPUT 3個鏈。每一條鏈中可以有一條或數條規則,每一條規則都是這樣定義的:“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。當一個數據包到達一個鏈時,系統就會從第一條規則開始檢查,看是否符合該規則所定義的條件,如果滿足,系統將根據該條規則所定義的方法處理該數據包;如果不滿足則繼續檢查下一條規則;最後,如果數據包不符合該鏈中任何一條規則,系統就會根據該鏈預先定義的策略(policy)來處理該數據包。
(二)、iptables傳輸數據包的過程
當數據包進入系統時,系統首先根據路由表決定將數據包發給哪一條鏈,則可能有以下3種情況:
1、數據包的目的地址是本機,則系統將數據包送往INPUT鏈,如果通過規則檢查,則該包被髮給相應的本地進程處理;如果沒有通過規則檢查,系統將丟棄該包。
2、數據包的上的地址不是本機,也就是說這個包將被轉發,則系統將數據包送往FORWARD鏈,如果通過規則檢查,該包被髮給相應的本地進程處理;如果沒有通過規則檢查,系統將丟棄該包。
3、數據包是由本地系統進程產生的,則系統將其送往OUTPUT鏈,如果通過規則檢查,則該包被髮給相應的本地進程處理;如果沒有通過規則檢查,系統將丟棄該包。
用戶可以給各鏈定義規則,當數據包到達其中的每一條鏈,iptables就會根據鏈中定義的規則來處理這個包。iptables將數據包的頭信息與它所傳遞到的鏈中的每條規則進行比較,看它是否和每條規則完全匹配。如果數據包與某條規則匹配,iptables就對該數據包執行由該規則指定的操作。例如某條鏈中的規則決定要丟棄(DROP)數據包,數據包就會在該鏈處丟棄;如果鏈中規則接受(ACCEPT)數據包,數據包就可以繼續前進;但是,如果數據包與這條規則不匹配,那麼它將與鏈中的下一條規則進行比較。如果該數據包不符合該鏈中的任何一條規則,那麼iptables將根據該鏈預先定義的默認策略來決定如何處理該數據包,理想的默認策略應該告訴iptables丟棄(DROP)該數據包。
(三)、iptables的優點
netfilter/iptables的最大優點是它可以配置有狀態的防火牆,這是ipfwadm和ipchains等以前的工具都無法提供的一種重要功能。有狀態的防火牆能夠指定並記住爲發送或接收信息包所建立的連接的狀態。防火牆可以從信息包的連接跟蹤狀態獲得該信息。在決定新的信息包過濾時,防火牆所使用的這些狀態信息可以增加其效率和速度。這裏有4種有效狀態,名稱分別爲ESTABLISHED、INVALID、NEW和RELATED。
狀態ESTABLISHED指出該信息包屬於已經建立的連接,該連接一直用於發送和接收信息包並且完全有效。INVALID狀態指出該信息包與任何已知的流或連接都不相關聯,它可能包含錯誤的數據或頭。狀態NEW表示該信息包已經或將啓動新的連接,或者它與尚未用於發送和接收信息包的連接相關聯。最後,RELATED表示該信息包正在啓動新連接,以及它與已建立的連接想關聯。
netflter/iptables的另一個重要優點是,它使用戶可以完全控制防火牆配置和信息包過濾。可以定製自己的規則來滿足特定需求,從而只允許想要的網絡流量進入系統。
(四)、iptables的基礎知識
1、規則(rule)
規則(rule)就是網絡管理員預定的條件,規則一般定義爲“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(TCP、UDP、ICMP)和服務類型(如HTTP、FTP、SMTP)。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(ACCEPT)、拒絕(REJECT)、或丟棄(DROP)等。配置防火牆的主要規則就是添加、修改和刪除這些規則。
2、鏈(chains)
鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中的第一條規則開始檢查,看該數據包是否滿足規則所定義的條件,如果滿足,系統就會根據該條規則所定義的方法處理該數據包,否則iptables將繼續檢查下一條規則。如果該數據包不符合鏈中任何一何況規則,iptables就會根據該鏈預先定義的默認策略來處理該數據包。
3、表(tables)
表(tables)提供特定的功能,iptables內置3個表,即filter表、nat表和mangle表,分別用於實現包過濾,網絡地址轉換和包重構的功能。
(1)filter表。filter表主要用於過濾數據包,該表根據系統管理員預定義的一組規則過濾符合條件的數據包。對防火牆而言,主要利用filter表中指定一系列規則來實現對數據包進行過濾操作。
filter表是iptables默認的表,如果沒有指定使用哪個表,iptables就默認使用filter表來執行所有的命令。filter表包含了INPUT鏈(處理進入的數據包)、FORWARD鏈(處理轉發的數據包)和OUTPUT鏈(處理本地生成的數據包)。在filter表中只允許對數據包進行接受或丟棄的操作,而無法對數據包進行更改。
(2)nat表。nat青主要用於網絡地址轉換NAT,該表可以實現一對一、一對多和多對多的NAT工作,iptables就是使用該表實現共享上網功能的。nat表包含了PREROUTING鏈(修改即將到來的數據包)、OUTPUT鏈(修改在路由之前本地生成的數據包)和POSTROUTING鏈(修改即將出去的數據包)。
(3)mangle表。mangle表主要用於對指定的包進行修改,因爲某些特殊應用可能去改寫數據包的一些傳輸特性,例如理性數據包的TTL和TOS等,不過在實際應用中該表的使用率不高。
(五)、關閉系統防火牆
由於系統的防火牆功能也是使用iptables實現的,如果用戶在系統的iptables之上設置規則,很容易發生衝突,所以在進行iptables學習之前,建議關閉系統的防火牆功能。
(六)、iptables命令格式
iptables的命令格式較爲複雜,一般格式如下:
#iptables [-t 表] -命令 匹配 操作
注:iptables對所有選項和參數都區分大小寫!
1、表選項
表選項用於指定命令應用於哪個iptables內置表。iptables內置表包括filter表、nat表和mangle表。
2、命令選項
命令選項用於指定iptables的執行方式,包括插入規則、刪除規則和添加規則等:
-P 或--policy 定義默認策略
-L 或--list 查看iptables規則列表
-A 或--append 在規則列表的最後增加一條規則
-I 或--insert 在指定的位置插入一條規則
-D 或--delete 在規則列表中刪除一條規則
-R 或--replace 替換規則列表中的某條規則
-F 或--flush 刪除表中的所有規則
-Z 或--zero 將表中所有鏈的計數和流量計數器都清零
3、匹配選項
匹配選項指定數據包與規則匹配所應具有的特徵,包括源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和端口號(如80、21、110)等:
-i 或--in-interface 指定數據包是從哪個網絡接口進入
-o 或--out-interface 指定數據包是從哪個網絡接口輸出
-p 或--porto 指定數據包匹配的協議,如TCP、UDP
-s 或--source 指定數據包匹配的源地址
--sport 指定數據包匹配的源端口號,可以使用“起始端口號:結束端口號”的格式指定一個範圍的端口 
-d 或--destination 指定數據包匹配的目標地址
--dport 指定數據包匹配的目標端口號,可以使用“起始端口號:結束端口號”的格式指定一個範圍的端口
4、動作選項
動作選項指定當數據包與規則匹配時,應該做什麼操作,如接受或丟棄等。
ACCEPT 接受數據包
DROP 丟棄數據包
REDIRECT 將數據包重新轉向本機或另一臺主機的某個端口,通常用此功能實現透明代理或對外開放內網的某些服務
SNAT 源地址轉換,即改變數據包的源地址
DNAT 目標地址轉換,即改變數據包的目的地址
MASQUERADE IP僞裝,即常說的NAT技術。MASQUERADE只能用於ADSL等撥號上網的IP僞裝,也就是主機的IP地址是由ISP動態分配的;如果主機的IP地址是靜態固定的,就要使用SNAT
LOG 日誌功能,將符合規則的數據包的相關信息記錄在日誌中,以便管理員進行分析和排錯
(七)、iptables命令的使用
1、查看iptables規則
初始的iptables沒有規則,但是如果在安裝時選擇自動安裝防火牆,系統中會有默認的規則存在,可以先查看默認的防火牆規則:
#iptables [-t 表名]  
[-t 表名]:定義查看哪個表的規則列表,表名可以使用filter、nat和mangle,如果沒有定論表名,默認使用fliter表
:列出指定表和指定鏈的規則
:定義查看指定表中哪個鏈的規則,如果不指明哪個鏈,將查看某個表中所有鏈的規則
#iptables -L -n (查看filter表所有鏈的規則)
注:在最後添加-n參數,可以不進行IP與HOSTNAME的轉換,顯示的速度會快很多。
#iptables -t nat -L OUTPUT (查看nat表OUTPUT鏈的規則)
2、定義默認策略
當數據包不符合鏈中任何一條規則時,iptables將根據該鏈默認策略來處理數據包,默認策略的定義方法如下
#iptables [-t 表名]   
[-t 表名]:定義查看哪個表的規則,表名可以使用filter、nat和mangle,如果沒有寶,默認使用filter表
:定義默認策略
:定義查看指定表中哪個鏈的規則,如果不指明,將查看某個表中所有鏈的規則
:處理數據包的動作,可以使用ACCEPT(接受)和DROP(丟棄)
#iptables -P INPUT ACCEPT (將filter表INPUT鏈的默認策略定義爲接受)
#iptables -t nat -P OUTPUT DROP (將nat表OUTPUT鏈的默認策略定義爲丟棄)
創建一個最簡單的規則範例。對於沒有經驗和時間的用戶而言,設置一個簡單而又實用的規則是必要的,最基本的原則是“先拒絕所有數據包,然後再允許需要的數據包”,也就是說通常爲filter表的鏈定義。一般都將INPUT定義爲DROP,這樣就可以阻止任何數據包進入,其他項目定義爲ACCEPT,這樣對外發送的數據就可以出去。
#iptables -P INPUT DROP
#iptables -P FORWARD ACCEPT
#iptables -P OUTPUT ACCEPT
3、增加、插入、刪除和替換規則
#iptables [-t 表名] 鏈名 [規則編號] [-i | o 網卡] [-p 協議類型] [-s 源IP | 源子網] [--sport 源端口號] [-d 目標IP | 目標子網] [--dport 目標端口號] 
[-t 表名]:定義查看哪個表的規則,表名可以使用filter、nat和mangle,如果沒有定義,默認使用filter表
-A:新增一條規則,該規則將增加到規則列表的最後一行,該參數不能使用規則編號
-I:插入一條規則,原來該位置上的規則就會身後順序移動,如果沒有指定規則編號,則在第一條規則前插入
-D:刪除一條規則,可以輸入完整規則,或直接指定規則編號
-R:替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號
:指定查看指定表中某條鏈的規則,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT、POSTROUTIN
[規則編號]:規則編號是在插入、刪除和替換規則時用,編號是按照規則列表的順序排列,第一條規則編號爲1
[-i | o 網卡名稱]:i是指數據包從哪塊網卡輸入,o是批數據包從哪塊網卡輸出
[-p 協議類型]:可以指定規則應用的協議,包含TCP、UDP、ICMP等
[-s 源IP | 源子網]:數據包的源IP或子網
[--sport 源端口號]:數據包的源端口號
[-d 目標IP | 目標子網]:數據包的目標IP或子網
[--dport 目標端口號]:數據包的目標端口號
:處理數據包的動作
#iptables -A INPUT -i lo -j ACCEPT (追加一條規則,接受所有來自lo接口的數據包)
#iptables -A INPUT -s 192.168.0.44 -j ACCEPT (追加一條規則,接受所有來自192.168.0.44的數據包)
#iptables -A INPUT -s 192.168.0.44 -j DROP (追加一條規則,丟棄所有來自192.168.0.44的數據包)
注:iptables的按照順序讀取規則的,如果兩條規則衝突,以排在前面的規則爲準。
#iptables -I INPUT 3 -s 192.168.1.0/24 -j DROP (在INPUT鏈中的第3條規則前插入一條規則,丟棄所有來自192.168.1.0/24的數據包)
注:-I參數如果沒有指定插入的位置,將插入到所有規則的最前面
#iptables -D INPUT 2 (刪除filter表中INPUT鏈中的第2條規則)
#iptables -R INPUT 2 -s 192.168.10.0/24 -p tcp --dport 80 -j DROP (替換filter表INPUT鏈中第2條規則爲,禁止192.168.10.0/24訪問TCP的80端口)
4、清除規則和計數器
在新建規則時,往往需要清除原有的或舊的規則,以免影響新規則。如果規則較多,逐條刪除比較麻煩,可以使用清除規則參數快速刪除所有規則。
#iptables [-t 表名] 
[-t 表名]:指定策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定,默認爲filter表
-F:刪除指定表中所有規則
-Z:將指定表中數據包計數器和流量計數器歸零
#iptables -Z (將filter表中數據包計數器和流量計數器請零)
#iptables -F (刪除filter表中的所有規則)
5、記錄與恢復防火牆規則
可以使用記錄與恢復防火牆規則命令,將現有防火牆機制複製下來,在需要恢復時直接恢復即可。
#iptables-save > 文件名 (記錄當前防火牆規則)

#iptables-restore > 文件名 (將防火牆規則恢復到當前主機環境)


轉自:http://linux.chinaunix.net/techdoc/beginner/2008/10/30/1042255.shtml

發佈了19 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章