目錄
 、netfilter與iptables
 二、filter、nat、mangle等規則四表
三、INPUT、FORWARD等規則五鍊與規則
 四、Linux封包路由原理
# 五、iptables寫出規則
首頁 運維 linux運維 Linux中iptables原理的圖文詳解

Linux中iptables原理的圖文詳解

Jul 26, 2017 pm 04:00 PM
iptables linux 詳解

 、netfilter與iptables


  (1)Netfilter是由Rusty Russell提出的Linux 2.4核心防火牆框架,該框架既簡潔又靈活,可實現安全策略應用程式中的許多功能,如封包過濾、封包處理、位址偽裝、透明代理、動態網路位址轉換(Network Address Translation,NAT),以及基於使用者及媒體存取控制(Media Access Control,MAC)位址的過濾和基於狀態的過濾、包速率限制等。 Iptables/Netfilter的這些規則可以透過靈活組合,形成非常多的功能、涵蓋各個方面,這一切都得益於它的優秀設計思想。

  Netfilter是Linux作業系統核心層內部的封包處理模組,它具有以下功能:

  • 網路位址轉換(Network Address Translate)

  • 封包內容修改

  • 封包過濾防火牆

  (2)Netfilter 平台中製定了封包的五個掛載點(Hook Point,我們可以理解為回呼函數點,資料包到達這些位置的時候會主動呼叫我們的函數,使我們有機能在資料包路由的時候改變它們的方向、內容) ,這5個掛載點分別是PRE_ROUTINGINPUTOUTPUTFORWARDPOST_ROUTING

 

  (3)Netfilter 設定的規則是存放在內核記憶體中的,而iptables 是應用層的應用程序,它透過Netfilter放出的介面來對存放在核心記憶體中的XXtables(Netfilter的設定表)進行修改。這個XXtables由表格tables、鏈chains、規則rules組成,iptables在應用層負責修改這個規則檔。類似的應用程式還有 firewalld 。

   

 


 二、filter、nat、mangle等規則四表


 (1)table有 filter 、nat、mangle等規則表;

  filter表

    主要用於對封包進行過濾,根據特定的規則決定是否放行該資料包(如DROP、ACCEPT、REJECT、LOG)。 filter 表格對應的核心模組為iptable_filter,包含三個規則鏈:

    • #INPUT鏈:INPUT針對那些目的地是本地的包

    • FORWARD鏈:FORWARD過濾所有不是本地產生的並且目的地不是本地(即本機只是負責轉發)的

    • OUTPUT鏈:OUTPUT是用來過濾所有本地產生的套件   

  nat表

#    主要用於修改封包的IP位址、連接埠號碼等資訊(網路位址轉換,如SNAT、DNAT、MASQUERADE、REDIRECT)。屬於一個流的包(因為包的大小限制導致資料可能會被分成多個資料包)只會經過

  這個表一次。如果第一個套件被允許做NAT或Masqueraded,那麼剩下的套件都會自動地被做相同的操作,也就是說,餘下的套件不會再通過這個表。表格對應的核心模組為iptable_nat,包含三個鏈

    • #PREROUTING鏈:作用是在套件剛好到達防火牆時改變它的目的位址

    • OUTPUT連結:改變本地產生的套件的目的位址

    • POSTROUTING鏈:在套件就要離開防火牆之前改變其來源位址

##  mangle表<strong></strong>

    主要用於修改資料包的TOS(Type Of Service,服務類型)、TTL(Time To Live,生存週期)指以及為資料包設定Mark標記,以實現Qos(Quality Of Service,服務品質)調整以及策略路由等

  應用,由於需要相應的路由設備支持,因此應用並不廣泛。包含五個規則鏈-PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

  

raw表<strong></strong>

#    是自1.2.9以後版本的iptables新增的表,主要用於決定封包是否被狀態追蹤機制處理。在符合資料包時,raw表的規則要優先於其他表。包含兩條規則鏈-OUTPUT、PREROUTING

 

