網路安全——防火牆詳解

CHIBOHANDONG發表於2023-03-07

什麼是防火牆?路由策略和策略路由

在計算機中,防火牆是基於預定安全規則來監視和控制傳入和傳出網路流量的網路安全系統。該計算機流入流出的所有網路通訊均要經過此防火牆。防火牆對流經它的網路通訊進行掃描,這樣能夠過濾掉一些攻擊,以免其在目標計算機上被執行。防火牆還可以關閉不使用的埠。而且它還能禁止特定埠的流出通訊,封鎖木馬。最後,它可以禁止來自特殊站點的訪問,從而防止來自不明入侵者的所有通訊。


防火牆分為軟體防火牆和硬體防火牆,他們的優缺點:

**硬體防火牆:**擁有經過特別設計的硬體及晶片,效能高、成本高(當然硬體防火牆也是有軟體的,只不過有部分功能由硬體實現,所以硬體防火牆其實是硬體+軟體的方式);

**軟體防火牆:**應用軟體處理邏輯執行於通用硬體平臺之上的防火牆,效能比硬體防火牆低、成本低、價效比高。


Netfilter與iptables的關係

Netfilter是Linux作業系統核心層內部的一個資料包處理模組,它具有如下功能:


網路地址轉換(Network Address Translate)

資料包內容修改

以及資料包過濾的防火牆功能

Netfilter平臺中制定了資料包的五個掛載點(Hook Point,我們可以理解為回撥函式點,資料包到達這些位置的時候會主動呼叫我們的函式,使我們有機會能在資料包路由的時候改變它們的方向、內容),這5個掛載點分別是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。

Netfilter所設定的規則是存放在核心空間中的,而iptables是一個應用層的應用程式,它透過Netfilter放出的介面來對存放在核心空間中的 XXtables(Netfilter的配置表)進行修改。這個XXtables由表tables、鏈chains、規則rules組成,iptables在應用層負責修改這個規則檔案,類似的應用程式還有firewalld(CentOS7預設防火牆)。


所以Linux中真正的防火牆是Netfilter,iptables只是作為一個工具。但由於都是透過應用層程式如iptables或firewalld進行操作,所以我們一般把iptables或firewalld叫做Linux的防火牆。


**注意:**以上說的iptables都是針對IPv4的,如果IPv6,則要用ip6tables,至於用法應該是跟iptables是一樣的。


鏈的概念

iptables開啟後,資料包文從進入伺服器到出來會經過5道關卡,分別為Prerouting(路由前)、Input(輸入)、Outpu(輸出)、Forward(轉發)、Postrouting(路由後):



每一道關卡中有多個規則,資料包文必須按順序一個一個匹配這些規則,這些規則串起來就像一條鏈,所以我們把這些關卡都叫**“鏈”**:



**INPUT鏈:**當接收到防火牆本機地址的資料包(入站)時,應用此鏈中的規則;

**OUTPUT鏈:**當防火牆本機向外傳送資料包(出站)時,應用此鏈中的規則;

**FORWARD鏈:**當接收到需要透過防火牆傳送給其他地址的資料包(轉發)時,應用此鏈中的規則;

PREROUTING鏈:(網際網路進入區域網)在對資料包作路由選擇之前,應用此鏈中的規則,如DNAT(只有目標地址的轉換 公網訪問私網);

POSTROUTING鏈:(區域網出網際網路)在對資料包作路由選擇之後,應用此鏈中的規則,如SNAT(只有源地址的轉換 私網訪問公網)。

其中中INPUT、OUTPUT鏈更多的應用在“主機防火牆”中,即主要針對伺服器本機進出資料的安全控制;而FORWARD、PREROUTING、POSTROUTING鏈更多的應用在“網路防火牆”中,特別是防火牆伺服器作為閘道器使用時的情況。


表的概念

雖然每一條鏈上有多條規則,但有些規則的作用(功能)很相似,多條具有相同功能的規則合在一起就組成了一個“表”,iptables提供了四種“表”:

– **filter表:**主要用於對資料包進行過濾,根據具體的規則決定是否放行該資料包(如DROP、ACCEPT、REJECT、LOG),所謂的防火牆其實基本上是指這張表上的過濾規則,對應核心模組iptables_filter;

– **nat表:**network address translation,網路地址轉換功能,主要用於修改資料包的IP地址、埠號等資訊(網路地址轉換,如SNAT、DNAT、MASQUERADE、REDIRECT)。屬於一個流的包(因為包的大小限制導致資料可能會被分成多個資料包)只會經過這個表一次,如果第一個包被允許做NAT或Masqueraded,那麼餘下的包都會自動地被做相同的操作,也就是說,餘下的包不會再透過這個表。對應核心模組iptables_nat;

– **mangle表:**拆解報文,做出修改,並重新封裝,主要用於修改資料包的TOS(Type Of Service,服務型別)、TTL(Time To Live,生存週期)指以及為資料包設定Mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,由於需要相應的路由裝置支援,因此應用並不廣泛。對應核心模組iptables_mangle;

– **raw表:**是自1.2.9以後版本的iptables新增的表,主要用於決定資料包是否被狀態跟蹤機制處理,在匹配資料包時,raw表的規則要優先於其他表,對應核心模組iptables_raw。

我們最終定義的防火牆規則,都會新增到這四張表中的其中一張表中。


錶鏈關係

5條鏈(即5個關卡)中,並不是每條鏈都能應用所有型別的表,事實上除了Ouptput鏈能同時有四種表,其他鏈都只有兩種或三種表:


實際上由上圖我們可以看出,無論在哪條鏈上,raw表永遠在mangle表上邊,而mangle表永遠在nat表上邊,nat表又永遠在filter表上邊,這表明各表之間是有匹配順序的。


前面說過,資料包文必須按順序匹配每條鏈上的一個一個的規則,但其實同一類(即屬於同一種表)的規則是放在一起的,不同類的規則不會交叉著放,按上邊的規律,每條鏈上各個表被匹配的順序為:raw→mangle→nat→filter。


前面說過,我們最終定義的防火牆規則,都會新增到這四張表中的其中一張表中,所以我們實際操作是對“表”進行操作的,所以我們反過來說一下,每種表都能用於哪些鏈:

chibohandong

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026609/viewspace-2938392/,如需轉載,請註明出處,否則將追究法律責任。

相關文章