1. 程式人生 > >IPTables 和 Netfilter 框架

IPTables 和 Netfilter 框架

前言

防火牆是保護伺服器的重要工具。 Linux中最常用的基本防火牆軟體是iptables。iptables通過與Linux核心網路堆疊(networking stack)中的包過濾鉤子(packet filtering hooks)進行互動來工作。 出入網路系統的資料包將在通過網路堆疊時會觸發這些鉤子。這些核心鉤子稱為netfilter框架。

Netfilter 鉤子

一個程式可以註冊5個netfilter鉤子。 當資料包通過網路堆疊時,將觸發與被註冊鉤子相關的核心模組。下面介紹鉤子

  • NF_IP_PRE_ROUTING:剛剛進入網路層的資料包通過此點
  • NF_IP_LOCAL_IN
    :經路由查詢後,送往本機的通過此點,INPUT包過濾在此點進行
  • 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鉤子觸發。對資料包作路由選擇後應用此鏈中的規則(所有的資料包出來的時侯都先由這個鏈處理)