Zebedeeで穴掘り

このページは、Zebedee 2.4.1を対象にしています。

インストール

入手方法

オフィシャルサイトから、必要なファイルを持ってきます。RPMが配られているのでそれを使ってもいいです(Windows版もインストーラ込みで配布されています)。ソースから構築する場合は、blowfish、zlib、bzip2も指定したバージョンを持ってくる必要があります。

コンパイル

ソースからビルドする場合、先に依存するライブラリを作成します。blowfish、zlib、bzip2ともに、展開してmakeするだけです。

% tar zxf blowfish-0.9.5a.tar.gz; cd blowfish-0.9.5a; make; cd ..
% tar zxf zlib-1.1.4.tar.gz; cd zlib-1.1.4; make; cd ..
% tar zxf bzip2-1.0.1.tar.gz; cd bzip2-1.0.1; make; cd ..

続いてZebedee本体ですが、変数OSにOS名を指定してmakeするだけです。

% tar zxf zebedee-2.4.1.tar.gz; cd zebedee-2.4.1; make OS=linux

続いてmake installしても良いですが、でき上がったzebedeeが実行ファイルなので、これだけを適当なディレクトリに置くだけでもOKです。筆者は/usr/local/bin/zebedeeとしました。

鍵の生成

Zebedeeは特に認証を必要としない時には、自動的に毎回鍵を生成して暗号化通信を行いますが、個人的なトンネルを運営する場合には、クライアントの秘密鍵と、サーバの公開鍵によって認証をする必要があります。ここで認証用の鍵を生成しておきましょう。

まず、クライアント側で秘密鍵を生成します。

client% zebedee -p > ~/.zebedee.key
client% chmod 600 ~/.zebedee.key
client% zebedee -P -f ~/.zebedee.key
ce49ea463b5a438ce260c07197cb0434e738a008 client

最後の1行は、生成した秘密鍵.zebedee.keyから、公開鍵を生成したところです。この1行を、サーバ側に保管しておきます。ここでは/etc/zebedee/server.idとしておきましょう。このファイルには1行1鍵の形式で、複数のクライアントの公開鍵を保持できます。

掘削工事

暗号化トンネルを掘る

ZebedeeにはHTTPプロトコルに乗せてパケットを転送する機能がありません。それでは今回の設定をクリアできないので、HTTP proxyを制御する部分だけ、stoneを使うことにしました。以下の図のような構成にします。

トンネル設計図

stoneで穴掘りするの場合の、両端をZebedeeに置き換えた構成です。stoneではproxy管理者の目をくらませるためにSSL暗号化を行いましたが、これでも、疑心暗鬼な管理者が試しにserver:443にHTTPSでアクセスすると、その先にSSHが待っているのがバレてしまいます。

% w3m -dump_head https://server/
SSH-1.99-OpenSSH_3.4p1    ←SSHのシグネチャ
Protocol mismatch.

Zebedeeの暗号化はSSLではないのでこのような状況にはならず、もう少し目を眩ませられるかもしれません。代わりに「SSLのふり」はできなくなるわけですが。

では、server側の設定から始めましょう。Zebedeeは-fオプションを使って設定ファイルを読み込めるので、以下のようなファイル「zebedeed」を書いて実行属性を付けておくことで、コマンドとして実行できるようになります。 (2004-09-25追記:minkeylengthもつけないと鍵が無視されてしまいます。)

server# cat zebedeed
#!/usr/local/bin/zebedee -f
server true
checkidfile '/etc/zebedee/server.id' # public keys
logfile '/var/log/zebedee.log'
serverport https
redirect ssh
target localhost
server# chmod +x zebedeed
server# ./zebedeed

続いてclient側です。こちらはzebedee-clientというファイルにして、同様に実行属性を付けておきます。

client# cat zebedee-client
#!/usr/local/bin/zebedee -f
server false
include '/home/sho/.zebedee.key' # private key
logfile '/home/sho/var/log/zebedee.log'
localsource true
serverhost localhost
serverport 10443
tunnel 10022:localhost:ssh
client# chmod +x zebedee-client
client# ./zebedee-client

忘れてはいけません、stoneでHTTP proxyを通してもらう必要もあります。「/ssl」は不要です。

client% stone proxy:8080/http 10443 "CONNECT server:443 HTTP/1.0"

それではsshを使ってみましょう。

client% ssh -p 10022 localhost
Last login: Fri Oct 18 09:17:40 2002 from server
server% _

マルチターゲットに挑戦

Zebedeeには、serverを踏み台にして、他のターゲットへパケットを転送する機能があります。それも、待ち受けポートをserver側に複数用意する必要がないので、今回のように443しか空いていない状況でも有用です。この設定をしてみましょう。図のように、client側で10022に接続するとserverのsshdに、10122に接続するとserver2のsshdにつながるように設定します。

マルチターゲット

まず、server側のzebedeedを以下のように書き換えます。

#!/usr/local/bin/zebedee -f
server true
checkidfile '/etc/zebedee/server.id' # public keys
logfile '/var/log/zebedee.log'
serverport https
redirect ssh
target localhost:ssh
target server2:ssh

続いて、client側のzebedee-clientも以下のようにします。

#!/usr/local/bin/zebedee -f
server false
include '/home/sho/.zebedee.key' # private key
logfile '/home/sho/var/log/zebedee.log'
localsource true
serverhost localhost
serverport 10443
tunnel 10022:localhost:ssh
tunnel 10122:server2:ssh

これで、踏み台にするホストを1台用意するだけでどこのホストへもつなげられることになります。自分がrootでないホストへのsshアクセスが必要な場面は多いと思いますから、とても有用な機能です。

その他の特徴

マニュアルやサンプルが充実

付属の日本語マニュアル(doc_jpの下)は必読です。とても詳しく書かれていて大部なので、日本語で読めるのはとてもありがたい。さらに、VNCを転送するためのサンプルファイルや、ftpの転送を行うftpgw.tclというスクリプトが付属しています。

Windowsでも扱いやすい

なんといってもWindowsとの親和性の高さがこの手のツールの中ではダントツです。ちゃんとしたインストーラが付いており、拡張子.zbdとの関連付けまでやってくれます。実行時に必要な情報はほとんどすべてコマンドラインオプションで与えられるのですが、.zbdファイルに設定を書いて実行する方がスマートなので、Linuxでもこの方法を踏襲しました。

また、NTサービスとして.zbdファイルを登録できます。これで起動と同時にZebedeeサーバを立ち上げることが可能になっています(むしろこれを見る限り、Windowsでの方が使いやすい)。

VPN向け機能も

ファイアウォールの内側にあるサーバに、内側からのアクションを契機として外側のクライアントからアクセスできる機能があります。今回は使いませんでしたが、企業内LANへインターネットからVPNでアクセス……といった使い方に利用できそうです。

リンク