1. 程式人生 > >圖文詳解防火牆及NAT服務

圖文詳解防火牆及NAT服務

一、簡介

1. 關於防火牆

防火牆,其實就是用於實現Linux下訪問控制的功能的,它分為硬體和軟體防火牆兩種。無論是在哪個網路中,防火牆工作的地方一定是在網路的邊緣。而我們的任務就是需要去定義到底防火牆如何工作,這就是防火牆的策略、規則,以達到讓它對出入網路的IP、資料進行檢測。

目前市面上比較常見的有三、四層的防火牆,叫做網路層的防火牆,還有七層的防火牆,其實是代理層的閘道器。對於TCP/IP的七層模型來講,我們知道第三層是網路層,三層的防火牆會在這層對源地址和目標地址進行檢測。但對於七層的防火牆,不管你源埠或者目標埠,源地址或者目標地址是什麼,都將對你所有的東西進行檢查。所以,對於設計原理來講,七層防火牆更加安全,但是這卻帶來了效率更低。所以市面上通常的防火牆方案,都是兩者相互結合的。

2. iptables的發展

包括iptables及其前身在內,這些都是工作在使用者空間中,定義規則的工具,本身並不算是防火牆。它們定義的規則,並且可以讓在核心空間當中的“Netfilter”來讀取,從而實現讓防火牆工作。而放入核心的地方必須要是特定的位置,必須是TCP/IP的協議棧所經過的地方——Netfilter。

iptables只是防火牆的管理工具,在核心中真正實現防火牆功能的是Netfilter。

對Linux而言,TCP/IP協議棧存在於核心當中,這就意味著對資料報文的處理是在核心中處理的,也就是說防火牆必須在工作在核心中,防火牆必須在核心中完成TCP/IP報文所流進的位置,使用規則去檢查,才真正能工作起來。

3. iptables的結構

從上面的發展我們知道了作者選擇了五個位置,來作為控制的地方,但是你有沒有發現,其實前三個位置已經基本上能將路徑徹底封鎖了,但是為什麼已經在進出的口設定了關卡之後還要在內部設定關卡呢?由於資料包尚未進行路由決策,還不知道資料要走向哪裡,所以在進出口是沒有辦法實現資料過濾的。所以要在核心空間裡設定轉發的關卡,進入使用者空間的關卡,從使用者空間出去的關卡。那麼,既然他們沒有什麼用,我們為什麼還要放置他們呢?因為在進行NAT/DNAT的情況下,目標地址轉換必須在路由之前轉換。所以我們必須在外網而後內網的介面處進行設定關卡。
Netfilter規定的這五個位置也叫五個規則鏈:

iptable的結構:在資料包過濾表中,規則被分組放在我們所謂的鏈中。鏈,就是一個規則的列表(如圖所示)。

二、表和鏈

要設定一個Linux防火牆,就要使用規則,每個規則指定在包中與什麼匹配,以及對包執行什麼操作。那麼什麼是規則呢?因為iptables利用的是資料包過濾的機制,所以它會分析資料包的報頭資料。根據報頭資料與定義的規則來決定該資料包是否可以通過或者是被丟棄。也就是說,根據資料包的分析資料來與預先定義的規則內容進行“比對”,若資料包資料與規則內容相匹配則進行相應的處理,否則就繼續下一條規則的比對。重點在於比對與比對的順序。

什麼是表和鏈呢?這得由iptables的名稱說起,為什麼稱為iptables呢?因為它裡面包含有多個表格(table),每個表格都定義出自己的預設策略與規則,且每個表格的用途都不相同。iptables包含四個表,五個鏈。其中表是按照對資料包的處理功能區分的,鏈是按照不同的Hook點來區分的,表和鏈實際上是netfilter的兩個維度。

四個規則表分別為:Filter、NAT、Mangle、Raw,預設表是Filter(沒有指定表的時候就是Filter表)。 表的處理優先順序為:Raw>Mangle>NAT>Filter

常用的三個表:

三、工作流程

iptables採用的是資料包過濾機制工作的,所以它會對資料包的報頭資訊進行分析,並根據我們預先設定的規則進行匹配來決定是否對資料包的處理方式。

防火牆是層層過濾的,實際是按照匹配規則的順序從上到下,從前到後進行過濾的。如果匹配上規則,即明確表明是阻止還是通過,資料包就不在向下繼續進行匹配了。如果規則中沒有明確判斷出處理結果,也就是說不匹配當前規則,那麼就繼續向下進行匹配,直到匹配預設的規則,得到最後的處理結果。所以說規則的順序至關重要。

防火牆的預設規則是所有的規則均不匹配時,才會執行的規則。

指令常用操作選項:

常用封包比對引數:

其它選項:

操作例項:禁止SSH遠端登入

注意:通過命令列新增的防火牆指令僅僅是臨時生效的,系統重啟即失效。

處理動作包括:

指令格式示意圖:

兩種增加規則選項的差別:

-A chain rule-specification:新增規則到指定規則鏈的結尾,成為最後一條規則。

-I chain [rulenum] rule-specification:如果沒有指定序號,則新增的規則將成為對應鏈中的第一條規則。如果指定了序號,則成為該序號上的規則,而原來位於該序號的規則將往後移一位。

操作例項:禁止PING本機(ping指令屬於ICMP協議,其型別為“8”)

四、企業案例

1. 配置案例講解

生產環境配置防火牆主要有兩種模式:逛公園及看電影模式

  • 逛公園模式:預設隨便進出,對非法分子進行拒絕。企業應用:企業配置上網閘道器路由。
  • 看電影模式:預設沒票進不去,花錢買票才能夠進入電影院。企業應用:伺服器防火牆。

可以看出,還是第二種模式更加的嚴格和安全。其本質區別就是防火牆的預設規則是允許還是拒絕。

企業面試題:自定義鏈處理“syn”攻擊

2. 工作中如何維護防火牆

實際生產中,一般第一次新增規則是以命令列或者指令碼的方式進行,然後一次性的儲存成配置檔案,之後的維護工作就是圍繞著對該配置檔案的修來來進行。

3. 配置閘道器

第一步:首先,作為閘道器的主機除了要具備雙網絡卡並且能夠連線網際網路等物理條件外,還要確保將核心的轉發功能開啟。
另外,還要求Filter表的“FORWARD”鏈允許通過。

第二步:確保閘道器主機的相關模組已經載入

第三步:內網伺服器要能夠Ping通閘道器主機的內外網絡卡。
第四步:在閘道器主機上配置規則(兩種方法)。

至此,Linux閘道器主機配置完畢。

還有一種應用,就是把外部IP地址及埠對映到內部伺服器的地址及埠(和共享上網的環境一樣)。

要求:

企業應用場景:

  • 把訪問外網IP及埠的請求對映到內網某臺伺服器的地址及指定埠上(企業內部)。
  • 硬體防火牆,把訪問LVS/Nginx外網VIP及80埠的請求對映到IDC負載均衡伺服器內部IP及指定埠上(IDC機房的操作)
    iptables在企業中的應用小結:
  • Linux主機防火牆(表:Filter
  • 最為內網共享上網的閘道器(表:NAT,鏈:POSTROUTING)
  • 由外到內的埠對映(表:NAT,鏈:PREROUTING)

指定地址段

4. 埠對映

連線跟蹤表已滿,開始丟包的解決辦法:
一、關閉防火牆。 簡單粗暴,直接有效
二、加大防火牆跟蹤表的大小,優化對應的系統引數