iptables簡介

iptables是什麼?

iptables是運行在用戶空間的應用軟件,通過控制Linux內核netfilter模塊,來管理網絡數據包的處理和轉發。

iptables的基本結構

要對網絡數據包進行處理和轉發,我們首先需要明確的問題是:對什麼樣的數據進行怎麼樣的處理。因此我們可以用匹配條件 匹配成功後執行的動作來描述我們的處理策略,我們將這種策略稱之爲規則

一條規則能夠表達的信息是非常有限的,當我們需要描述更加複雜的策略的時候,我們就需要更多的規則。我們將這些規則排列起來,依次執行,我們將規則組成的有序列表稱爲

表達清楚了處理策略之後,我們接下來需要考慮在什麼時候執行這些策略,我們先來看看網絡數據包的處理過程:
在這裏插入圖片描述
從這張圖中,我們可以發現五個執行策略的機會:
在這裏插入圖片描述
因此我們將鏈也分爲五種,以區分他們起作用的不同階段:

  • PREROUTING: 數據包進入路由表之前
  • INPUT: 通過路由表後,目的地爲本機
  • FORWARD: 通過路由表後,目的地不爲本機
  • OUTPUT: 由本機產生,向外轉發
  • POSTROUTIONG: 發送到網卡接口之前

因爲iptables有多種功能,爲了更好地管理,我們將功能相同的鏈放到同一個中,iptables內置有四種表,每張表會包含一種或多種鏈:

  • raw: PREROUTING、OUTPUT
  • mangle: PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
  • nat: PREROUTING、OUTPUT、POSTROUTING
  • filter: INPUT、FORWARD、OUTPUT

當多個表存在同一個鏈時,按照 raw -> mangle -> nat -> filter 的順序執行。

最後我們總結一下,在iptables中存在多個表,每個表中包含多個鏈,每個鏈中又包含多條規則,處理過程如下圖:

(此圖來自互聯網,如有侵權,請聯繫我)

iptables命令

iptables命令的使用我覺得Linux實戰-2小時玩轉iptables講得已經足夠好了,我再列舉不過畫蛇添足,因此在這裏只寫了一些自己的理解,具體的命令使用方法請參考Linux實戰-2小時玩轉iptables

要改變iptables的功能,需要對iptables中的各種規則進行操作,iptables命令的基本格式如下:

iptables [-t 表名] <操作命令> [鏈名] [規則號碼] [匹配條件] [匹配之後的操作] 

表名、鏈名、規則號碼確定了操作的對象,操作命令描述了操作的類型,匹配條件和匹配之後的操作提供了執行操作所需的信息。

操作命令無非增刪改查四大類:

  • 增:
    • -A <鏈名> :Append 追加一條規則,放到最後
    • -I [規則號碼]:Insert 插入一條規則(如果不指定規則號碼則默認爲1)
    • -P <鏈名> <動作>:Policy 設置某個鏈的默認規則
    • -D <鏈名> {規則號碼 | 具體規則內容}:Delete 刪除一條規則
    • -F [鏈名]:清空規則
    • -R <鏈名> <規則號碼> <具體規則內容>:Replace 替換一條規則
    • -L <鏈名>:List 列出規則

匹配條件從下層到上層依次有:

  • 鏈路層:流入接口(-i)、流出接口(-o)
  • 網絡層:來源地址(-s)、目的地址(-d)、協議類型(-p)
  • 傳輸層:來源端口(–sport)、目的端口(–dport)

匹配之後的操作有:

  • ACCEPT:允許數據包通過本鏈
  • DROP:組織數據包通過本鏈而丟棄它
  • 修改地址
    • SNAT:修改源地址
    • DNAT:修改目的地址
    • MASQUERADE :動態源地址轉換
  • REDRICT:進行端口映射,發送到某個端口的數據會被重定向到另一個端口。

參考資料

iptables - 維基百科,自由的百科全書
Linux實戰-2小時玩轉iptables

發佈了8 篇原創文章 · 獲贊 26 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章