クライアントに鍵の提出を義務づけ、鍵を持っている人だけ使えるような接続制限・認証・暗号化トンネルを作ります。
2004.6.23
【条件】
server: FreeBSD 4.10-RELEASE zebedeeはインストール済み
http://w3.itoh.net/zebedee.html
192.168.0.1
8080/tcpでapacheが動いている。
11965/tcpでzebedeeの受付ができるようにパケットフィルタ設定をしておく。

client: WindowsXPpro zebedeeはインストール済み
localhostの8888/tcpに接続すると 192.168.0.1:8080に暗号化接続をする。


【クライアント鍵の生成】
WinXPのコンソールで

C:\Program Files\Zebedee>zebedee -p > private.key
C:\Program Files\Zebedee>zebedee -P -f private.key > public.key

このpublic.keyの内容をzebedeeサーバの公開鍵ファイルに追加することになる。

【クライアント設定ファイル】

#zebedee-client.zbd
verbosity 2
server false
detached true
udpmode false
logfile 'client.log'
include 'private.key'
serverhost 192.168.0.1
keygenlevel 2
compression zlib:9
keylength 256
keylifetime 36000
maxbufsize 16383
tunnel 8888:192.168.0.1:8080

【クライアント起動スクリプト】

zebedee-client.bat

cd "c:\program files\zebedee"
start zebedee -f zebedee-client.zbd

これを作ってスタートアップに入れておけば、起動時に実行される。

【サーバ側設定ファイル】

# zebedee-server.zbd
verbosity 2
server true
#detached true
udpmode false
logfile '/var/log/zebedee-server.log'
checkidfile '/usr/local/etc/zebedee-public.key'
keygenlevel 2
minkeylength 256
compression zlib:9
keylength 256
keylifetime 36000
maxbufsize 16383
redirect 8080
target 192.168.0.1:8080

【クライアント公開鍵のサーバへの登録】

/usr/local/etc/zebedee-public.key
にさっきクライアントで作った鍵を追加する。


【zebedeeサーバ起動・停止スクリプト】

/usr/local/etc/rc.d/zebedee-server.sh

#!/bin/sh
#
PATH=/usr/bin:/usr/local/bin:/bin

[ -f /usr/bin/zebedee ] || exit 0

case "$1" in
start)
# Start daemons.
echo "Starting Zebedee-Server. "

/usr/bin/zebedee -tsd -f /usr/local/etc/zebedee-server.zbd &

;;

stop)
# Stop daemons.
echo "Shutting down Zebedee-server."
PID=`/bin/ps -aux | grep zebedee | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
;;
*)
echo "Usage: zebedee.sh {start|stop}"
exit 1
esac

exit 0

【動作テスト】

WindowsXPマシンでブラウザを動かし
http://localhost:8888/
すると
192.168.0.1:8080へ接続したことになる。
クライアントからの鍵の提出を義務づけ、サーバに鍵が登録されていない&
秘密鍵が無いクライアントの接続は拒否され、通信自体の暗号化もされる。
外部からの8080/tcpへの接続をパケットフィルタ設定しておけばzebedee経由接続のみ
許可となり非常に安全。

zebedeeサーバの /var/log/zebedee-server.log に接続の様子が記録されている。

zebedee(145/21536): 2004-06-23-11:14:58: waiting for connection on port 11965
zebedee(145/21536): 2004-06-23-11:15:33: accepted connection from 192.168.0.2
zebedee(145/21536): 2004-06-23-11:15:33: waiting for connection on port 11965
zebedee(145/23584): 2004-06-23-11:15:33: key identity matched: 37d24hb3bghbce93f2a36fb14ad2fgfc67b72342 winxp-1
zebedee(145/23584): 2004-06-23-11:15:33: tunnel established to target 192.168.0.1, port 8080
zebedee(145/23584): 2004-06-23-11:15:33: compression level 0x9, key length 256
zebedee(145/23584): 2004-06-23-11:15:50: read 338 bytes (459 expanded) in 4 messages
zebedee(145/23584): 2004-06-23-11:15:50: wrote 427 bytes (584 expanded) in 6 messages
zebedee(145/23584): 2004-06-23-11:15:50: connection closed