このページは、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との親和性の高さがこの手のツールの中ではダントツです。ちゃんとしたインストーラが付いており、拡張子.zbdとの関連付けまでやってくれます。実行時に必要な情報はほとんどすべてコマンドラインオプションで与えられるのですが、.zbdファイルに設定を書いて実行する方がスマートなので、Linuxでもこの方法を踏襲しました。
また、NTサービスとして.zbdファイルを登録できます。これで起動と同時にZebedeeサーバを立ち上げることが可能になっています(むしろこれを見る限り、Windowsでの方が使いやすい)。
ファイアウォールの内側にあるサーバに、内側からのアクションを契機として外側のクライアントからアクセスできる機能があります。今回は使いませんでしたが、企業内LANへインターネットからVPNでアクセス……といった使い方に利用できそうです。