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 導引至正確的網路介面。

沒有留言:

張貼留言