Linux中iptables原理的圖文詳解
一、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_ROUTING
、INPUT
、OUTPUT
、FORWARD
、POST_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
:
-n-L
、 ,查看目前執行的防火牆規則清單 #
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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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