IPTALBES架構:
先看一下IpTables這個單詞,這其實是兩個單詞的縮寫,tables的意思是多張表。
iptables是一個程序,位於用戶空間。這個命令用來制訂filter表、nat表、mangle表的規則。
netfilter是一個過濾模塊,這個模塊位於內核當中網絡層,可以攔截進入和出去的數據包,根據fileter表(過濾表)決定是否允許此數據包通過;可以根據NAT表改變包裏面的IP地址;可以根據mangle表決定修改數據包當中中的某一個字段,比如說TTL,QOS、標記等
轉發:forward發生在網絡層,當一個數據包從服務器一個網卡進入到網絡層時會判決,如果目的IP是自己就向處提交,如果目的不是自己的話就查自己的路由表,根據路由表的指示從相應的接口轉發出去。
注意:上述牽扯到了兩種數據報文,一種是目的是服務器本身,另一種不是服務器本身。還有第三種報文,就是服務器自己產生的報文。
netfilter既然要控制這三種報文的話就要在一些關鍵的位置對數據包進行攔截,攔截着肯定是用勾子函數進行攔截,那麼netfilter函數就要在一些關鍵的位置佈置勾子函數,那麼都在什麼地方佈置了勾子函數呢?如下圖:
當一個數據包的目的是服務器本身時,要經過兩個勾子函數。
當一個數據包從服務器發出時,也要經過兩個勾子函數。
當一個數據外需要服務器進行路由時,需要經過三個函數。
這五個勾子函數都可以使用那三張表。
什麼是表?什麼是勾子函數?什麼是鏈?
勾子函數可以理解成位於內核當中的五個位置。
表就是filter表、nat表、mangle表,三張表我們可以理解成爲不同的功能,比如,nat可以實現地址轉換。
有的勾子函數可以使用這三張表,有的勾子函數能使用有限的幾種,如下圖:
注意:
filter只能在input,forward、output三個地方實現。