2002-10-16(水) [長年日記]
■ Zebedee(3)
昨日の続きをする。といっても、サーバへの仕込みは夕べのうちにやっておいたので、そのメモ。
ようするにhttpd(443)で待ち受けて、ssh(22)へトンネルするように設定フィルを書けばいい。Windows版のZebedeeで.zbdという拡張子が割り当てられていたのにヒントを得て、こんな感じのファイル、zebedeedを書く。実行属性を付ければそのまま実行できる。
#!/usr/local/bin/zebedee -f server true serverport https redirect ssh logfile '/var/log/zebedee.log' target localhost
HTTPS proxyを通さない場合は、クライアントから以下のように直接443につなげられればOKである。
client% zebedee -d -e 'ssh -p %d localhost' -T 443 server:ssh zebedee(2875/1024): waiting for client connection zebedee(2875/1024): accepted connection from 127.0.0.1 zebedee(2875/1024): tunnel established to server port 22 server% _
■ stunnel
トンネリング実験第3弾はstunnelなんだけど……やっとautoconf対応のが出てきたよ(笑)。stoneもZebedeeも、Makefileしか入ってなかったからなー。
というわけで簡単にインストールまでできたのだが、こんどは日本語のいい教科書がWeb上で発見できなかった。今日はここまで(笑)。もっとも、SSLだとまずいかも、という昨日の考察を踏まえれば、stoneもstunnelも使わないのが得策か。
それにしても、こないだのstoneによるトンネリング成功でやめときゃぁいいのに、すっかりトンネル掘りが楽しくなって、いわゆる「手段の目的化」状態である。Htunの存在も教えてもらったし(そう言えば名前だけは聞いたことがある)、しばらく楽しめそうな気配である。
■ Zebedee(4)
さて、防火壁の内側で接続する。こっちも設定ファイルを書くことにしよう。HTTP/HTTPS proxyへのトンネルを掘っているstoneはそのままにして、SSL化を担当している末端のstoneをkill。そして以下のzebedee-clientを実行する。
#!/usr/local/bin/zebedee -f include '/home/sho/.zebedee' # private key server false localsource true logfile '/home/sho/var/log/zebedee.log' serverhost localhost serverport 10443 tunnel 10022:localhost:ssh
なんか、zebedeeの-dオプションの意味が逆転しているような気がするなぁ。まぁいいや、これでsshできるようになる。
% ssh -p 10022 localhost
■ Zebedee(5)
特定の一ヶ所へのトンネルは掘れたけど、日常的に使っている外部ホストは五本の指では足らない。特にSourceForgeのCVSは、使えると嬉しい。こいつらへのトンネルも欲しいところだが、あいにくおれは、これらのホストのrootではない。
しかし、Zebedeeは(というかたいていのトンネリングソフトは?)そこからさらに別のホストをターゲットにすることができるので、これを設定しよう。「server」のzebedeedはこんな感じに変更。
#!/usr/local/bin/zebedee -f server true serverport https redirect ssh logfile '/var/log/zebedee.log' target localhost:ssh target server2:ssh
「server2」への接続要求は、「server」のZebedeeからさらにコネクションを延ばされる。「client」のzebedee-clientはこうする。
#!/usr/local/bin/zebedee -f include '/home/sho/.zebedee' # private key server false localsource true logfile '/home/sho/var/log/zebedee.log' serverhost localhost serverport 10443 tunnel 10022:localhost:ssh tunnel 10122:server2:ssh
10022に接続するとlocalhost(server)のsshに、10122に接続するとserver2のsshにつながる。図にするとこんな感じか。ちなみにフォントには、いま話題のみかちゃんフォントを使用(意味なし)。

