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