顯示具有 Firewall 標籤的文章。 顯示所有文章
顯示具有 Firewall 標籤的文章。 顯示所有文章

2008年12月17日 星期三

[ZeroShell] Firewall 設定

ZeroShell Firewall 說明

由於 ZeroShell 為 Linux-based firewall,在 Linux firewall 中,有三個 table(mangle、nat、filter) 可供管理者進行進階的管理與設定,但為了簡化設定工作,ZeroShell 的 web 管理介面僅提供 filter table 的設定,因此預設只有三個 chain,分別是 FORWARD、INPUT 以及 OUTPUT。

雖然僅有三個 chain 可供使用,但還是可以透過 FORWARD chain 管理流經 ZeroShell 的網路封包;也可以透過 INPUT 與 OUTPUT chain 來管理流入 ZeroShell 與從 ZeroShell 流出的網路封包。

以下是 ZeroShell firewall 的設定畫面:

 

Firewall Chain 的管理

首先要先瞭解 Chain 要如新增與刪除,並在 Chain 中增加自訂的規則,用以下圖來說明:

系統預設有 FORWARD、INPUT 與 OUTPUT 三條 chain,若要新增可以按「New」,若要移除則按「Remove」;而若要針對 chain 中的規則進行新增、修改或是刪除,則是按中間右邊的「Add」、「Change」、「Delete」三個按鈕。

 

Default Policy 的設定

了解 ZeroShell 預設的 firewall chain 後,接著就是要設定每條 Chain 的 Default Policy;假設要針對雙向的流量進行嚴格控管的話,可以將 FORWARD chain 的 default policy 設定為 DROP。(預設為 ACCEPT)

 

設定案例一:FTP 服務

由於之前架設了 FTP 服務,因此這邊以開放 DMZ 中的 FTP 服務為例,進行設定;而為了方便管理,我們針對不同的服務都各自用不同的 chain 將其分開。

因此,首先按「New」增加一條 chain,名稱為「FTP_TRAFFIC」:
 

接著在 Chain 的選項選到剛剛新增的「ftp_traffic」,並準備增加規則:(Chain 的名稱會自動變成全部小寫)

接著按下「Add」新增防火牆的規則:

以下為幾項設定時要注意的部份:

  • Destination IP:目的地 IP,要指定是 DMZ 中提供 FTP 服務的主機 IP address

  • Protocol Matching:選擇所要過濾的通訊協定種類

  • Source Port:一般 client 都會以 1024 到 65535 間隨機取一個 port 來與 server 進行連線

  • Dest. Port:FTP service 的 port number 為 21

  • Connection State:「NEW」必須要勾選,才可以讓 client 正確的連線

  • ACTION:這個部份必須選擇「ACCEPT」

這裡比較需要注意的是,若是所有設定都省略,僅從 Layer 7 Filter 中選擇 FTP 服務,這樣還是不行的,因為在 client 與 server 建立連線的 3-way handshake 過程中,是無法判斷是那一種 layer 7 的 application,因此這邊還是必須透過設定 protocol 與 port number 的方式來開放特定服務的網路流量。

接著還要回到 FORWARD chain,將 FTP_TRAFFIC 這條 chain 加入規則中:

在 ACTION 的部份要選擇「CHAIN」,並在 Jump to 的選項選擇「ftp_traffic」這一條 chain。

除了加入 ftp_traffic chain 之外,還要在 FORWARD chain 中加入另外一條規則,讓連線建立後,後續的連線可以持續的通過:

為了讓已經建立的連線可以持續的傳輸網路封包,要勾選 Connection State 中的「ESTABLISHED」及「RELATED」兩個選項,並在 ACTION 中選擇「ACCEPT」。

最後,會設定好以下的規則:

 

設定案例二:Web 服務

接著這個部份是要開放電腦瀏覽網頁的權限,首先必須先開放 DNS 服務的網路流量: (DNS_TRAFFIC)

要開放的設定為:

  • TCP port 53

  • UDP port 53

  • Connection State = NEW