■ めでたしめでたし……と言いたいところなんだけど、残念ながら上の設定はまだ動いていない。serverへの接続はうまくいくんだが、server2へsshしようとすると、server2の名前が解決できない(社内LAN上なので外のDNSが引けない)。まぁ、~/.ssh/known_hostsに毎回異なる「localhost」を追加しようとするのも困るので、ここは/etc/hostsでserver、server2ともに127.0.0.1というIPアドレスを持つことにしてしまう。
これでいいだろ、と思ってリトライしてみたら、今度はこんな風になった。
% ssh server2 Permission denied (publickey,keyboard-interactive).
メッセージをGoogleしてみるとssh2での接続に失敗した時に出るそうなのでssh1にしてみるも、「Permission denied.」となって同様。他の解決策には「/dev/ttyに書き込み権限がないのでは」なんてのがあったけど、いったいどこのttyの話やら(笑)。
うーん。わからん。頭を冷やして考え直そう。
2002-10-15(火) [長年日記]
■ Zebedee
トンネリング実験第二弾はZebedee。
stoneはSSLに化けてhttpsの上に乗っかることができたので、職場のproxyを乗り越えるのに使ったが、ZebedeeはSSLを使っているわけではない(?)ので、この手のごまかし用途には向かない気がする(のだけれど、実のところはどうだろう?)。
そこで、職場内のLinuxホストにWindowsクライアントからtelnetで乗り込むところをトンネル化することにした。
このLinuxホストは、telnet接続をlocalhostからしか認めていない。つまりトンネリング前提の設定なのだが、今まではsshを使ったトンネリングを設定していた。このsshを使った方式の難点は、(たとえssh-agentを使うにしても)必ず一度はパスフレーズを入力しなければならない点である。Zebedeeでここを簡略化しよう。
インストール方法は省略。このへんを参考にした。利用するライブラリが決め打ちなので、素直に従った。Windows版はバイナリ持ってきて終わり。
■ 単にトンネリングするだけなら簡単すぎなので、ちゃんと特定クライアントからのアクセスだけを許可するようにしないとね。まずはクライアントで秘密鍵(client.key)とそのfinger printを生成。Cygwin上でzshを使っているので区別がつかないが、Windowsである。
client% zebedee -p > client.key client% zebedee -P -f client.key ce49ea463b5a438ce260c07197cb0434e738a008 client
表示されたfinger printは、server上の/etc/zebedee/server.idにでも入れておこう。続いてサーバの設定と起動。
server% cat /etc/zebedee/server.conf server true redirect telnet checkidfile '/etc/zebedee/server.id' server% zebedee -f /etc/zebedee/server.conf
■ あとは、クライアント側を起動して、telnetでつないでみる。
client% zebedee -f client.key 23:server:23 client% telnet localhost 23 Kondara MNU/Linux 2000 (Sushi) Kernel 2.2.16-5k on an i686 login:
「-f client.key」を指定しないと接続できないことも確認したから、これでOKだろう。サーバ側のlisten portは1024より大きな数字なので一般ユーザでも実行できるけど、いちおうzebedeeというユーザを作ってその権限で動くようにしておいた。
うーん、確かに簡単だ。外部とのトンネルにも使ってみたいが……。
■ tDiary: 本日のハンティング
■ Zebedee(2)
「ごまかし用途には向かないかも」と書いたけど、よく考えてみるとSSLを使っている場合、proxy管理者がふと疑問に思ってそのサイトにHTTPSでアクセスしたら、その先がSSHにトンネルされてるなんてことはモロわかりなのだ。
% w3m -dump_head https://server/ SSH-1.99-OpenSSH_3.4p1 Protocol mismatch.
てね。
ということは、下手な文字列を返してこない、しかも公開暗号鍵を使って見知らぬホストとの通信はいっさい行わない、Zebedeeを使った方が安心なんじゃねーの?
だとすると、こないだの図にある両端のstoneはZebedeeに置き換えた方がいいということになる。うーん、奥が深い。
2002-10-14(月) 300m [長年日記]
■ 昨日の日記を補完。
■ カーコンビニ倶楽部
こないだ擦ったところを直しに、駅の向こうのカーコンビニ倶楽部へ。
見積もってもらったら、わりと複雑なへこみ方をしているので予想外の金額になってしまい、がっくり。しかも預かりになるし。仕方がないので歩いて帰る。
どんなキズでもその場で直してくれるわけじゃないんだな。
■ tDiary: 本日のハンティング
それからとらねこ放浪記経由でとのす日記、いやはや日記、すばらしきMMHPを捕獲。「tDiary.NET に次ぐtDiaryのホスティングサービス」って書いてあるけど、そうなの?
■ tDiary: YYYYMMDD.html形式
html_anchor.rbなんて……そんなの知らない……。アンカーの形式は個人の好みがあるから入れるのはやめておこうって話があったじゃないか。誰が入れたんだ、誰が。
% cvs log html_anchor.rb
(中略)
revision 1.1
date: 2002/04/03 05:01:50; author: tadatadashi; state: Exp;
add html_anchor plugin.
……って、おれじゃん!!
いやいや。たまにこうやって凡ミスをしておくと、「たださんも失敗するんだ〜」てな感じで好感を持たれたりするかも知れないじゃないか。計算ですよ、計算。……なわけねーだろ。バカかおれは。くー(泣)。
■ それはそうと、ErrorDocumentを使う方式をサポートするコードをindex.rbに入れたので実験的にローカルで使って見ているのだが、どうもうまく動かないときがある。トップページから特定の日に飛んで、そこから「最新」を押してトップに戻る。すると、しばーらく待たされたあとに空っぽのページが表示されてしまう。Apacheのログをみると、403を返していることになっている。
実験できるサイトとしてはこま犬ライブラリがそう。ブラウザを選ぶみたいで、Galeon(つまりMozilla)ではこの現象が起こる。w3mだと起こらない。たぶん、たまてばこがトラッキングできないのもこのせいじゃないかな。
同じ方式を採用していても問題のないサイトもあるので、Apacheの設定でなんとかなるような気がするんだが、よくわからない。謎だ。これが解決しないとStableの方に入れられないなぁ。
■ tDiary.Netで使えるプラグイン
tDiary.Netのプラグインに関する問題。いちおう、tDiary.Netについてでそれらしきことは書いてあるんだけど、まぁ、tDiary.NetとtDiaryの混在に問題があるのは認める。
ホントはさ、tDiaryの開発はtdiary.orgで、レンタルサービスはtdiary.netで……てな感じにできればよかったんだけどね、.orgは取られちゃってたし(ってそういう問題か?)。これで、devel-MLで出ていた「プラグインの更新情報を伝えるページ」ができたりしたら、さらに混乱に拍車がかかるよねぇ……(笑)。って笑いごとじゃねー。
Before...
◆ ただただし [そこは見たんだけど、凝った使い方してないから、今回のような複雑なトンネリングをする方法がわからなくって(汗]
◆ (ふ) [わたしのは over HTTPじゃないので参考にならないかと。]
◆ ほそのひでとも [stunnel-4.0はstunnel-3.22以前とはほとんど別ものです。> たむらさん]
◆ ほそのひでとも [たださんに於いてはぜひsslwrapも試して頂いてSSL中継プログラム全制覇をお願いしたい(笑)。]
◆ はんばあぐ [みかちゃんフォントのリンクがおかしいような気がするのですが。]
◆ ただただし [ありゃ、ホントだ。直しました。]