IPTables 和 Netfilter 框架
前言
防火牆是保護伺服器的重要工具。 Linux中最常用的基本防火牆軟體是iptables。iptables通過與Linux核心網路堆疊(networking stack)中的包過濾鉤子(packet filtering hooks)進行互動來工作。 出入網路系統的資料包將在通過網路堆疊時會觸發這些鉤子。這些核心鉤子稱為netfilter框架。
Netfilter 鉤子
一個程式可以註冊5個netfilter鉤子。 當資料包通過網路堆疊時,將觸發與被註冊鉤子相關的核心模組。下面介紹鉤子
- NF_IP_PRE_ROUTING:剛剛進入網路層的資料包通過此點
- NF_IP_LOCAL_IN
- NF_IP_FORWARD:要轉發的包通過此點,FORWARD包過濾在此點進行
- NF_IP_POST_ROUTING:所有馬上便要通過網路裝置出去的包通過此檢測點,內建的源地址轉換功能(包括地址偽裝)在此點進行
- NF_IP_LOCAL_OUT:本機程序發出的包通過此檢測點,OUTPUT包過濾在此點進行。
IPTables和鏈
iptables防火牆使用表來組織規則。 例如,如果規則處理網路地址轉換,它將被放入nat表中。 如果規則決定資料包是否繼續發往目的地,它將被放入filter表中。
表
Filter表
Filter表是iptables中使用最廣泛的表之一。 Filter表用於決定是否讓資料包繼續發完目的地,還是拒絕其請求。 Filter表提供了人們在討論防火牆時所考慮的大量功能。
NAT表
NAT表用於實現網路地址轉換。 當資料包進入網路堆疊時,此表中的規則將確定是否以及如何修改資料包的源地址或目標地址,以便影響資料包和任何響應流量的路由方式。 這通常用於在無法直接訪問時將資料包路由到網路。
Mangle表
mangle表用於以各種方式更改資料包的IP頭。 例如,您可以調整資料包的TTL(生存時間)值,或者延長或縮短資料包可以承受的有效網路跳數。 其他IP頭可以以類似的方式更改。
該表還可以在資料包上放置內部核心“標記”,以便在其他表和其他網路工具中進一步處理。 此標記不會觸及實際資料包,但會將標記新增到核心的資料包表示中。
鏈
在每個iptables表中,規則在單獨的“鏈”中進一步組織。 雖然表是根據規則一般作用定義的,但內建連結串列示觸發iptables表的netfilter鉤子。 鏈決定何時執行規則。內建鏈的名稱反映了與它們關聯的netfilter鉤子的名稱:
- PREROUTING:由NF_IP_PRE_ROUTING鉤子觸發。對資料包作路由選擇前應用此鏈中的規則(所有的資料包進來的時侯都先由這個鏈處理)
- INPUT:由NF_IP_LOCAL_IN鉤子觸發。進來的資料包應用此規則鏈中的策略
- FORWARD:由NF_IP_FORWARD鉤子觸發。轉發資料包時應用此規則鏈中的策略
- OUTPUT:由NF_IP_LOCAL_OUT鉤子觸發。外出的資料包應用此規則鏈中的策略
- POSTROUTING:由NF_IP_POST_ROUTING鉤子觸發。對資料包作路由選擇後應用此鏈中的規則(所有的資料包出來的時侯都先由這個鏈處理)