(2)iptables中封包與4種被追蹤連線的4種不同狀態:

    • NEW該套件想要開始一個連線(重新連線或將連線重新導向)

    • RELATED該套件是屬於某個已經建立的連線所建立的新連線。例如:FTP的資料傳輸連線就是控制連線所 RELATED出來的連線。 --icmp-type 0 ( ping 回應) 是--icmp-type 8 (ping 請求)所RELATED出來的。

    • ESTABLISHED :只要發送並接到應答,一個資料連接從NEW變為ESTABLISHED,而且該狀態會繼續匹配這個連接的後續數據包。

    • INVALID封包不能被辨識屬於哪個連接或沒有任何狀態例如記憶體溢出,收到不知屬於哪個連接的ICMP錯誤訊息,一般應該DROP這個狀態的任何資料。

 


三、INPUT、FORWARD等規則五鍊與規則


 

# (1)在處理各種資料包時,根據防火牆規則的不同介入時機,iptables供涉及5種預設規則鏈,從應用時間點的角度理解這些鏈:

    • INPUT鏈:當接收到防火牆本機位址的封包(入站)時,會套用此鏈中的規則。

    • #OUTPUT鏈:當防火牆本機向外發送資料包(出站)時,套用此鏈中的規則。

    • #FORWARD連結:當接收到需要通過防火牆傳送給其他位址的封包(轉送)時,套用此鏈中的規則。

    • #PREROUTING連結:在對封包作路由選擇之前,應用此鏈中的規則,如DNAT。

    • #POSTROUTING連結:在對封包作路由選擇之後,套用此鏈中的規則,如SNAT。

 

#(2)其中INPUT、OUTPUT鏈結更多的應用在「主機防火牆」中,即主要針對伺服器本機進出資料的安全控制;而FORWARD、PREROUTING、POSTROUTING鏈更多的應用在「網路防火牆」中,特別是防火牆伺服器作為網關使用時的情況。


 四、Linux封包路由原理


 

   (1)了解Netfilter和Iptables的架構與作用,並且學習了控制Netfilter行為的Xtables表的結構,那麼這個Xtables表是怎麼在核心協定棧的資料包路由中運作的呢?

  工作流程:網口資料包由底層的網卡NIC接收,透過資料鏈結層的解包之後(去除資料鏈路幀頭),就進入了TCP/IP協定棧(本質就是一個處理網路封包的核心驅動)和Netfilter混合的封包處理流程中了。封包的接收、處理、轉送流程構成一個有限狀態向量機,經過一些列的核心處理函數、以及Netfilter Hook點,最後被轉送、或是本次上層的應用程式消化掉。

如圖:

 從上圖中,我們可以總結出下列法則:

    • 當一個資料包進入網路卡時,資料包首先進入PREROUTING鏈,在PREROUTING鏈中我們有機會修改資料包的DestIP(目的IP),然後核心的"路由模組"根據"資料包目的IP"以及"核心中的路由表"判斷是否需要轉發出去(注意,這個時候資料包的DestIP有可能已經被我們修改過了)

    • 如果資料包就是進入本機的(即封包的目的IP是本機的網口IP),封包就會沿著圖向下移動,到達INPUT鏈。封包到達INPUT鏈後,任何進程都會-收到它

    • 本機上執行的程式也可以傳送封包,這些封包經過OUTPUT鏈,然後到達POSTROTING鏈輸出(注意,這個時候封包的SrcIP有可能已經被我們修改過了)

    • 如果封包是要轉送出去的(即目的IP位址不再目前子網路中),且核心允許轉送,資料包就會向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出(選擇對應子網路的網口發送出去)

  在寫iptables規則的時候,要時刻牢記這張路由次序圖,根據所在Hook點的不同,靈活配置規則

 


# 五、iptables寫出規則


 

        指令格式:

             #  

##     

