Netfilter和iptables介紹
前言
在開始Kubernetes的網路之前我們先來學習Netfilter,Netfilter可能瞭解的人比較少,但是iptables用過 Linux的都應該知道。本文主要介紹Netfilter與iptables的原理。
什麼是Netfilter
Netfilter顧名思義就是網路過濾器,其主要功能就是對進出核心協議棧的資料包進行過濾或者修改,iptables 就是建立在Netfilter之上。Netfilter就是Linux核心裡擋在網絡卡和使用者態程序之間的一道防火牆。
這幅示意圖中,IP包一進一出,有幾個關鍵的檢查點,它們正是Netfilter設定防火牆的地方。Netfilter通過向核心協議棧中不同的位置註冊鉤子函式來對資料包進行過濾或者修改操作,這些位置稱為掛載點,主要有 5 個:PRE_ROUTING、LOCAL_IN、FORWARD、LOCAL_OUT 和 POST_ROUTING,如下圖所示:
PRE_ROUTING: IP包進入IP層後,還沒有對資料包進行路由判定前;
LOCAL_IN: 進入主機,對IP包進行路由判定後,如果IP 包是傳送給本地的,在進入傳輸層之前對IP包進行過濾;
LOCAL_OUT: IP包通過傳輸層進入使用者空間,交給使用者程序處理。而處理完成後,使用者程序會通過本機發出返回的 IP 包,在沒有對輸出的IP包進行路由判定前進行過濾;
FORWARD: IP包進行路由判定後,如果IP包不是傳送給本地的,在轉發IP包出去前進行過濾;
POST_ROUTING: 對於輸出的IP包,在對IP包進行路由判定後進行過濾;
在圖中可以看出決定IP包走向就是路由,按照路由的判定可以分為兩條路線:
第一個路由通過查詢輸入資料包 IP頭部的IP地址,判斷是否為本機的IP地址是否一致,如果與本機的 IP地址一致,說明資料是傳送給本機的,否則說明資料包是傳送給其他主機,只是經過本機中轉; 第二個路由判定根據輸出資料包 IP頭部的IP地址 從路由表中查詢對應的路由資訊,然後根據路由資訊獲取下一主機的 IP地址,然後進行資料傳輸;
通過向掛載點註冊鉤子函式,就能夠對處於不同階段的資料包進行過濾或者修改操作。由於鉤子函式能夠註冊多個,因此掛載點通過連結串列連結,所以掛載點又被稱為鏈,因此LOCAL_IN掛載點又稱為INPUT鏈、LOCAL_OUT 掛載點又稱為 OUTPUT鏈、FORWARD掛載點又稱為 PORWARD鏈、PRE_ROUTING掛載點又稱為 PREROUTING鏈、POST_ROUTING掛載點又稱為 POSTOUTING鏈。
什麼是iptables
iptables是建立在 Netfilter 之上的資料包過濾器,通過向 Netfilter 的掛載點上註冊鉤子函式來實現對資料包過濾的,從iptables這個名字上可以看出一定具有表的概念,iptables通過把這些規則表掛載在 Netfilter 的不同鏈上,對進出核心協議棧的資料包進行過濾或者修改操作。
iptables包括四種表:
Filter表
Filter表用於過濾資料包,是iptables的預設表,因此如果你配置規則時沒有指定表,那麼就預設使用Filter表,Filter表可以作用於INPUT鏈、OUTPUT鏈、PORWARD鏈;
NAT表
NAT表用於對資料包的網路地址轉換(IP、埠),分別可以掛載到PREROUTING鏈、POSTOUTING鏈、OUTPUT鏈;
Mangle表
Mangle主要用來修改IP資料包頭,比如修改TTL值,同時也用於給資料包新增一些標記,從而便於後續其它模組對資料包進行處理,可以作用在所有鏈上;
ROW表
Raw表用於判定資料包是否被狀態跟蹤處理,可以作用於PREROUTING鏈、OUTPUT鏈;
資料包從網路中進入到核心協議棧的過程中,要執行的 iptables 規則,如果在執行某條 iptables 規則失敗後,會直接把資料包丟棄,不會繼續執行下面的規則。
新增iptables規則
使用 iptables 命令新增規則,iptables可以分為四部分:
iptables-t表-A鏈匹配規則動作
匹配條件
匹配條件分為基本匹配條件與擴充套件匹配條件,基本匹配條件包括源IP地址和目標IP地址等,擴充套件匹配條件包括源埠和目標埠等;
處理動作
處理動作是指當匹配條件成功後要進行的一系列操作過程,動作也可以分為 基本動作 和 擴充套件動作,常用的動作如下:
ACCEPT:允許資料包通過;
DROP:直接丟棄資料包,不給任何迴應資訊;
REJECT:拒絕資料包通過,必要時會給資料傳送端一個響應的資訊,客戶端剛請求就會收到拒絕的資訊;
SNAT:源IP地址轉換;
DNAT:目標IP地址轉換;
REDIRECT:在本機做埠對映;
-t<表>:指定要操縱的表;
-A<鏈>:向規則鏈中新增條目;
-D<鏈>:從規則鏈中刪除條目;
-I<鏈>:向規則鏈中插入條目;
-R<鏈>:替換規則鏈中的條目;
-L:顯示規則鏈中已有的條目;
-F:清楚規則鏈中已有的條目;
-Z:清空規則鏈中的資料包計算器和位元組計數器;
-N:建立新的使用者自定義規則鏈;
-P:定義規則鏈中的預設目標;
-h:顯示幫助資訊;
-p:指定要匹配的資料包協議型別;
-s:指定要匹配的資料包源ip地址;
-j<動作>:指定要進行的動作行為;
-i<網路介面>:指定資料包進入本機的網路介面;
-o<網路介面>:指定資料包要離開本機所使用的網路介面。
--dport<埠>:匹配目標埠號。
--sport<埠>:匹配來源埠號。
結束
歡迎大家點點關注,點點贊!