Mac OS XでZebedee

'03.1.20 ('03.6.16更新)

暗号化トンネルツールです。SSHトンネリングの弱点を色々取り去ったようなものです。UDPが通るのでFTPのトンネルも比較的簡単ですし (専用ツール付属)、シェルとしての機能が無いのがかえって安心です。

Windowsは95から対応しています。MacはOS Xにソースからコンパイルしてインストールです。Release 2.4.0 (02.5.9) からはOS Xに対応して「make OS=macosx」で入ります。(OS X 10.2.3で確認)

(自己責任で行ってください。暗号化されてるかどうかの確認も忘れずに)


Zebedeeのインストール

ダウンロード

本家の「Zebedee: Download」から以下のファイルをダウンロードします。(バージョンはその時によりますね)

すべて同じ (作業用) ディレクトリに入れます。

解凍

解凍します。

% tar zxvf zebedee-2.4.1.tar.gz
% tar zxvf blowfish-0.9.5a.tar.gz
% tar zxvf zlib-1.1.4.tar.gz
% tar zxvf bzip2-1.0.1.tar.gz

zebedee以外のmake

zebedee以外を先にmakeします。インストールの必要はありません。

% cd blowfish-0.9.5a
% make
% cd ../zlib-1.1.4
% ./configure
% make
% cd ../bzip2-1.0.1
% make

zebedeeのmakeとmake install

「OS=macosx」のオプションを付けてmakeしインストールします。

% cd ../zebedee-2.4.1
% make OS=macosx
% sudo make install OS=macosx

インストール先とファイル:

mkdir -p /usr/bin /usr/man/man1 /usr/lib/zebedee
install zebedee /usr/bin
install -m 0755 ftpgw.tcl /usr/bin
install zebedee.1 /usr/man/man1
install ftpgw.tcl.1 /usr/man/man1
install server.zbd vncviewer.zbd vncserver.zbd server.key server.id
 client1.key client2.key clients.id /usr/lib/zebedee
install README.txt LICENCE.txt GPL2.txt CHANGES.txt zebedee.html
 ftpgw.tcl.html zebedee.ja_JP.html zebedee.iss /usr/lib/zebedee

トンネルしてみる

繋ぐ2つのマシンにそれぞれインストールしたあとで、リモート側をサーバモードで起動。たとえばリダイレクトは80だけ許可。(デフォルトはすべてのポートを許可)

% zebedee -s -r 80

ローカル側でクライアントを起動。たとえば、リモート (192.168.10.1) の80番ポートへ、ローカルの8080番ポート経由で接続。

% zebedee 8080:192.168.10.1:80

上記で「localhost (127.0.0.1)」のポート「8080」にアクセスすると「192.168.10.1」のポート「80」に繋がるようになります。

賢明な読者ならお気付きでしょうが、ここまで認証は必要ありません。つまり、暗号化されているけど、Zebedeeを持ってれば誰でも参加できる状態です。その先のアプリケーションで認証してもいいのですが、Zebedeeにも認証機能があります。

認証

秘密鍵を作り、その指紋 (フィンガープリント(ハッシュ値)) を相手に送って認証とします。双方向認証もできますが、まずはサーバでクライアント認証をしてみましょう。

クライアントの設定

% zebedee -p > client.key
% zebedee -P -f client.key > client.id

client.key (秘密鍵) の内容 (例)。ランダムに作られます。

privatekey "0db74e3c46e5db368505666cbac27dbe07fd07ea"

client.id (指紋) の内容 (例)。後ろはクライアント名。

f811c5c66f5fbc312a14fd76fccd909142265c8f Macintosh.local.

client.idをサーバに渡して登録してもらいます。ここに書いてある鍵をそのまま使わないように。

サーバの設定

server.zbdという設定ファイルを作ります。その内容。

checkidfile './clients.id'
# 絶対パスの方がいいかも

clients.idの内容は、クライアントから受け取ったclient.idの内容を1行ずつ並べたもの。複数登録だからclients.idね。

接続

サーバ

% zebedee -s -f ./server.zbd

クライアント

% zebedee -f ./client.key 8080:192.168.10.1:80

server.zbdは、鍵に限らず様々な設定を行うファイルです。クライアントでも直接秘密鍵ファイルを指定せずに、設定ファイルを使うこともできます。使うとしたら下記のように指定します。

include './client.key'

双方向認証

サーバ認証も仕組みは同じです。双方向なら互いに相手の「指紋」を持ち合います。

# server.zbd
include './server.key'
checkidfile './clients.id'
# client.zbd
include './client.key'
checkidfile './server.id'

Zebedeeを止める

プロセスを止めればいいんですが、下記が簡単かな。

% killall zebedee

使用上の注意

参考設定ファイル

安全度を高めるためには、多くの項目を指定する必要があります。全部コマンドラインで指定するより設定ファイルで指定する方が楽ですね。さらに高度な設定もできますよ。

サーバが192.168.10.1でクライアントが192.168.10.2、ポートが8080の場合。ファイル名はserver.zbdとclient.zbd。

サーバの設定ファイル

# serverとして動かす
server true
# TCP/IPとUDP/IP両方有効にする
ipmode both
# 追加の設定ファイル。ここではサーバ側のキーの書いてあるファイル
include './server.key'
# 接続を許可する前にチェックするクライアントの指紋を書いてあるファイル
checkidfile './clients.id'
# サーバがリダイレクトするポートを制限
redirect "8080"
# ターゲットホストを指定する。このサーバより先は暗号化されないが、
# 他のサーバを指定して接続する事もできる
target 192.168.10.1:8080
# 接続を許可するクライアントを制限
checkaddress 192.168.10.2
# 接続を許可するネットワークを制限
listenip 192.168.10.1

クライアントの設定ファイル

# 追加の設定ファイル。ここではクライアント側のキーの書いてあるファイル
include './client.key'
# 接続を許可する前にチェックするサーバの指紋を書いてあるファイル
checkidfile './server.id'
# 接続サーバ (必須)
serverhost 192.168.10.1
#トンネルに接続を許すIPアドレスを制限。1つのみ
# 同じクライアント上なら127.0.0.1。localsource trueとしてもいい
listenip 127.0.0.1
# トンネル接続先 (サーバ) のIPアドレスを制限
checkaddress 192.168.10.1
# クライアントが接続を待つポート番号のリスト
# クライアントのポート:ターゲットホスト:ターゲットのポート
tunnel 8080:192.168.10.1:8080

設定ファイル有りで起動する

% zebedee -f <パス>/server.zbd
% zebedee -f <パス>/client.zbd

参考文献