iptables介紹

iptables是什么

iptables是linux中進(jìn)行網(wǎng)絡(luò)規(guī)則配置的工具,netfilter工作在內(nèi)核空間,iptables設(shè)置的規(guī)則是通過netfilter進(jìn)行生效的。
下圖展示了各個協(xié)議棧以及iptables中規(guī)則的應(yīng)用情況


image.png
image.png

netfilter hooks

netfilter 提供了 5 個 hook 點。包經(jīng)過協(xié)議棧時會觸發(fā)內(nèi)核模塊注冊在這里的處理函數(shù) 。觸發(fā)哪個 hook 取決于包的方向(是發(fā)送還是接收)、包的目的地址、以及包在上一個 hook 點是被丟棄還是拒絕等等。

下面幾個 hook 是內(nèi)核協(xié)議棧中已經(jīng)定義好的:

  • NF_IP_PRE_ROUTING: 接收到的包進(jìn)入?yún)f(xié)議棧后立即觸發(fā)此 hook,在進(jìn)行任何路由判斷 (將包發(fā)往哪里)之前
  • NF_IP_LOCAL_IN: 接收到的包經(jīng)過路由判斷,如果目的是本機,將觸發(fā)此 hook
  • NF_IP_FORWARD: 接收到的包經(jīng)過路由判斷,如果目的是其他機器,將觸發(fā)此 hook
  • NF_IP_LOCAL_OUT: 本機產(chǎn)生的準(zhǔn)備發(fā)送的包,在進(jìn)入?yún)f(xié)議棧后立即觸發(fā)此 hook
  • NF_IP_POST_ROUTING: 本機產(chǎn)生的準(zhǔn)備發(fā)送的包或者轉(zhuǎn)發(fā)的包,在經(jīng)過路由判斷之后, 將觸發(fā)此 hook

iptables基礎(chǔ)概念

iptables 表

先來看看 iptables 提供的 table 類型。這些 table 是按規(guī)則類型區(qū)分的。

Filter Table

filter table 是最常用的 table 之一,用于判斷是否允許一個包通過。

在防火墻領(lǐng)域,這通常稱作“過濾”包(”filtering” packets)。這個 table 提供了防火墻 的一些常見功能。

NAT Table

nat table 用于實現(xiàn)網(wǎng)絡(luò)地址轉(zhuǎn)換規(guī)則。

當(dāng)包進(jìn)入?yún)f(xié)議棧的時候,這些規(guī)則決定是否以及如何修改包的源/目的地址,以改變包被 路由時的行為。nat table 通常用于將包路由到無法直接訪問的網(wǎng)絡(luò)。

Mangle Table

mangle (修正)table 用于修改包的 IP 頭。

例如,可以修改包的 TTL,增加或減少包可以經(jīng)過的跳數(shù)。

這個 table 還可以對包打只在內(nèi)核內(nèi)有效的“標(biāo)記”(internal kernel “mark”),后 續(xù)的 table 或工具處理的時候可以用到這些標(biāo)記。標(biāo)記不會修改包本身,只是在包的內(nèi)核 表示上做標(biāo)記。

Raw Table

iptables 防火墻是有狀態(tài)的:對每個包進(jìn)行判斷的時候是依賴已經(jīng)判斷過的包。

建立在 netfilter 之上的連接跟蹤(connection tracking)特性使得 iptables 將包 看作已有的連接或會話的一部分,而不是一個由獨立、不相關(guān)的包組成的流。連接跟蹤邏 輯在包到達(dá)網(wǎng)絡(luò)接口之后很快就應(yīng)用了。

raw table 定義的功能非常有限,其唯一目的就是提供一個讓包繞過連接跟蹤的框架。

Security Table

security table 的作用是給包打上 SELinux 標(biāo)記,以此影響 SELinux 或其他可以解讀 SELinux 安全上下文的系統(tǒng)處理包的行為。這些標(biāo)記可以基于單個包,也可以基于連接。

iptables 規(guī)則(鏈)

對于各個具體的鏈而言:

  • INPUT 鏈:處理來自外部的數(shù)據(jù)。
  • OUTPUT 鏈:處理向外發(fā)送的數(shù)據(jù)。
  • FORWARD 鏈:數(shù)據(jù)轉(zhuǎn)發(fā)。通過路由表后發(fā)現(xiàn)目的地址非本機,則匹配該鏈中的規(guī)則。
  • PREROUTING 鏈:處理剛到達(dá)本機并在路由轉(zhuǎn)發(fā)前的數(shù)據(jù)包。
  • POSTROUTING 鏈: 處理即將離開本機的數(shù)據(jù)包。

iptables 常用命令

iptables -t filter -L

參考資料

  1. A Deep Dive into Iptables and Netfilter Architecture
  2. iptables與netfilter架構(gòu)
  3. iptables 概念、原理及相關(guān)操作介紹
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容