再來是開放 HTTP 與 HTTPs 的網路流量:(HTTP_TRAFFIC)

要開放的設定為:

  • TCP port 80 & 443

  • Connection State = NEW

最後在 FORWARD chain 中將這兩條 chain 加入規則中,就完成設定了:

2008年12月16日 星期二

[ZeroShell] QoS 設定

前言

QoS(Quality of Service) 的用途為流量管理,功能在於確保特定服務、特定主機可以根據管理者設定的規則,讓頻寬可以得到保證,相對也可以更穩定的提供服務,當然也可以用來杜絕相當耗損頻寬的軟體。(例如:eMule、BT …. 等等)

扮演流量管理的主機,必須位於兩個不同的網路區段之間(可以是同網段,只是實體是隔開的),因此通常提供 QoS 功能的都 Router(連結不同網段) 或是 Bridge(連結相同網段),而在不同的網路區段中互相傳輸的網路封包,就會受到 QoS 中的規則所規範。

 

設定時注意事項

在進行 QoS 的設定時,首先必須要先瞭解 QoS 的設定限制,並不是很簡單的直接設定上傳下載的限制即可(如果有,就是有人提供了很方便的設定工具才有辦法達成)。

QoS 的設定限制,在於「只能限制往外傳的流量,無法限制接收到的流量」。就像寄信一樣,你可以限制自己不要寄很多信,但是卻無法阻止別人寄很多信給自己。

瞭解 QoS 的限制後,在設定時就不會發生觀念錯誤而導致設定後結果不如預期的情形產生。

 

QoS 如何作到雙向流量管控

知道了 QoS 的管控限制後,雙向流量管控的需求還是在,但是要如何作呢? 以下先列出網路架構圖:

假設以外部 client(Windows XP,10.1.16.200) 到內部 server(Ubuntu,192.168.100.20) 的流量為例,假設內部 server 提供了 FTP 的服務,而若是要使用 QoS 來管控 client 的上傳與下載,就必須從兩個方面著手:

  1. client 的下載
    此時網路流量是由內部 server 傳到外部,若以 QoS 僅能管控外傳流量的限制為前提下,就必須從 ETH00(10.1.16.222) 網路介面來著手,藉由管控從 ETH00 網路介面流出的網路流量,來達到管控 client 下載流量的目的。

  2. client 的上傳
    反之若要管控 client 的上傳流量,就必須改從 ETH01(192.168.100.254) 介面來著手,藉由管控從 ETH01 網路介面的外傳流量,來達到管控 client 上傳流量的目的。

因此從上面的案例說明就可以瞭解,若要達到同時控管上下傳的流量,就必須要從不同的網路介面卡上著手。

 

ZeroShell 的 QoS 設定

ZeroShell 提供了 QoS 的功能,甚至還可以跟 Layer 7 的協定搭配使用,功能可說是相當強大,以下是我們的設定案例:

Client:Windows XP (10.1.16.200)

Server:Ubuntu (DMZ:10.1.16.224 –> 192.168.100.20)

其中 Server 提供了 FTP 服務,我們要使用 QoS 作到限制 client 上傳流量為 2048 Kbits/s,下載流量為 512 Kbits/s。

,但在設定上稍嫌複雜,因為 ZeroShell 並沒有簡化原有 QoS 的相關設定,還是必須分成以下四個部份進行設定:

1、QoS 功能的啟用

首先必須要啟用 QoS 的功能:

選擇「NETWORK –> QoS –> Interface Manager」,進入網路介面的設定,將要管控流量的網路介面勾選啟用,並按下「Activate last Changes」儲存設定。

此外,還可以按下「Global Bandwidth」設定該網路介面的最大頻寬與保證頻寬。

 

2、設定 QoS 類別

接著要設定 Qos 類別,主要是要設定類別的相關描述以及頻寬上限的設定,選擇「Class Manager」:

接著會出現以下設定畫面:

下方可以看到一個內建的預設類別,按「New」可以新增一個類別。

首先要先輸入類別名稱:(首先要設定 FTP 上傳的類別,因此輸入「FTP_UP」)

