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

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

2016-08-02
本文將使用Linux系統中預設的Netfilter/iptables,藉由其資料控管能力進行簡單的L7應用層過濾功能,讓網管人員能夠禁止內部人員瀏覽某些網站以及阻止內部人員下載某些類型檔案。
簡言之,此指令的意義為在HTTP 1.1通訊協定架構下,以GET的方法來存取網站伺服器上的index.html,瀏覽器在送出Request Line後,接著就會送出相關的R.H來告知網站伺服器客戶端的相關資訊,最後再送出資料。R.H重要的欄位說明如表2所示。

表2 Request Header重要的欄位說明

Status Line

網站伺服器在處理完瀏覽器的要求後,進行回覆的第一行稱為「Status Line」,其格式如下:


HTTP-Version:描述此次所使用的通訊協定版本。
Status-Code:HTTP狀態碼,用來代表處理狀態,例如「404」代表無此網頁。
Reason-Phrase:該HTTP狀態碼的文字說明。

Response Header

回覆Status Line資訊之後,網站伺服器會繼續回傳Response的標頭(Header)和內容等相關資訊至瀏覽器,表3簡單地說明了Response Header的標頭欄位。

表3 Response Header欄位說明

在了解HTTP通訊協定後,接下來說明本次所要使用的string模組。

什麼是string模組

string模組是Netfilter/iptables提供的一個字串比對模組,使用者可用來比對L7應用層上任何的字串,本文就是利用此模組來比對HTTP通訊協定上的字串以達到限制網站存取的目的,所提供的參數如下所示:

--from:從那個位元處開始比對。
--to:從那個位元處結束比對。
--algo:使用來比對的演算法,提供了Boyer-Moore (bm)及Knuth-Pratt-Morris(kmp)比對。
--icase:比對是否要區分大小寫,0代表不區分,1代表區分大小寫。
--string“比對文字”:欲比對的字串。
--hex-string“16進制比對文字”:欲比對的16進制 字串。

以下範例表示,若符合比對文字就阻擋該連線:


開始系統實作

在本文中,將設定內部管理者透過Netfilter/iptables所設定的NAT連線出去,相關架構圖如圖5所示。


▲圖5 系統實作架構。

首先以Netfilter/iptables來設定NAT,指令如下(其中如下#為註解):


完成設定NAT後,接著設定內部使用者電腦之「預設匝道(Default Gateway)」的IP位址指向至NAT主機,可透過此NAT主機對外連線。接著,繼續來實作。

禁止內部人員瀏覽某些網站

先以fidder來查看來往HTTP通訊協定的內容,以下為連線過程,如圖6所示。


▲圖6 以fidder查看來往HTTP通訊協定的內容。

在R.H欄位中是以Host欄位來儲存網站位址資訊,因此要阻擋使用者連結至此網站,僅須比對此欄位的內容,如符合條件即予於阻擋,如下指令即可阻擋連結至udn網站(www.udn.com.tw):


禁止內部人員下載某些類型檔案

以fidder來查看下載PDF的HTTP通訊協定內容,如圖7所示可以發現,在下載PDF類型的檔案時,網站伺服器會在回覆標頭(Response Header)上的Content-Type欄位中記錄「application/pdf」。


▲圖7 以 fidder查看下載PDF的HTTP通訊協定內容。

因此,使用以下的指令即可禁止內部使用者下載PDF類型的檔案:


<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>


追蹤我們Featrue us

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

我知道了!