在你開始設定系統前,你應該要先瞭解一下網路連接的細節。現在,我假定你有兩個防火牆 ,各保護一個公司內部網路。所以,現在每個防火牆應該會有兩個網路界面(至少)。拿一 張紙,寫下它們的 IP 位址和網路遮罩。每個 VPN 的防火牆,將會使用到數個 IP 位址區 段。這些 IP 位址區段,應該設定在你公司現有的子網路的範圍以外。我建議使用“私有” IP 位址區段的範圍。如下所示:
為了說明,此處我舉了一個設定的案例:有兩台 bastion [譯註] 主機,分別被稱為 fellini 和 polanski。它們各有一個界面連接網際網路 (-out),一個界面連接公司內部網路 (-in) ,以及,一個界面連接 VPN (-vpn)。所有的 IP 位址和網路遮罩,如下:
譯註: bastion 是指暴露在公司網路外部的防火牆閘道。
所以我們有個計劃。
你將會需要
目前使用的版本:
你現在的工作不是編譯就是安裝所搜集到的工具。 並參閱其(以及 firewall-howto) 詳細的說明文件。現在,我們已經安裝好這些工具了。
設定防火牆以及其它的項目。你必須在兩台防火牆主機之間,允許 ssh 資料的流通。這 是指,主防火牆會有網路連線到次防火牆的埠 22。在次防火牆上啟動 sshd,來驗証是否 允許你“登入(login)”。這個步驟尚未測試過,請告訴我你的測試結果。
以你日常使用的工具(例如,vi、mkdir、chown、chmod)在次防火牆上建立一個使用者帳 戶,你也可以在主防火牆上建立一個使用者帳戶,但是,我認為在開機階段設定連線就可以 了,所以,使用原始的 root 帳戶就已足夠。有任何人可以為我們說明一下,在主防火牆上 使用 root 帳戶,會有什麼危險性?
你可以使用 ssh-keygen 程式。如果,你要自動設置 VPN,你可以設定一個沒有密碼的 “私人鑰匙(private key)”。
在次防火牆中,複製你剛才產生的“公共鑰匙(public key)”到,使用者帳戶 slave 中 的 .ssh/authorized_keys 檔案裡,並且,設定檔案的使用權限,如下:
drwx------ 2 slave slave 1024 Apr 7 23:49 ./ drwx------ 4 slave slave 1024 Apr 24 14:05 ../ -rwx------ 1 slave slave 328 Apr 7 03:04 authorized_keys -rw------- 1 slave slave 660 Apr 14 15:23 known_hosts -rw------- 1 slave slave 512 Apr 21 10:03 random_seed
其中,第一行是 ~slave/.ssh,第二行是 ~slave。
請按照我在 sshd_conf 上的設定:
PermitRootLogin no IgnoreRhosts yes StrictModes yes QuietMode no FascistLogging yes KeepAlive yes RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication no PermitEmptyPasswords no
密碼認證(PasswordAuthentication)被關閉了,所以,你只有使用授權過的 key,才能夠 完成登入的動作。(當然,你也已經關閉了,telnet 與 'r' 命令)。
當你的 master 帳戶是 root 時(以我的例子而言),你不必做任何事情。至於 slave 帳戶,則會在你的 /etc/sudoers 的檔案中出現一行:
Cmnd_Alias VPN=/usr/sbin/pppd,/usr/local/vpn/route slave ALL=NOPASSWD: VPN
正如你所看到的,我在次防火牆主機上,使用了一些命令稿(scripts),來設定 ppp 和路由表。
在主防火牆主機上,我使用了一個成熟的啟始命令稿:
#! /bin/sh # 程式架構 這個檔案是個建立在 /etc/init.d/ 目錄下的命令稿實例。 # 你應該在 /etc/init.d 目錄下使用這個命令稿。 # # 作者 Miquel van Smoorenburg <miquels@cistron.nl>. # Debian GNU/Linux 修訂版作者 # Ian Murdock <imurdock@gnu.ai.mit.edu>. # # 版本: @(#)skeleton 1.6 11-Nov-1996 miquels@cistron.nl # PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11/: PPPAPP=/home/slave/ppp ROUTEAPP=/home/slave/route PPPD=/usr/sbin/pppd NAME=VPN REDIR=/usr/local/bin/pty-redir SSH=/usr/bin/ssh MYPPPIP=192.168.0.1 TARGETIP=192.168.0.2 TARGETNET=193.6.37.0 MYNET=193.6.35.0 SLAVEWALL=polanski-out SLAVEACC=slave test -f $PPPD || exit 0 set -e case "$1" in start) echo setting up vpn $REDIR $SSH -o 'Batchmode yes' -t -l $SLAVEACC $SLAVEWALL sudo $PPPAPP >/tmp/device TTYNAME=`cat /tmp/device` echo tty is $TTYNAME sleep 10s if [ ! -z $TTYNAME ] then $PPPD $TTYNAME ${MYPPPIP}:${TARGETIP} else echo FAILED! logger "vpn setup failed" fi sleep 5s route add -net $TARGETNET gw $TARGETIP $SSH -o 'Batchmode yes' -l $SLAVEACC $SLAVEWALL sudo $ROUTEAPP ;; stop) ps -ax | grep "ssh -t -l $SLAVEACC " | grep -v grep | awk '{print $1}' | xargs kill ;; *) # echo "Usage: /etc/init.d/$NAME {start|stop|reload}" echo "Usage: /etc/init.d/$NAME {start|stop}" exit 1 ;; esac exit 0
slave 帳戶可以使用命令稿來設定路由 (/usr/local/vpn/route):
#!/bin/bash /sbin/route add -net 193.6.35.0 gw 192.168.0.1
而其 .ppprc 的內容,如下:
passive