接著要輸入類別的詳細資訊:

畫面中所要輸入的包含 Description(類別描述)、Priority(封包優先權)、Maximum(最大使用頻寬)、Guaranteed(保證頻寬) … 等等,根據我們的模擬測試,要將優先權設定為中,最大使用頻寬設定為 2048 Kbits/s,設定完畢後要記得按「Save」儲存設定。

接著要加入 FTP 下載的類別(FTP_DOWN),相關設定畫面如下:

 

3、設定 QoS 類別與規則的對應

QoS 類別設定完後,就必須要設定封包檢查規則,並與 QoS 類別對應,選擇「Classifier」:
 

按下「Add」新增封包檢查規則,就會出現以下畫面:

針對以上有使用到的設定僅行仔細說明:

  • Apply to:Routed and Bridged Packets
    這個設定表示無論 ZeroShell 扮演的是 router 或是 bridge,只要有網路封包流經都必須由 QoS 管控。

  • Input & Output
    這個部份就要特別注意了,因為「QoS 僅能管控外傳的網路流量」的緣故,途中設定 Output 為 ETH01,表示要管制從 ETH01 外傳的網路流量,亦即 client 的上傳流量。

  • Layer 7 Filter:FTP – File Transfer Protocol – RFC 959
    設定與 L7-Filter 搭配,用來判斷是否 FTP 的流量。(使用 TCP port 21 未必就真的是 FTP 的流量)

  • TARGET CLASS:FTP_UP
    選擇要繫結的 QoS 類別。(由於此處設定的判斷規則為 client 的 FTP 上傳流量,因此選擇 FTP_UP)

  • LOG:5 Minute
    是否啟用 log 功能,此處選擇每 5 分鐘 log 一次。

最後記得要按「Confirm」儲存 QoS 的規則設定。

了解設定方式後,設定檢查 FTP 下載的規則就容易多了:

 

4、將 QoS 類別與網路介面繫結

當規則繫結到 QoS 類別後,最後就要將 QoS 類別與網路介面進行繫結,選擇「Interface Manager」:

找到所要繫結的網路介面,並按下右邊的「Add Class」新增繫結:

這裡需要注意兩點:

  • client FTP 下載是管控 ETH00 的對外流量,因此將 FTP_DOWN 繫結到 ETH00 上

  • client FTP 上傳是管控 ETH01 的對外流量,因此將 FTP_UP 繫結到 ETH01 上

最後確定 QoS 服務有啟用,按下「Activate last Changes」就完成設定了。

 

Qos 使用成效檢驗

到底設定 Qos 效果如何,以下有截下幾張圖來說明,首先為尚未開啟 QoS 功能時,client 的上傳與下載大概都有 8~9 MBytes/s 的速度:

上面設定將上傳限定為 2048 Kbits(256 KBytes)/s,開啟 QoS 後的實際速度為:

下載限制的部份為 512Kbits(64 KBytes)/s,開啟 Qos 後的實際速度為:

因此看得出來,QoS 也不是相當的精確,實際上在傳輸時,速度還是會上上下下一個範圍在傳輸(大約 10%),但最大是肯定沒有超過上面設定所設定的最大頻寬,可見 QoS 的設定是有成功的。

2008年12月11日 星期四

[ZeroShell] 憑證管理 & VPN 設定

這個部份說明如何在 ZeroShell 設定並啟用 VPN 的服務。

由於 ZeroShell 使用 OpenVPN 來建構 VPN 的服務,因此首先要先瞭解設定 OpenVPN 的需求;基本上大概就是幾個部份,分別是:

  1. 憑證(certificate)的管理與發放

  2. 使用者認證的方式

  3. VPN tunnel 的 routing 相關設定

憑證(certificate)的管理與發放

要連線到 OpenVPN server,每個 client 都需要兩個憑證,分別是:

  1. OpenVPN server 的 CA 憑證(裡面包含了 server 的 public key)

  2. client 專屬的 CA 憑證(裡面包含了 public key & private key)

CA 的部份,若是沒有上游的 CA 檔案可以匯入,ZeroShell 就會自己扮演 self-CA 的角色來簽署憑證,而 server private key 的部份,ZeroShell 會自行處理好。

1、安裝 OpenVPN client

這個部份需要下載 OpenVPN GUI 來安裝,安裝時並不需要進行額外的設定。

2、取得 OpenVPN server CA 憑證

首先進入 ZeroShell 的 web 登入畫面,點選「CA」:

接著會出現 CA 憑證的資訊,選擇輸出(Export)為「PEM」格式:

接著把下載的檔案放到「C:\Program Files\OpenVPN\config」目錄中即可。

3、增加使用者(client)

目前除了 admin 之外,沒有其他使用者,因此這邊要新增一位,選擇「USERS –> Users –> Add」:

接著輸入使用者相關資訊:(包含帳號、密碼 … 等等)

使用者相關資訊填寫完畢後,按下 Submit 後使用者就新增完成了!

4、取得 client CA 憑證

使用者新增完成後,隨即會出現憑證相關資訊:

同樣的,格式的部份選擇「PEM」,並按下「Export」將 client 的 CA 憑證匯出,將憑證修改名稱為「client.pem」,並放到「C:\Program Files\OpenVPN\config」目錄。

若是之後想要另外在輸出使用者憑證,可以選擇「USERS –> Users –> 使用者名稱 –> X509」,進入憑證資訊畫面進行輸出:

5、下載連線設定檔

設定檔的部份要到官方網站下載,下載後放入「C:\Program Files\OpenVPN\config」(以 Windows 為例,其他的 OS 的設定方式請參考官方網站的文件 - OpenVPN client configuration for Windows, Linux, Mac OS X and Windows Mobile for Pocket PC)

以下是設定檔的內容:

;OpenVPN server 位址
remote zeroshell.example.com 1194

proto tcp

auth-user-pass

;OpenVPN server CA 憑證存放位置
ca CA.pem

;OpenVPN client 憑證存放位置
;cert client.pem
;key  client.pem

comp-lzo
verb 3
mute 20
resolv-retry infinite
nobind
client
dev tap
persist-key
persist-tun

但為了符合我們的實驗環境設定,修改成如下:

;OpenVPN server 位址
remote 10.1.16.222 1194

proto tcp

auth-user-pass

;OpenVPN server CA 憑證存放位置


ca CA.pem

;OpenVPN client 憑證存放位置
cert client.pem
key  client.pem

comp-lzo
verb 3
mute 20
resolv-retry infinite
nobind
client
dev tap
persist-key
persist-tun

如此一來就完成了! 透過右下角的 OpenVPN GUI 圖示按右鍵,選擇「zeroshell –> Connect」,輸入 client 的帳號密碼(在新增 user 時所輸入的帳號密碼),就可以順利連到 OpenVPN server 囉! (前提是 OpenVPN server 的服務有正確啟動)

 

VPN 服務的設定

這個部份則包含了之前提到的兩點:

  1. 使用者認證的方式

  2. VPN tunnel 的 routing 相關設定

在 ZeroShell 系統中選擇「NETWORK –> VPN」:

上面個畫面中有幾個需要注意的部份:

  1. 通訊協定與 port number
    這個部份預設為 TCP 1194,若有更動的話,設定檔也必須連同更動。

  2. 認證方式
    基本上搭配憑證的話,選擇「Only X.509 Certificate」即可,除非另外要搭配 Kerberos 或是 RADIUS 的密碼驗證,才需要選擇有 Password 的選項。

  3. VPN client 的網段設定
    這部份的設定決定 VPN client 連線後所取得的 IP,而 routing table 的部份,基本上 ZeroShell 會 push 給 client,因此當 client 取得新的 IP 後,連同 routing table 也會更著變動。

  4. 密碼認證
    在本實驗架構中並無搭配 Kerberos 或是 RADIUS,因此省略。

最後記得勾選「Enabled」並按下「Save」儲存設定,服務才會啟動。

 

連線前後 routing table 的改變

上面有提到,當連線到 VPN server 之後,VPN client 的 routing table 會隨之改變,以便可以連到內部網路中。

以下是 VPN client 原本的 routing table:

從上圖看得到 Default Gateway 的設定還是在網路卡上的設定。

但是當 VPN tunnel 建立起來後,routing table 就會變更如下:
 

除了 Default Gateway 有變更外,也會額外附加一些由 VPN server push 過來的 routing 設定。

比較需要注意的是,Default Gateway 被改變了,因此到 192.168.1.0/24 與 192.168.100.0/24 兩個網段的封包,由於不在 routing table 內,因此都會改走 Default Gateway,而這些封包都會自動由 ZeroShell 導引至正確的網路介面。

[ZeroShell] NAT & DMZ 的設定

網路架構

首先說明一下網路架構:

外部網路(ETH00):10.1.0.0/16

DMZ(ETH01):192.168.100.0/24

內部網路(ETH02):192.168.1.0/24

 

NAT 設定

1、設定網路介面 IP 與 Netmask

進行 NAT 設定之前,必須進行網路介面的 IP address 與 Netmask 的設定,點選「SYSTEM –> Setup –> Network」,即可進入設定頁面:

選擇要設定的網路介面,點選「Add IP」即可進行設定,畫面如下:

2、設定 DHCP

網路介面都設定完成後,接著就要啟用 DHCP 的功能了,首先選擇「NETWORK –> DHCP」:

由於必須選擇要將 DHCP 服務提供給哪些網段,因此必須先按下「New」按鈕加入網段。

接著要選擇網段:(本實驗中要提供 DHCP 服務給內部網路的網段,也就是 ETH02)

再來就是 DHCP 服務所需要的相關設定:(包含租約的時間、IP 分配的範圍、DNS … 等等)

設定完後要記得勾選「Enabled」,並按下「Save」按鈕儲存設定並啟用 DHCP 服務。

3、設定 NAT 並啟用

最後來到 NAT 設定畫面,選擇「NETWORK –> Router –> NAT」:

接著會跳出 NAT 的設定畫面,此時要將對外連線的網路介面移到右邊:(表示該介面為啟用 NAT 功能的網路介面)

在本實驗中,對外連線的介面為 ETH00,因此將其移到右邊後,按下「Save」儲存設定即告完成。

 

DMZ 設定

在 ZeroShell 中,沒有很明確提供管理者設定 DMZ 的地方,但由於 web 管理介面提供的功能設定很多,因此還是可以將 DMZ 的效果組合出來。

由於實驗環境中,在 DMZ 區中的電腦為 private IP,因此這邊決定使用 IP alias 搭配 port forwarding 的方式進行 DMZ 的設定。

1、增加 public IP

首先,必須增加多個 public IP 至對外連線上,選擇「SYSTEM –> Setup –> Network」進入 IP 設定的畫面:

加入兩組 IP,分別如下:

2、設定 port forwarding 對應

接著選擇「NETWORK –> Router –> Virtual Server」,進行 port forwarding 的設定:

根據這邊的實驗環境,將 public IP 所接收到的服務對應到 DMZ 中的主機:

如此一來,外部使用者就可以透過 ETH00 上的 public IP 取用內部主機的服務囉!

2008年12月10日 星期三

[ZeroShell] 安裝與基本設定

基本上 ZeroShell 是以 Live CD 的方式運作的,而 Live CD 的 ISO 可以到 ZeroShell 的官方網站下載並燒錄光碟,再將光碟片放入光碟機中,設定光碟開機即可。

首先,先說明如何設定 IP address

設定連外 IP 位址

設定好連外 IP address,才可以讓管理者從外部進行連線管理。

首先以下為用 ZeroShell Live CD 開機後的畫面:

接著選擇「<I> IP Manager」進行 IP 的管理,以下是 IP 管理的介面:

首先會列出各個網路介面與 IP 資訊,接著選擇「<M> Modify IP address」進行 IP 的修改,並輸入所要修改的 IP 與 Netmask 資訊,就可以設定完成了。

注意! 上面的 ETH01 與 ETH02 預設是不會有 IP 位址的,只是因為我先前已經設定好了,所以才會出現。

 

連線至 Web 管理介面

當 IP 設定完成之後,就可以連線至 ZeroShell 的 web 介面囉! 網址為「https://<IP address>」:

預設的帳號為「admin」,密碼為「zeroshell」。

 

設定(profile)的儲存與備份

由於 ZeroShell 是 Live CD 的關係,因此只要重開機後,所有的設定資訊都會消失並回復為預設值,因此 ZeroShell 提供了備份 profile 的功能,用意就是讓管理者可以將設定儲存起來。

而要儲存 profile 的方式如下:

進入 web 管理介面後,選擇 System 區塊中的「Setup –> Profiles」,接著系統會自動偵測目前接在電腦上面的所有磁碟(包含隨身碟),並列出每個磁碟的分割資訊。

接著就是備份 profile:

選擇要儲存 profile 檔案的分割區後,上面會出現 Create DB、Restore DB、View FS … 等選項,此時只要選擇「Create DB」就可以進行 profile 的儲存工作。

最後系統會要求輸入 profile 相關資訊:
 

相關資訊輸入完成後,按下「Create」就完成 profile 的備份囉!

【備註1】雖然按照上面的方式可以將 Profile 儲存起來,但經過實測之後,發現僅會儲存對外連線網路介面(ETH00)的設定,像是 ETH01 與 ETH02 的部份,當 profile 被啟用後,若是沒有 Activate,設定還是會消失,因此最穩當的作法,還是將 ZeroShell 安裝於硬碟上。

【備註2】目前實測後,確定可以將設定保留住的方式是先將 ZeroShell 安裝於硬碟中,再儲存一份 profile 至硬碟中並 Activate 該 profile,如此一來之後的設定就可以通通保留住了!

 

將 ZeroShell 安裝至硬碟

要安裝 ZeroShell 到硬碟上,必須是 IDE 的硬碟(SATA 也可,但主機板必須支援以 Legacy mode 的方式運作),且容量要大於 1GB 才可以安裝。

接著說明安裝步驟:

1、下載 CompactFlash 版本的 img 檔

一般來說,選擇 CompactFlash 中最新的版本,目前(2008年12月)是 1.0 beta11,並下載至隨身碟中。

2、開啟 SSH 連線服務

要將 ZeroShell 安裝至硬碟上,必須到 local 端,但若是管理者在遠端的話,可以透過 web 管理介面開啟 SSH 連線服務:

SSH 服務的開啟與設定:

設定的部份,有三個部份:

  1. 設定可以連線到 ZeroShell SSH 服務的 IP(例如:192.168.0.15) 或網段(192.168.0.0/24)。

  2. 設定接受 SSH 連線的網路介面(一般來說是指定對外連線的網路介面,因此在本範例中應該要選擇 ETH00)。

  3. 勾選「Enable」,並按下「Save」儲存設定。

3、將映像檔安裝至硬碟

首先必須先透過 SSH client(例如:pietty) 連線至 ZeroShell,並進入 shell command 模式:

接著要再輸入一次管理者密碼,並輸入以下指令顯示出目前的磁碟資訊:

shell> fdisk –l

從上面資訊可以得知,隨身碟的磁區為「dev/sda1」,硬碟的裝置為「/dev/hdd」。

接著輸入以下指令掛載隨身碟:

# 建立掛載目錄
shell> mkdir /mnt/usb_disk

# 掛載隨身碟
shell> mount /dev/sda1 /mnt/usb_disk

將隨身碟中的 ZeroShell 映像檔安裝至硬碟中:

# 切換至隨身碟的目錄
shell> cd /mnt/usb_disk

# 將映像檔安裝至硬碟
# 注意~指定硬碟的裝置,而非分割區

shell> gunzip –c ZeroShell-1.0.beta11-CompactFlash-IDE-USB-SATA-1GB.img.gz > /dev/hdd

最後重開機並將光碟片與隨身碟即可。

 

參考資料