Netfilter L7應用層 防火牆 開源碼 過濾

教防火牆認識HTTP協定 簡易實作第七層過濾控管

2016-08-02
本文將使用Linux系統中預設的Netfilter/iptables,藉由其資料控管能力進行簡單的L7應用層過濾功能,讓網管人員能夠禁止內部人員瀏覽某些網站以及阻止內部人員下載某些類型檔案。
command:命令,通常後會接規則鏈名稱。其常用的命令如下所述:

-A:在指定的規則鏈之後新增一個規則。
-m:欲使用的Netfilter模組,在本文將使用string 模組。
-D:在指定的規則鏈之後刪除一個規則。
-F:清除規則鏈中的規則,如「iptables -F」即清 除所有規則鏈的規則。
-L:顯示規則鏈內的所有規則。
-I:在規則鏈插入規則。

[match]:設定比對的條件。常用的比對條件如下:

-d:指定套用規則的目的主機或IP位址。
-i :指定套用規則的網路介面名稱,如eth0。
-p:提供比對通訊協定功能,主要比對TCP、UDP及ICMP三種通訊協定的封包。例如「iptables -A INPUT -p tcp --dport 22:110 -j ACCEPT」,代表當TCP封包的目的埠為22至110的範圍時就接受該封包,其中M:N指的是連續的埠。
-m:主要提供MAC比對(即是一般常說的鎖MAC),例如「iptables -A INPUT -m mac --mac-source XX:XX:XX –j ACCEPT」僅允許MAC資訊為XX:XX:XX的封包通過。

[-j]:目標(表示如符合條件時需執行的動作),常用動作選項如下:

ACCEPT:表示符合條件的封包允許通過。
DROP:表示將符合條件的封包丟棄。
RETURN:表示直接離開目前規則,直接跳到下個 規則比對。
QUEUE:表示將封包重導到本機的佇列(QUEUE) 中,通常用來供其他應用程式處理。
MASQUERADE:將封包來源的IP位址改為防火牆 傳送封包之網路介面的IP位址,此選項在撥接連線上特別有用,因為在撥接連線後,每次所得到的IP均不同,因此無法使用靜態的方式指定來源IP,此時即可用此選項來動態指定來源IP。
LOG:在核心紀錄檔中,記錄封包連線相關紀錄,可利用dmesg指令查看。

在簡單說明Netfilter/iptables機制之後,由於本文所使用的string模組,是利用比對來往的HTTP通訊協定內的資訊以完成限制連線網站,或是限制下載某些類型檔案的功能,因此必須對HTTP通訊協定加以了解,方能定義出正確的比對條件,所以接著簡單說明HTTP通訊協定。

了解HTTP通訊協定

可以把網頁存取(例如使用者以瀏覽器瀏覽網頁)的動作,簡單地分為下列兩個步驟,如圖2所示。


▲圖2 網頁存取時所需的兩個步驟。

第一個步驟是,使用者端先發出要求的訊息(Request)請求網站伺服器服務,而在此階段中,訊息將分成兩個部分,要求標頭(Request Header,以下簡稱為R.H)及要求內容(Request Content,以下簡稱為R.C)。R.H主要是用來傳送特殊指定的資料,例如所使用的瀏覽器名稱、傳送時間等等相關資訊。而R.C就是使用者端要傳送給網站伺服器的資料內容,例如使用者在網站上所填寫的表單(FORM)資訊。

接著是第二步驟,網站伺服器在接收到使用者端的訊息請求後,在處理完成後,就會將處理結果回覆(Response)給使用者端。同樣地,回覆也分成兩個部分,一個是回覆標頭(Response Header)的部分,而另一個即是回覆內容(Response Content)。回覆標頭主要回覆特殊的資訊(例如網站伺服器的名稱、回覆的時間等等相關資訊),而回覆內容即為實際回傳給使用者的資訊內容。

如上所述為簡單的瀏覽網頁的行為,可利用fidder(一種Proxy軟體可用來觀測往來的HTTP通訊協定內容)程式來觀察瀏覽網頁時,HTTP通訊協定實際的資料內容如圖3所示,上半部為瀏覽器對網站伺服器發出的Request要求,可分為Request Header與Request Body,下半部為網站伺服器回覆給瀏覽器的Response要求,可分為Response Header與Response Body。


▲圖3 HTTP通訊協定實際的資料內容。

接著,說明HTTP通訊協定所提供重要的欄位說明。

Request Line

如圖3中的「GET http://xxx.xxx/index.html HTTP/1.1」,這是瀏覽器與網站伺服器連接時首先要執行的指令,又稱為「Request Line」,其格式如下:


mehod:以什麼樣的方法(Method),將資料送往網站伺服器,HTTP通訊協定定義如表1所示。

表1 HTTP通訊協定定義

▲圖4 取得網站伺服所支援的方法及網站伺服器的版本等資訊。

Request-URI:瀏覽器所要存取的網頁名稱(Uniform Resource Identifier)。
http-version:所使用的通訊協定版本,目前主流版 本為1.1,本文所說明的通訊協定,也會以1.1版本為主。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!