Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
3 防火牆管理程式
一 iptables
Netfilter 防火牆機制
iptables 架構
iptables 語法
範例練習
3-2
Linux防火牆-iptables
上個章節我們討論了有關防火牆的類型、原則與篩選等觀念,接
在來本書將開始介紹在 Linux 作業系統中,用來針對 Netfilter 防
火牆進行管理的主要工具- iptables,由於它是功能極為精細的應
用程式,因此建議讀者在使用前,必須完全了解其結構及語法,
以免產生管理上的錯誤。
3-1 Netfilter 防火牆機制
由 2.4.x 版開始, Linux 核心( Kernel)內建的防火牆就改為
「Netfilter」,並使用 iptables 為其管理工具,在此之前的防火牆機
制為「 IPFW」,而用來進行管理的程式為 ipfwadm( 2.0.x)與 ipchains
(2.1.x/2.2.x)等。
因為 iptables 具有較佳的相容性,因此在 2.4.x 核心版本的環境中,
仍然允許使用者使用舊版的 ipchains 程式來設定防火牆,但在使用
前需先行載入「 ipchains」模組。在 ipchains 模組載入後,接著要執
行以下三項指令,便可開始使用 ipchains 程式:
# ipchains -F
# ipchains –X
# rmmod ipchains
目前在 Netfilter 中,提供的重要機制如下:
傳統 ipchains 的任何功能,例如來源與目的封包過濾、導
向以及偽裝等。
可以針對特定使用者、群組、PID 等限制網路連結的過濾
存取。
3-3
防火牆管理程式-iptables 3
可以設定封包在進出路由表之前,進行預先的處理。
可以針對外面自動建立與現有連線有關的過濾處理。
增強的封包檢視, iptables 可以檢查所有 6 個 TCP 旗標,
並可詳細指定一連串的來源或目的地端連接埠,而非只有
單一或單一範圍的連接埠。
支援硬體位址(MAC Address)的篩選條件。
一定比例的限制條件,可以抵擋拒絕服務的攻擊與連接埠
掃描,而且也限制重覆的程序上登入的次數。
服務的優先順序類型(TOS),傳輸可依優先順序到不同的
排列,以提高服務的可靠度與降低花費。
提供 Source NAT(SNAT)與 Destination NAT(DNAT)的
功能。
圖 3-1 SNAT 與 DNAT
所謂「網路位址轉譯」(Network Address Translation,NAT),
它是定義於 RFC 1631 中的 Internet 標準,主要是用來簡化及保
存 IP 位址,它可讓原本無法上網,而且使用內部 IP 位址的主機
可以成功的連接 Internet。
3-4
Linux防火牆-iptables
「 iptables」程式的功能都是屬於封包階層的工作,而這些工作是利
用不同的「原則表」(Rule Tables)來定義。在 iptables 中包含 3 個
內建的原則表:Filter Table、NAT Table 與 Mangle Table,它們分別
代表對經過防火牆的封包進行篩選、轉譯與改寫的動作,而每一個
原則表又是由數個「鏈」(Chain)所組成。舉例來說,在 Filter Table
中除了自訂的鏈之外,還包含 3 個內建的鏈:INPUT Chain、OUTPUT
Chain 和 FORWARD Chain。
圖 3-2 預設的原則表與鏈
Filter Table 是 iptables 中的預設原則表,也就是說,在執行時若沒
有指定其他參數,則 iptables 會套用 Filter Table 中的原則,而其他
二種原則表都需要配合指令參數的使用。
因為在防火牆的運用上, iptables 主要是使用預設的 Filter Table 功
能,所以有人就稱它為「封包過濾器」(Packet Filter)。Filter Table
可以將封包擷取,然後透過預先定義的原則來判斷是否傳送此封
包。由於它運作於網路階層,所以不論是否傳送封包,都不會影響
到封包中的資料內容。
3-5
防火牆管理程式-iptables 3
封包過濾原理
下圖是表示在 Filter Table 中,內建的 3 個原則鏈與防火牆傳送封包
之間的流程圖:
圖 3-3 防火牆傳送封包的流程圖
上圖中表示,當一個封包抵達圖中的任何一個鏈時,則此鏈就會開
始比對這個封包,以決定後續的處理,例如丟棄或接受。而一般用
來進行比對的項目與說明如下表所示:
比對項目 說明
位址 針對封包內的位址資訊進行比對,可利用的資訊有:來
源位址、目的地位址與網路卡位址等。
連接埠 封包內存放於傳輸層的連接埠資訊,可用來進行比對的
項目包含:來源連接埠與目的地連接埠等。
通訊協定 指某一種指定類型的通訊協定,NetFilter 可以進行比對
的通訊協定有:TCP、UDP 與 ICMP 等。
介面 指封包接收或輸出時,使用的網路介面卡名稱。
切割 表示當資料封包在不能支援它原來大小的網路媒介上傳
輸時,將其封包切割為較小單元的處理程序。
計數器 可針對封包的計數單位進行條件比對。
3-6
Linux防火牆-iptables
其實每個鏈都是一個檢查清單,它會利用預先設定的原則來對封包
內容進行判斷,若是判斷的結果不符合(Match),則會交由鏈中的
下一個原則繼續處理。若是到最後已沒有任何原則可供判斷,則核
心就會利用鏈的預設原則來作出決定,但為了安全性的考量,一般
原則通常會要求核心丟棄此封包。
以下是防火牆傳送封包時的步驟說明:
1 當防火牆攔截到封包後,核心首先會檢查此封包的目的地,而這
個檢查的過程便稱為「路由」(Routing)。
2 如果目的地址為本機,則此封包就會流向 INPUT 鏈,而由本機程
序來負責接管。之後交由 OUTPUT 鏈處理,如果此封包可被此處
的原則所接受,則這個封包可送至它所指向的界面。
3 此時如果核心沒有啟動轉送功能(Forwarding),或是不知道如何
轉送此封包,則這個封包就會被丟棄。
4 若是轉送功能已啟動,則此封包就會被指向另一個網路界面,而
流向 FORWARD 鏈,如果此封包可被此處的原則所接受,則這個
封包可送至它所指向的界面。
3-7
防火牆管理程式-iptables 3
3-2 iptables 架構
上個小節我們曾提到,在 iptables 中包含 3 個內建原則表,以處理
不同類型的封包流向,同時這些原則表都以單獨的模組(Module)
型態存在系統中。為了提高原則表的使用效能,每一個系統內建的
原則表中,尚包含相關聯的模組延伸(Module Extension),這些模
組延伸會在第一次關聯時自動的載入系統。
Filter Table
若沒有使用指令列的選項,防火牆預設使用的原則表為 Filter
Table,以下是 Filter Table 的一些基本特性與篩選功能:
包含三個內建的鏈: INPUT Chain、 OUTPUT Chain 和
FORWARD Chain。
允許自訂使用者定義的鏈
包含說明檔
支援 ACCEPT 與 DROP 等二種目標(Target)。
延伸記錄(Logging)功能:個別的篩選記錄訊息可以使用
自訂的字首字串,而訊息的記錄層級就在 /etc/syslog.conf
檔案中設定,因此允許啟動或關閉記錄功能,以及定義記
錄檔路徑等。
TCP 狀態旗標:所有的 TCP 狀態旗標都可進行檢查,然後
再以檢查的結果來決定篩選類型。
延伸的封包退回功能:在 ICMP 錯誤或 TCP 的 RST(Reset)
訊息中,可以指定「REJECT」(退回)的動作,在 IPv4 中
規定 TCP 必須接受 RST 或 ICMP 為錯誤時的提示訊息。
3-8
Linux防火牆-iptables
將封包置於佇列:「QUEUE」(佇列)是一種特殊的動作,
它可將封包重導至本機端的佇列程式中,若沒有任何等待
的應用程式,則此封包將被丟棄。
可利用 IP 表頭中的通訊協定、來源與目的地 IP 位址、輸
入與輸出介面等項目進行篩選。
支援 TCP、UDP 與 ICMP 表頭欄位的篩選功能。
在 Filter Table 中包含二個模組延伸:「 target」與「match」,
前者包含「REJECT」封包處理動作及「LOG」功能,而後
者則包含多個模組以支援以下類型的篩選:
目前連接狀態:利用 TCP、UDP 與 ICMP 的連接狀態資訊,
以維護封包的連續性,也就是說,當初始連接建立後,後
續的封包也將被識別與接受。
多連接埠範圍(Multiport):可以將欲進行篩選的來源與目
的地連接埠內容,以逗點區隔的方式列為清單,以方便多
個連接埠的同時篩選。
乙太網路 MAC 來源位址:這種篩選方式特別使用在本地網
路的驗證(Authentication),因為 MAC 位址只能在相鄰的
主機及路由器間傳遞。
傳送端的使用者、群組、程序或程序群組識別碼:在本地
網路的傳出封包篩選時,可以利用多項產生此封包的應用
程式識別碼為基準。
IP 表頭的 TOS(Type of Service)欄位:TOS 欄位篩選可
用來指定本地封包的優先順序(Priority),例如在本地主機
與本地路由器間傳遞與轉送封包。
「mark」欄位:用來將封包標示為某個號碼,當封包被比
對成功時,就可透過此欄位的設定值,來將該封包標示一
個號碼,此號碼最大不可以超過 4294967296。
3-9
防火牆管理程式-iptables 3
封包篩選速率限制:在進行封包篩選時,可以限制某段時
間內封包的平均流量,例如每秒、分、小時或天比對的次
數,預設值為每小時平均一次。除了進行封包數量的比對
外,也可條件達成時,設定暫停封包的比對動作,以避免
因駭客使用 Flooding 攻擊法而導致服務被阻斷。
Mangle Table
在 Mangle Table 中包含三種類型的動作延伸,下表為各個延伸的名
稱及說明:
動作延伸名稱 說明
TTL 修改 Time-To-Live 資訊
MARK 允許在封包中的「mark」欄位指定一個值
TOS 支援 IP 表頭「TOS」欄位值的設定
除了以上的三種動作延伸外,Mangle Table 擁有以下二個內建的鏈
可供使用:
PREROUTING:通常表示在封包進行路由前,以及封包由
某一界面進入後,尚未交給路由判斷的處理,在此大多進
行目的地 IP 的轉譯動作(DNAT)。
OUTPUT:由本地程序產生的封包才會經過此鏈的處理。
NAT Table
NAT Table 擁有 PREROUTING、POSTROUTING 與 OUTPUT 三個內
建鏈,主要功能為進行一對一、一對多與多對多等網址轉譯工作,
由於轉譯工作的特性,需進行目的地網址轉譯的封包,就不需要進
3-10
Linux防火牆-iptables
行來源網址轉譯,反之亦然。因此為了提升改寫封包的效率,在防
火牆運作時,每個封包只會經過這個規則表一次。
若將封包過濾的規則定義在此,將會造成無法對同一封包進行多次
比對,因此這個規則表除了作網址轉譯外,最好不要做其他用途。
以下是在 NAT Table 中內建的鏈名稱與說明:
PREROUTING:通常進行目的地 IP 的轉譯動作(DNAT)。
OUTPUT:由本地程序產生的封包才會經過此鏈的處理。
POSTROUTING:此鏈的使用時機為通過路由表後,與送
至網路介面卡之前,在此大多進行來源 IP 的轉譯動作
(SNAT)。
另外,NAT Table 也支援目的地的延伸模組,它可用來進行來源位
址、目的地位址與連接埠轉譯的工作,此模組支援以下的 NAT 型式:
Source NAT(SNAT):改變第一個封包的來源位址。
Destination NAT(DNAT):改變第一個封包的目的地位址。
MASQUERADE:它是屬於 SNAT 的一種特殊型態,若是一
部主機 IP Masquerade 功能連線到 Internet,則其他連接此
部主機的電腦即使沒有獲得正式指定的 IP 位址,也可與
Internet 進行連接。
REDIRECT:它是屬於 DNAT 的一種特殊型態,其主要功
能是將封包轉送至本地網路的主機,而不論在 IP 封包表頭
目的地欄位中顯示的位址為何。
3-11
防火牆管理程式-iptables 3
圖 3-4 IP Masquerade 功能
「封包偽裝」 (Masquerading) 是 SNAT 的特例,它只用於動態
分配的 IP 地址,例如標準的撥接(如果用靜態 IP 地址,則使用
SNA T)。您無需明確地將 masquerading 放進來源地址,因為它
會使用封包傳出界面作為來源地址。但更重要的是,如果該連接
中斷,則連線也會同時中斷,當再次連線使用新的 IP 地址時就
會出現問題。
3-3 iptables 語法
在了解 iptables 程式的基本原理後,接下來這個小節我們將開始介
紹 iptables 程式的使用方法,以及各項選項與參數的介紹。
以下是 iptable 的語法結構:
iptables [-t table] command [match] [-j target/jump]