數據包通過防火墻時的過程
數據包通過防火墻時的情況分為三種:
1、以本地為目標的包
當一個數據包進入防火墻後,如果目的地址是本機,被防火墻進行檢查的順序如下:
如果在某一個步驟數據包被丟棄,就不會執行後面的檢查
步驟 | 表 | 鏈 | 說明 |
1 | 數據包在鏈路上進行傳輸 | ||
2 | 數據包進入網絡接口 | ||
3 | mangle | PREROUTING | 這個鏈路用來mangle數據包,如對包進行改寫或做標記 |
4 | nat | PREROUTING | 這個鏈主要用來做DNAT |
5 | 路由判斷,如包是發往本地的還是要轉發的 | ||
6 | mangle | INPUT | 在路由之後,被送往本地程序之前如對包進行改寫或做標記 |
7 | filter | INPUT | 所有以本地為目的的包都需要經過這個鏈,包的過濾規則設置在此 |
8 | 數據包到達本地程序,如服務程序或客戶程序 |
2、以本地為源的包
本地應用程序發出的數據包,被防火墻進行檢查的順序如下:
步驟 | 表 | 鏈 | 說明 |
1 | 本地程序,如服務程序或客戶程序 | ||
2 | 路由判斷 | ||
3 | mangle | OUTPUT | 用來mangle數據包,如對包進行改寫或標記 |
4 | nat | OUTPUT | 對發出的包進行DNAT操作 |
5 | filter | OUTPUT | 對本地發出的包過濾,包的過濾規則設置在此 |
6 | mangle | POSTROUTING | 進行數據包的修改 |
7 | filter | POSTROUTING | 在這裏做SNAT |
8 | 數據包離開網絡接口並在鏈路上傳輸 |
3、被轉發的數據包
需要通過防火墻轉發的數據包,被防火墻進行檢查的順序如下;
步驟 | 表 | 鏈 | 說明 |
1 | 數據包在鏈路上傳輸 | ||
2 | 進入網絡接口 | ||
3 | mangle | PREROUTING | mangle數據包,對包進行改寫或做標記 |
4 | nat | PREROUTING | 這個鏈主要做DNAT |
5 | 路由判斷,如包是發往本地的,還是要轉發 | ||
6 | mangle | FORWARD |
包繼續被發送至mangle表的FORWARD鏈,這是非常特殊的情況 下才會用到的,在這裏,包被mangle。這次mangle發生在最初 的路由判斷之後,在最後一次更改包的目的之前 |
7 | filter | FORWARD |
FORWARD包斷續被發送到這條FORWARD鏈,只有需要轉發的包 才會走到這裏,並且針對這些包的所有過濾也在這裏進行,註意,所有 轉發的包都要經過這裏 |
8 | mangle | POSTROUTING |
這個鏈也是針對一些特殊類型的包,這一步mangle是在所有更改 包的目的地址的操作完成之後做的,但這時包還在本地上 |
9 | nat | POSTROUTING |
這個鏈就是用來做SNAT的,不推薦在此處過濾,因為某些包即使 不滿足條件也會通過 |
10 | 離開網絡接口 | ||
11 | 數據包在鏈路上傳輸 |
在對包進行過濾時,常有以下3個動作。
(1)ACCEPT:一旦數據包滿足了指定的匹配條件,數據包就會被ACCEPT,並且不會再去匹配當前鏈中的其他的規則或
同一個表內的其他規則,但數據仍然需要通過其他表中的鏈
(2)DROP:如果包符合條件,數據包被會丟掉,並且不會向發送者返回任何信息,也不會向路由返回信息
(3)REJECT: 和DROP基本一樣,區別在於除了將包丟棄並且向發送者返回錯誤信息。
示例如下:
其中“ policy DROP " 表示該鏈的默認規則為DROP操作,如現有一數據包,源地址為
192.168.1.58,目的地址為137.254.60.6,協議為TCP,目的的端口為80,當該數據包通過FORWARD鏈時,
從上往下開始匹配,過程如下:
(1) 與第1條規則:源為192.168.100.0/24,源地址不匹配
(2) 與第2條規則:目的為69.147.0.0/24,目標不匹配
(3)與第3條規則: 源為172.16.0.0/16,源不匹配
(4)與第4條規則:源為10.0.0.0/24, 源不匹配
由於經過匹配以上所有規則都不符合,數據包則轉交給默認規則處理,由於本示例默認的規則為DROP,
因為該數據包被丟棄,
再看另一個數據包,源地址為192.168.1.58,目的地址為69.147.83.199,協議為TCP,目的端口為80,當該
數據包通過FORWARD鏈時,從上往下開始匹配:
(1)與第1條規則:源為192.168.100.0/28, 源不匹配
(2)與第2條規則:源地址為任意(0.0.0.0/0),匹配;目的地址為67.147.0.0/24
因為69.147.83.199在範圍內,匹配;源端口和目的端口為任意,匹配;協議為任意(all),匹配:規則鏈對該
數據包的動作為ACCEPT,因此該數據包通過。
如果數據包的源地址為10.0.0.35,目的地址為69.147.83.199,協議為TCP,目的端口為80,當該數據包
通過FORWARD鏈時,從上往下開始匹配,當匹配到第4條規則時匹配,動作為mychain,此時數據包會被
轉到用戶自己定義的規則鏈mychain進行處理
數據包通過防火墻時的過程