Linux 內核防火牆的工作原理一


  Linux的內核提供的防火牆功能通過netfiter框架實現,並提供iptables工具配置和修改防火牆的規則 

  netfilter的通用框架不依賴於具體的協議,而是為每種網絡協議定義一套鈎子函數。這些鈎子函數在

數據包經過協議棧的幾個關鍵點時被調用,在這幾個點中,協議棧將數據包及鈎子函數作為參數,傳遞

netfilter框架

  對於每種網絡協議定義的鈎子函數,任何內核模塊可以對每種協議的一個或多個鈎子函數進行注冊,

實現掛接。這樣當某個數據包被傳遞給netfilter框架時,內核能檢測到是否有有關模塊對該協議和鈎子函

數進行了注冊,如發現注冊信息則調用該模塊在注冊時使用的回調函數,然后對應模塊去檢查、修改、

丟棄該數據包及指示netfilter將該數據包傳入用戶空間的隊列

  鈎子函數提供了一種方便的機制,以便在數據包通過Linux內核的不同位置上截獲和操作處理數據包

如下圖所示;

鈎子函數說明:

  NF_IP_PRE_ROUTING:網絡數據包進入系統,經過簡單的檢測后,數據包轉交給該函數進行處理,

              然后根據系統設置的規則對數據包進行處理,如果數據包不被丟棄則交給

              路由函數進行處理,在該函數中可替換IP包的目的地址,即DNAT;

  NF_IP_LOCAL_IN:所有發送給系統的數據包都要能過該函數的處理,該函數根據系統設置的規則對

           數據包進行處理,如果數據包不被丟棄則交給本地的應用程序;

  NF_IP_FORWARD:所有不是發送給本機的數據包都要能過該函數進行處理,該函數會根據系統設置

           的規則對數據包進行處理,如數據包不被丟棄則轉 NF_IP_POST_ROUTING 進行處理。

  NF_IP_LOCAL_OUT:所有從本地應用程序出來的數據包必須通過該函數的處理,該函數根據系統設置的

           規則對數據包進行處理,如果數據包不被丟棄則交給路由函數進行處理。

  NF_IP_POST_ROUTING:所有數據包在發給其他主機之前需要通過該函數的處理,該函數根據系統設置

              的規則對數據包進行處理,如果數據包不被丟棄,將數據包發給數據鏈路層,在

              該函數中可以替換IP包的源地址,即SNAT.

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM