自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux 防火墻 Iptables 之概念篇(圖文并茂)

系統(tǒng) Linux
為什么要學(xué)Linux防火墻?當(dāng)你所在公司,出于安全原因,想上防火墻,而各大云廠商云防火墻和硬件防火墻費(fèi)用及其昂貴,出于成本考慮,此時Linux的防火墻就是最好的解決方案,如果有較高且復(fù)雜的防護(hù)需求時,也可以考慮上開源的WAF,如OpenResty、OpenWAF等,這里就不過多敘述了,可以自行谷歌了解。
  • 為什么要學(xué)Linux防火墻?當(dāng)你所在公司,出于安全原因,想上防火墻,而各大云廠商云防火墻和硬件防火墻費(fèi)用及其昂貴,出于成本考慮,此時Linux的防火墻就是最好的解決方案,如果有較高且復(fù)雜的防護(hù)需求時,也可以考慮上開源的WAF,如OpenResty、OpenWAF等,這里就不過多敘述了,可以自行谷歌了解。
  • Docker底層的網(wǎng)絡(luò)轉(zhuǎn)發(fā)是通過Linux內(nèi)核模塊netfilter/iptables完成工作的,以及流行編排工具Kubernetes的各個網(wǎng)絡(luò)插件也是,如果對iptables的理解不夠深入以及操作不熟練的話,那么在排查網(wǎng)絡(luò)、路由問題的時候,必然會困難重重。所以學(xué)好netfilter/iptables,必將事半功倍。

netfilter/iptables是什么?

netfilter/iptables 是在Linux下工作的免費(fèi)防火墻,完成拆包、過濾、封包、重定向、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。相比各大廠商昂貴的硬件防火墻來比,它是當(dāng)前最完善最穩(wěn)定的防火墻解決方案。

Linux的iptables只是作為內(nèi)核netfilter的代理,轉(zhuǎn)儲rule,真正完成安全防護(hù)功能的是位于內(nèi)核空間中的netfilter模塊。

iptables只是作為用戶操作的一個記錄、更新、刪除rule的使用工具。

iptables中最核心的是 四表五鏈,所有rule動作都是基于 四表五鏈 操作內(nèi)核模塊netfilter完成工作的。

對于ubuntu的ufw,是基于iptables封裝的一層及其友好的操作命令,會在第二篇 Linux防火墻iptables之Kubernetes篇 中,做延伸講解。

為了更好的理解iptables原理與實(shí)踐,引入Kubernetes作為演示案例,以圖文形式循序漸進(jìn)的來講解iptables在Kubernetes中是怎樣完成工作的。

此篇主要是通過圖文形式講解iptables的四表五鏈對應(yīng)關(guān)系、工作過程以及相關(guān)名詞,用于了解iptables的整體概念。

iptables 基礎(chǔ)

我們都知道iptables是按照rule來工作的,rule其實(shí)就是操作人員預(yù)定義的條件,rule一般的定義為: "如果數(shù)據(jù)包符合條件,就對對應(yīng)的數(shù)據(jù)進(jìn)行操作"。rule存放在內(nèi)核空間的信息包filter表中,這些規(guī)則包括了源地址、目標(biāo)地址、源端口、目標(biāo)端口、傳輸協(xié)議(如ICMP/UDP/TCP)與服務(wù)協(xié)議(HTTP/FTP/SSH)等。當(dāng)數(shù)據(jù)包與rule匹配時,iptables會根據(jù)rule定義的條件來處理對應(yīng)的數(shù)據(jù)包,比如accept/rejct/drop等操作,用于對防火墻rule的添加、修改、刪除等。

如果僅僅通過上述就可以理解netfilter/iptables,那是基本不可能的,因?yàn)閕ptables的抽象層級還是非常高的,為了能很好的理解netfilter/iptables,我們簡單的舉個栗子來理解。

當(dāng)客戶端訪問服務(wù)器的某個服務(wù)的時候,首先是客戶端發(fā)送數(shù)據(jù)報(bào)文到網(wǎng)卡,而TCP/IP協(xié)議棧是屬于內(nèi)核的一部分,客戶端的信息會通過內(nèi)核的TCP協(xié)議傳輸給用戶空間(用戶態(tài))的某服務(wù),此時,客戶端的數(shù)據(jù)報(bào)文到目標(biāo)地址為服務(wù)所監(jiān)聽的套接字IP地址:端口上,服務(wù)響應(yīng)客戶端請求時,會發(fā)出響應(yīng)數(shù)據(jù)報(bào)文的目標(biāo)地址是客戶端,也就是說目標(biāo)地址轉(zhuǎn)換成了源地址。上面已經(jīng)提過,netfilter是防火墻的核心工作模塊,工作在Linux內(nèi)核中,想讓防火墻達(dá)到防護(hù)的功能,就需要對內(nèi)核中的netfilter配置對應(yīng)的攔截rule,可以理解為檢查站。所有進(jìn)出的數(shù)據(jù)報(bào)文必須經(jīng)過檢查站,經(jīng)過rule篩選后,放行符合rule的數(shù)據(jù)包,攔截拒絕rule的數(shù)據(jù)包,這里面就有了 input 和 output的概念 ,在iptables中的名詞是鏈,也就是 四表五鏈中的五鏈之二,對于 四表五鏈,后面會詳細(xì)的講解。

上面的描述僅僅是邏輯的一種抽象表達(dá),因?yàn)榘l(fā)起者也有可能不是客戶端而是其他的服務(wù)器,當(dāng)本機(jī)開啟了ip_forward功能,就具備了路由轉(zhuǎn)發(fā)功能,這個時候就會用到iptables 四表五鏈 中的 PREROUTING、FORWARD、POSTROUTING。

當(dāng)開啟了防火墻的時候,數(shù)據(jù)報(bào)文會經(jīng)過以下的步驟完成,根據(jù)實(shí)際場景的改變,經(jīng)過的鏈也會有所改變。

當(dāng)數(shù)據(jù)報(bào)文不需要轉(zhuǎn)發(fā)的時候,會進(jìn)入input鏈到用戶空間經(jīng)過服務(wù)進(jìn)程處理完成后,然后在由output鏈通過postrouting鏈返回目標(biāo)地址。如果數(shù)據(jù)報(bào)文需要轉(zhuǎn)發(fā)的時候,會直接在內(nèi)核中通過forward鏈完成轉(zhuǎn)發(fā)動作,經(jīng)由output鏈直接將數(shù)據(jù)報(bào)文送向目標(biāo)地址。

由上圖可以看出來,四表五鏈中的五鏈完整的的工作過程。

  • 由當(dāng)前主機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文: prerouting –> forward –> postrouting
  • 進(jìn)入當(dāng)前主機(jī),到達(dá)用戶空間的服務(wù)進(jìn)程數(shù)據(jù)報(bào)文: prerouting –> input。
  • 由當(dāng)前主機(jī)中的用戶空間服務(wù)進(jìn)程處理的數(shù)據(jù)報(bào)文: output –> postrouting

什么是鏈?

通過上述已經(jīng)了解到,iptables是對經(jīng)過的數(shù)據(jù)報(bào)文匹配rule,然后執(zhí)行對應(yīng)的操作,當(dāng)數(shù)據(jù)報(bào)文經(jīng)過檢查站的時候,必須匹配當(dāng)前檢查站的rule,而每個檢查站中存在的不是一個rule,而是由多個rule組成,當(dāng)所有rule被應(yīng)用執(zhí)行的時候,就形成了鏈。每個鏈經(jīng)過的數(shù)據(jù)報(bào)文都會以順序匹配對應(yīng)rule,對符合條件的做對應(yīng)的操作,如下圖所示。

什么是表?

