防火牆是工做在主機或網絡邊緣,可以對其所匹配到的報文根據事先定義好的規則做出相應處理的組件,能夠是軟件,也能夠是硬件,還能軟硬結合實現。服務器
早期在
openBSD
中經過內核中的ipfw
實現簡單的數據報過濾功能、後來在Linux 2.2內核
中使用ipchains
來取代,意爲鏈、後來在Linux 2.4內核
中被iptables
所取代,意爲表。網絡
事實上
Linux 2.6
實現防火牆是經過內核中的netfilter
框架完成的,iptables
其實不止指的是一個在用戶空間的應用程序,其實仍是內核中的一個存放特定規則的模塊,因此iptables
的全稱應該爲netfilter/iptables
。架構
網絡防火牆通常都設置在整個網絡的邊緣,才能對全部出入的數據報進行分析和進行相應的處理,做爲一個主機防火牆應該在數據報文出入主機時在
TCP/IP協議棧
的特定位置對數據報文進行攔截並執行對應動做,那麼在netfilter
架構中分別有五個位置能夠做爲防火牆的攔截點,咱們稱它們爲hook function
(鉤子函數)。併發
數據報文進入TCP/IP協議棧路由選擇前會被
PREROUTING
「鉤」住,分析其數據包對其相應操做,注意
:PREROUTING
鏈不能對數據包進行過濾,PREROUTING
鏈是整個netfilter
框架中的第一關框架
經過
PREROUTING
後進行路由選擇若是數據包是進入本機內部,則轉發到INPUT
鏈,INPUT
鏈可以經過實現定義好的規則對數據包進行篩選若是被匹配則執行相應動做,INPUT
鏈能夠對數據包進行過濾,INPUT
鏈是數據報文進入用戶空間的必經之路ide
經過
PREROUTING
後進行路由選擇若是數據包只是經過本機進行轉發,則轉發到FORWARD
鏈,FORWARD
鏈可以經過事先定義好的規則對數據包進行匹配檢查並執行相應動做,INPUT
鏈能夠對數據包進行過濾,正是有了FORWARD
鏈iptables
纔可以做爲一個網絡防火牆運行在網絡邊緣對進出網絡的數據報文進行過濾函數
數據包從用戶空間的進程經過路由選擇特定的網卡接口後轉到
OUTPUT
鏈,OUTPUT
鏈可以經過實現定義好的規則對數據報文進行匹配檢查並執行相應動做,OUTPUT
鏈能夠對數據包進行過濾高併發
數據包從
OUTPUT
或FORWARD
轉發而來,到達netfilter
框架中的最後一關,分析數據包並執行對應動做,和POSTROUTING
同樣不能對數據包進行過濾spa
iptables
之因此被稱爲iptables
是其過濾數據包的規則是經過四張表的來定義code
整個
iptables
最關鍵的表,實現數據包的過濾,能夠由INPUT,FORWARD,OUTPUT
這三個可以實現過濾功能的鏈組成
學過網絡的同窗應該都知道
NAT(Network Address Translation)網絡地址轉換
,正是應爲有了這項技術才使得咱們現今還可以有IPv4
可使用,在iptables
中也能夠實現NAT
的相關功能, 例如SNAT, DNAT, MASQUERADE
等功能,nat表能夠由PREROUTING, FORWARD, POSTROUTING
組成
mangle
能夠對匹配到的報文的數據報進行拆解,作出修改,從新封裝等操做,通常咱們用的不多,五個鏈都能實現mangle
的功能
raw
關閉NAT
的鏈接追蹤機制,防止在高併發的訪問下服務器的內存溢出致使故障,可由PREROUTING,OUTPUT
實現
實現哪些功能: 判斷添加在哪張表上
報文的流經路徑: 判斷添加在哪一個鏈上
1.同類規則(訪問同一程序),匹配範圍小的放在上面
2.不一樣類的規則(訪問不一樣應用), 匹配到報文頻率高的放上面
3.將那些可由一條規則描述的多個規則合併成一個
4.設置默認策略
本文只對
iptables
進行原理方面的簡單介紹,做者水平不高,若是發現錯誤還望海涵並及時通知我,在這裏不勝感激。 做者:AnyISalIn 感謝:MageEdu