1 iptables -I INPUT -s 0/0 -d 192.168.42.153 -p tcp -m multiport --dports 22,80,3306 -j AC ACPT#1 iptables -t filter -I INPUT -d 192.168.42.153 -p tcp --dport 80 -j ACCEPT 

  1.[-t 表名]

:該規則所操作的哪個表,可以使用filter、nat等,如果沒有指定則預設為filter

<strong></strong>-A:新增一條規則,到該規則鏈清單的最後一行

    • #-I

      :插入一條規則,原本該位置上的規則會往後順序移動,沒有指定編號則為1

    • -D

      :從規則鏈中刪除一條規則,或是輸入完整的規則,或是指定規則編號加以刪除

    • -R

      :取代某條規則,規則替換不會改變順序,而且必須指定編號。

    • -P

      :設定某條規則鏈的預設動作

    • -nL

      -L

      -n
    • ,查看目前執行的防火牆規則清單
    • #  2.chain名:指定規則表的哪個鏈,如INPUT、OUPUT、FORWARD、PREROUTING等

[規則編號]:插入、刪除、取代規則時用,--line-numbers

顯示號碼
    • #[-i|o 網路卡名稱]:i是指定封包從哪塊網卡進入,o是指定封包從哪塊網卡輸出

    • #[-p 協定類型]

      :可以指定規則應用的協定,包含tcp、udp和icmp等

    • [-s 來源IP位址]

      :來源主機的IP位址或子網路位址

    • [--sport 來源埠號]

      :封包的IP的來源埠號碼

    • [-d目標IP位址]

      :目標主機的IP位址或子網路位址

    • [--dport目標連接埠號碼]

      :封包的IP的目標連接埠號碼

    •   3.-m

    • #:extend matches,這個選項用來提供更多的符合參數,如:

<strong></strong><strong></strong>

    -m state --state ESTABLISHED,RELATED

  • #-m tcp --dport 22
    • -m multiport --dports 80,8080

    • -m icmp --icmp- type 8

    •   
    • 4.<-j 動作>

    • :處理資料包的動作,包括ACCEPT 、DROP、REJECT等

<strong></strong><strong></strong>

  • ACCEPT

    允許封包透過
    • DROP直接丟棄封包,不給任何回應訊息

    • #REJECT拒絕封包通過,必要時會給資料傳送端一個回應的訊息。

    • SNAT來源位址轉換。在進入路由層面的route之後,出本地的網路棧之前,改寫來源位址,目標位址不變,並在本機建立NAT表項,當資料回傳時,根據NAT表將目的位址資料改寫為資料傳送出去時候的來源位址,並發送給主機。解決內網用戶用同一個公網位址上網的問題。

    • MASQUERADE
    • ,是SNAT的一種特殊形式,適用於像adsl這種臨時會變的ip上

    • DNAT:目標位址轉換。和SNAT相反,IP套件經過route之前,重新修改目標位址,來源位址不變,在本機建立NAT表項,當資料回傳時,根據NAT表將來源位址修改為資料傳送過來時的目標位址,並發給遠端主機。可以隱藏後端伺服器的真實位址。 (感謝網友提出之前這個地方與SNAT寫反了)
      REDIRECT:是DNAT的一種特殊形式,將網路包轉送到本地host上(不管IP頭部指定的目標位址是啥),方便在本機做連接埠轉送。

    • LOG在/var/log/messages檔案中記錄日誌訊息,然後將封包傳遞給下一規則

     除去最後一個LOG,前3條規則匹配資料包後,該資料包不會再往下繼續匹配了,所以編寫的規則順序極為關鍵。

 

以上是Linux中iptables原理的圖文詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

vscode 無法安裝擴展 vscode 無法安裝擴展 Apr 15, 2025 pm 07:18 PM

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

vscode終端使用教程 vscode終端使用教程 Apr 15, 2025 pm 10:09 PM

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

vscode 可以用於 mac 嗎 vscode 可以用於 mac 嗎 Apr 15, 2025 pm 07:36 PM

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。

See all articles