通過上述已經(jīng)了解到了什么是鏈,而且也了解到每個鏈?zhǔn)菍+1的rule做匹配與數(shù)據(jù)報(bào)文處理,那么我們現(xiàn)在想要實(shí)現(xiàn)另外一個功能,比如rule1是修改數(shù)據(jù)報(bào)文,rule2是對IP端口做開放或限制,這個時候,我們就用到了iptables中的表功能。iptables的表其實(shí)就是把不同功能的rule做了分類管理,而這個功能就是我們上面提到的四表五鏈中的四表,所有的rule都是由以下的四表歸類管理。

filter 負(fù)責(zé)過濾功能。

模塊: iptables_filter

nat 網(wǎng)絡(luò)地址轉(zhuǎn)換。

模塊:iptable_nat

mangle 對數(shù)據(jù)報(bào)文拆解、修改、重新封裝的功能;

模塊: iptable_mangle

raw 關(guān)閉nat表上啟用的連接追蹤機(jī)制;

模塊: iptable_raw

鏈與表的關(guān)系

首先要知道,某些鏈并不是萬能的,它可能不具備你需要的功能,所以這個時候,必須要了解每個鏈上的rule與每個表的對應(yīng)關(guān)系。

如下圖,來看看filter表支持哪些鏈?

上圖的意思其實(shí)就是說 filler表 所具備的功能可以被應(yīng)用的鏈被限定為input foward output。

綜上所述,我們可以總結(jié)一下表鏈之間的關(guān)系:

Filter 可以被應(yīng)用的鏈為 INPUT、FORWARD、OUTPUT。

Nat 可以被應(yīng)用的鏈為OUTPUT、PREROUTING、POSTROUTING

Mangle 可以被用應(yīng)用在所有鏈:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING。

Raw 可以被應(yīng)用的鏈為OUTPUT、PREROUTING

如下圖:

為了更好的理解,換個思路在理解一下對應(yīng)關(guān)系,哪些鏈的rule可以被哪些表調(diào)用?

INPUT 可以調(diào)用的表:mangle、filter

OUTPUT 可以調(diào)用的表:raw、mangle、nat、filter

PREROUTING 可以調(diào)用的表:raw、mangle、nat

FORWARD 可以調(diào)用的表:mangle、filter。

POSTROUTING 可以調(diào)用的表:mangle、nat

如下圖:

其實(shí)我們還需要注意一點(diǎn),因?yàn)閿?shù)據(jù)包經(jīng)過一個”鏈”的時候,會將當(dāng)前鏈的所有規(guī)則都匹配一遍,但是匹配時總歸要有順序,我們應(yīng)該一條一條的去匹配,而且我們說過,相同功能類型的規(guī)則會匯聚在一張”表”中,那么,哪些”表”中的規(guī)則會放在”鏈”的最前面執(zhí)行呢,這時候就需要有一個優(yōu)先級的問題,我們還拿prerouting”鏈”做圖示。

另外需要注意的是,數(shù)據(jù)報(bào)文經(jīng)過鏈的時候,會順序匹配所有rule,那么這里就會涉及到優(yōu)先級的問題,哪些表的rule會先于鏈被執(zhí)行?到底誰先被執(zhí)行?

請看下圖:

如上所述,PREROUTING鏈可以被調(diào)用的是這三張表,其優(yōu)先級是 raw --> mangle --> nat。

但是我們知道iptables的表是四張,當(dāng)他們同時被應(yīng)用在一個鏈的時候,優(yōu)先級如下圖:

但是,如上述所言,某些鏈的rule不能被應(yīng)用到某些表,所以,你要知道,當(dāng)前能被四表調(diào)用的鏈只有OUTPUT鏈。

為了便于管理,可以在表中自定義鏈,把自己需要的rule放在這個自定義鏈中,但是要注意的是,這個鏈不能被表直接調(diào)用,而是在某個默認(rèn)鏈將這個鏈引用,也就是在五鏈之一中的某個鏈中配置成動作才會生效。

iptables工作流程

下圖是數(shù)據(jù)包通過iptables的流程:

上圖描述的工作流程:

根據(jù)路由匹配發(fā)送給服務(wù)進(jìn)程的數(shù)據(jù)包

  1. 數(shù)據(jù)包由客戶端發(fā)送到網(wǎng)卡,然后由網(wǎng)卡傳入內(nèi)核態(tài)中的prerouting鏈,在raw、mangle、nat表 由上到下的順序?qū)ule進(jìn)行匹配,對數(shù)據(jù)包處理完成后,經(jīng)過路由判斷,確定發(fā)送目標(biāo)地址為本機(jī)的服務(wù)進(jìn)程,進(jìn)入input鏈,在mangle、nat、filter表 由上到下的順序?qū)ule進(jìn)行匹配,然后對數(shù)據(jù)包進(jìn)行處理后,交由用戶空間的服務(wù)進(jìn)程對數(shù)據(jù)包進(jìn)行處理。
  2. 當(dāng)數(shù)據(jù)包在用戶空間的服務(wù)進(jìn)程處理完成后,由本機(jī)作為源地址根據(jù)路由判斷將數(shù)據(jù)包經(jīng)由output鏈對raw、mangle、nat、filter由上到下的順序?qū)ule進(jìn)行匹配,對數(shù)據(jù)包進(jìn)行處理,送由postrouting鏈,在mangle、nat表由上到下的順序?qū)ule進(jìn)行匹配,根據(jù)匹配rule對數(shù)據(jù)包進(jìn)行最后的封裝處理,離開內(nèi)核空間,經(jīng)由網(wǎng)卡,返回給客戶端。

根據(jù)路由匹配發(fā)送給其他服務(wù)器的數(shù)據(jù)包

  1. 數(shù)據(jù)包由客戶端發(fā)送到網(wǎng)卡,然后傳入內(nèi)核態(tài)中的prerouting鏈,在raw、mangle、nat表 由上到下的順序?qū)ule進(jìn)行匹配,對數(shù)據(jù)包處理完成后,經(jīng)過路由判斷,如果不是發(fā)送本機(jī)的服務(wù)進(jìn)程的數(shù)據(jù)包,則由forward鏈,在mangle、filter鏈由上到下的順序?qū)ule進(jìn)行匹配,對數(shù)據(jù)包進(jìn)行處理。
  2. 當(dāng)forwanrd鏈對數(shù)據(jù)包處理完成后,送由postrouting鏈,在mangle、nat表由上到下的順序?qū)ule進(jìn)行匹配,對數(shù)據(jù)包進(jìn)行最后封裝處理,離開內(nèi)核空間,經(jīng)由網(wǎng)卡,發(fā)送給其他服務(wù)器。

當(dāng)把上述圖以及流程理解透徹了,這個時候,你對iptables的工作流程已經(jīng)完全掌握了,在后續(xù)的實(shí)踐操作中可以靈活的應(yīng)用各種rule了。

什么是rule?

在上述中四表五鏈中提的rule的時候,都是簡單的一帶而過,現(xiàn)在我們來詳細(xì)的說下什么是rule,rule其實(shí)就是根據(jù)既定條件匹配每個鏈經(jīng)過的數(shù)據(jù)報(bào)文,當(dāng)匹配到對應(yīng)的rule以后,則由匹配的rule配置好的相關(guān)動作來處理對應(yīng)的操作。

其實(shí)簡單來講,就如上訴所言iptables每條鏈都是一個檢查站,每個通過檢查站的數(shù)據(jù)報(bào)文都要在此處經(jīng)過rule規(guī)則處理一遍,如果匹配,則對數(shù)據(jù)報(bào)文進(jìn)行對應(yīng)的操作。比如:此時rule配置中對80端口開放了通行規(guī)則,而沒有對443開放,這個時候倆個帶有標(biāo)記的數(shù)據(jù)報(bào)文在進(jìn)入檢查站的時候,80會匹配對應(yīng)的規(guī)則而被放行,進(jìn)入到目標(biāo)地址,經(jīng)過數(shù)據(jù)的拆包、封裝等處理之后返回給客戶端。而443不在放行規(guī)則內(nèi),則會被丟棄。這里的80、443是rule當(dāng)中的一種條件,而放行、拒絕則是rule匹配之后對應(yīng)的動作,也就是說,條件+動作組成了相應(yīng)的規(guī)則。

