iptables的起源
netfilter工作於 kernel的framework(框架)
iptables的前身叫ipfirewall (內核1.x時代),這是一個作者從freeBSD上移植過來的,能夠工作在內核當中的,對數據包進行檢測的一款簡易訪問控制工具。但是ipfirewall工作功能極其有限(它需要將所有的規則都放進內核當中,這樣規則才能夠運行起來,而放進內核,這個做法一般是極其困難的)。當內核發展到2.x系列的時候,軟件更名爲ipchains,它可以定義多條規則,將他們串起來,共同發揮作用,而現在,它叫做iptables
iptable是工作在用戶空間中,編寫規則的工具,不能算是真正意義上的防火牆,它定義的規則需要送至工作於在內核空間中netfilter,並且通過實現netfilter實現防火牆功能。而放入內核的地方必須要是特定的位置,必須是tcp/ip的協議棧經過的地方。而這個tcp/ip協議棧必須經過的地方,可以實現讀取規則的地方就叫做 netfilter.(網絡過濾器)
作者在內核的tcp/ip協議棧上選擇的參考點
prerouting: 進入本機後,路由功能發生之前
input:到達本機內部
output: 由本機發出
forward: 由本機轉發
postrouting:路由功能發生之後(進入網卡發送隊列之前),即將離開本機之前
這五個參考點又叫 hooks function: 鉤子函數 也叫五個規則鏈 組成了netfilter框架;任何一個數據包要經由本主機,都將經過這五個鏈中某鏈;
數據包過濾匹配流程圖
鏈上的規則次序即爲檢查次序
netfilter 規則的功能
(1). 過濾:firewall,
(2). 地址轉換:NAT Server
(3). mangle:修改報文首部中的某些信息(能夠實現將數據包的元數據拆開,在裏面做標記/修改內容的。如防火牆標記,TTL)
(4). raw:關閉nat表上啓用的連接追蹤功能(對nat的功能的一些補充)
功能生效的位置
filter功能:input, forward, output
nat功能可:prerouting, output(很少用到), postrouting
mangle功能:prerouting,input, forward, output, postrouting
raw:prerouting,output #只能發生在nat功能的前半段
規則編寫注意
注意:規則的次序非常關鍵,而檢查規則的時候,是按照從上往下的方式進行檢查的。所以在編寫規則的時候應該 :
1 。同類規則,匹配範圍小的放上面;
2 。不同類規則,匹配報文機率較大的放上面;
規則匹配流程
防火牆是層層過濾的。實際按照規則的順序從上到下,從前到後進行過濾的。(按照規則順序依次匹配的)
如果匹配上規則,明確表明是阻止還是通過,數據包就不在向下匹配新規則了
如果規則中沒有明確表明是阻止還是通過,也就是沒有匹配規則,向下進行匹配直到 匹配默認規則得到明確的阻止還是通過。
防火牆的策略
通:默認門是關着的,必須要定義誰能進
堵:大門是洞開的,但是你必須有身份認證,否則不能進。