前言
如果你運作的是linux作業系統,那麼很有可以遇到過iptables防火牆,因為iptables提供了一個有效的手斷來控制誰可以且如何通過網絡連接配接到linux系統。部署一個嚴格的iptables過濾政策是維護一個強大實體的第一步。
一、iptables與netfilter
如果一說iptables就表示防火牆,其實這樣說并不準确;iptables防火牆由Netfilter項目開發,自2001年1月linux2.4核心釋出以來,它就成了linux的一部分了。由linux提供的所有包過慮和包修改設施的官方項目名為Netfilter,但這個術語同時也指linux核心中的一個架構,它可以用于在不同的階段将函數挂接進網絡棧。另一個方面,iptables使用netfilter架構旨在将對資料包執行操作(如過慮)的函數挂進網絡棧,你可以認為netfilter提供了一架構,iptables在它之上建立了防火牆功能。nterfilter本身并不對資料包進行過慮---------它隻是允許可以過慮資料包的函數挂接到核心中适當的位置。netfilter項目還在核心中提供了一些基礎設施,如連接配接跟蹤和志記錄,任何iptables政策都可以使用這些設施來執行對特定的資料包處理。
二、iptables過濾
iptables的政策是如何定義的?其實iptabels就是一個過濾器,它可根據資料來源和去向進定限定。ip過慮主要工作于tcp/ip的協定的第二層,當然iptables有工作在第三層的能力。iptables嚴格按照tcp/ip協定處理封包流,但iptables是基于逐包的原則上處理的,它跟蹤的序列号,端口号等等,來确定了一個唯一的流,這個就是所謂的連接配接跟蹤,在連接配接的跟蹤的基礎之上,我們就可以做一些其它的操作,例如NAT,或者是基于狀态的包過慮。
三、ip過濾的術語
1、DROP
當一個封包被丢棄或者拒絕的時個,它是被簡單的釋放,沒有更多的後續工作,不會發送一個回應告訴主機這個封包被丢棄了,接收主機也不會被告知這個封包丢棄了,這個封包從此消失。
2、REJECT
從根本上來說,這個動作和上面的 DROP一樣,隻是REJECT 還會發送一個應答給發送主機,通知他這個封包被丢棄了。
3、APPECT
接受一個封包并且讓他從防火牆的規則裡面透過,它和DROP/REJECT 是相對的。
4、 Policy
我們講政策的時候,主要有兩重含義。第一是假如封包通過防火牆規則鍊檢查的時候,不比對任何規則我們應該怎麼做,這個是我們講的主要關注點。另外一個政策的含義就是我們通常講的寬泛的安全政策。
5、Rule
在 Iptables 的實作裡面,一個規則就是一個基本比對加上可能存在的幾個擴充比對以及唯一的一個動作。我們已經提供了很多的動作或者比對,他們都可以被應用到規則裡面。
6、Target
通常而言,在規則集合裡面的每一條規則都有一個自己的目标,換句我們更容易了解的話就是動作。假如一個封包比對這個規則,那麼這個動作就要被執行。例如這個動作可能是丢棄或者接收封包,還有可能是位址轉換,每一個規則的 Target 都是可選的。
7、State
一個封包的狀态是相對于一組封包來說的。例如,一個封包是防火牆第一次見到或者是已知的,那麼他們的狀态分别就是建立或者穩定流。狀态可以通過連接配接跟蹤系統擷取到,在連接配接跟蹤系統裡面儲存了所有的會話。
8、Table
每一個表都有特定的目的,在 iptables 裡面有四個表,分别是raw,mang,net,filter.例如,filter表專門用來完成封包過濾,nat表專門用來完成位址轉化等等。
9、Chain
一個鍊其實就是一組規則集合,在iptables裡有五條鍊,分别是PREROUTING,INPUT,OUTP POSTROUTING,FORWORD這個規則會被應用到所有經過這個鍊的封包。每一個鍊都有其特定的含義,例如它關聯到哪個表,它能夠做什麼事情。
四、表與鍊
1、規則表
注:表的優先級同下順序
(1)、raw表
屬性
說明
相關鍊
OUTPUT、PREROUTING
作用
raw表的一個主要用途就是為了一件事情,那就是對封包設定一個标志,決定資料包是否被狀态跟蹤機制處理
核心子產品
iptable_raw
(2) 、mangle表
PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
修改資料包的服務類型、TTL、并且可以配置路由實作QOS。
iptable_mangle
(3)、nat表
PREROUTING、POSTROUTING、OUTPUT
隻能用來完成源/目的位址的轉換。需要注意的是,隻有第一個封包會經過這個表,這個連接配接的其他封包會自動完成轉換。這個表的 target 有: DNAT、SNAT、MASQUERADE、REDIRECT
iptable_nat
(4)、filter表
INPUT、FORWARD、OUTPUT
封包過濾
iptables_filter
2、規則鍊
鍊
PREROUTING
對資料包作路由選擇前應用此鍊中的規則。(所有的資料包進來的時侯都先由這個鍊處理)
INPUT
進來的資料包應用此規則鍊中的政策
OUTPUT
外出的資料包應用此規則鍊中的政策
FORWARD
轉發資料包時應用此規則鍊中的政策
POSTROUTING
對資料包作路由選擇後應用此鍊中的規則。(所有的資料包出來的時侯都先由這個鍊處理)
五、iptables傳輸資料包的過程
<a href="http://s3.51cto.com/wyfs02/M00/23/63/wKioL1M2AJKS-sb-AAMUt0c4-nE289.jpg" target="_blank"></a>
資料包流向情況分析
第一種情況:目标是本地主機
從外界到達防火牆的資料包,先被PREROUTING規則鍊處理(是否修改資料包位址等),路由決定,例如決定封包是發向本機還是轉發或者其他地方,如果資料包的目标主機是本機(比如說Internet使用者通路防火牆主機中的web伺服器的資料包),那麼核心将其傳給INPUT鍊進行處理(所有送往本機的封包都會進行過濾,決定是否允許通過等),通過以後再交給系統上層的應用程式(比如Apache伺服器)進行響應。
第二沖情況:轉發封包
來自外界的資料包到達防火牆後,首先被PREROUTING規則鍊處理,之後會進行路由選擇,如果資料包的目标位址是其它外部位址(比如區域網路使用者通過網關通路web站點的資料包),則核心将其傳遞給FORWARD鍊進行處理(是否轉發或攔截),然後再交給POSTROUTING規則鍊(是否修改資料包的位址等)進行處理
第三種情況:本地主機發送封包
本地程序或者應用程式(例如伺服器或者用戶端程式)向外部位址發送的資料包(比如在防火牆主機中測試公網DNS伺服器時),首先被OUTPUT規則鍊處理,之後進行路由選擇,然後傳遞給POSTROUTING規則鍊(是否修改資料包的位址(SNAT)等)進行處理。
===================================未完========================================
PS:
1、下篇将說明iptables的指令格式,基本用法
本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1386349,如需轉載請自行聯系原作者