匹配條件

匹配條件分為基本匹配條件與擴(kuò)展匹配條件。

1.基本匹配條件

源地址 Source IP

目標(biāo)地址 Destination IP

2.擴(kuò)展匹配條件:

除了基本匹配條件之外,還有名詞為擴(kuò)展匹配條件,這些屬于netfilter中的一部分,只是以模塊形式存在,如果想使用對應(yīng)的擴(kuò)展匹配條件,需要依賴對應(yīng)的擴(kuò)展模塊。

源地址 Source IP:Port

目標(biāo)地址 Destination IP:Port

處理動作

處理動作在iptables中名詞為target,動作分為基本動作和擴(kuò)展動作。

ACCEPT 允許數(shù)據(jù)包通過。

DROP 直接丟棄數(shù)據(jù)包,不返回任何回應(yīng)信息,只對超時時間才有回應(yīng)信息。

REJECT 拒絕數(shù)據(jù)包通過,必要時會給數(shù)據(jù)發(fā)送端一個響應(yīng)的信息,客戶端剛請求就會收到拒絕的信息。

SNAT 對源地址做出轉(zhuǎn)換,用于內(nèi)網(wǎng)用戶用同一個公網(wǎng)地址上網(wǎng)。

MASQUERADE 是SNAT的一種特殊形式,適用于動態(tài)的IP上。

DNAT 目標(biāo)地址轉(zhuǎn)換。

REDIRECT 在本機(jī)端口轉(zhuǎn)發(fā)、映射。

LOG 只是記錄對應(yīng)的數(shù)據(jù)包傳遞過程的日志,不對數(shù)據(jù)報(bào)文做任何動作,用于審計(jì)與DEBUG。

  • 本文對iptables中四表五鏈的對應(yīng)關(guān)系、工作流程通過圖文的形式做了詳細(xì)講解,也對相關(guān)名詞做了簡要的描述,讀完的同學(xué),對iptables的概念基本了解清楚了,下一篇 Linux防火墻iptables之Kubernetes篇 中,會引入Kubernetes作為案例使大家對iptables有更為詳細(xì)深入的理解。
  • 本文提及到內(nèi)核態(tài)到用戶態(tài)進(jìn)程之間切換涉及到的知識點(diǎn),并沒有深入講解,后面會單獨(dú)出一個對內(nèi)核以圖文方式由淺入深講解的文章,敬請期待。

在基于DevOps思想對自動化運(yùn)維改革的大道上,一直砥礪前行,從未停歇。

本文轉(zhuǎn)載自微信公眾號「Kubernetes技術(shù)?!?,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Kubernetes技術(shù)棧公眾號。

 

 

責(zé)任編輯:武曉燕 來源: Kubernetes技術(shù)棧
相關(guān)推薦

2011-03-15 16:35:27

2011-03-17 16:00:57

2011-03-15 17:38:24

2011-03-17 10:58:55

Linux防火墻Iptables入門

2011-03-15 17:18:45

2010-01-07 14:12:11

Linux防火墻

2011-03-15 15:47:26

LinuxIptables防火墻

2011-03-15 09:10:42

Linux防火墻Iptables

2011-03-15 17:25:38

2011-03-15 15:47:15

Iptables防火墻

2011-01-18 18:08:28

Thunderbird

2011-11-21 15:12:54

Java斷點(diǎn)Eclipse

2011-01-18 18:29:28

Thunderbird

2011-03-15 17:12:11

2011-03-03 13:41:36

Pureftpd防火墻

2009-07-01 09:17:32

Linux防火墻

2015-08-04 13:50:35

Linux防火墻iptables

2009-06-30 10:07:23

Linuxiptables防火墻

2011-01-19 17:30:21

Postfix郵件投遞

2011-01-19 17:34:39

Postfix如何接收郵件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號