最近の企業内F/Wや企業内Proxyは、tcp/httpとtcp/httpsしか穴が開いてない。だが、目の前にPCがあるにもかかわらず、自宅鯖にログインするときにいちいちW-ZERO3を起動するのもなかなかに面倒だ。傍目には遊んでるとしか思われないし、画面も小さいし :-)
ここでは一般的によく使われているS/Wで動くパケットリピータstoneを使ってパケットをhttpもしくはhttpsに化かして(トンネルさせて)疎通させることにする。
方針 †
上述のような使い方をするには、鯖にもクライアントにもstoneを入れる必要がある。お互いに意味不明なhttpsパケットを送受信しても正常にトンネリングされる(お互いにHTTPSヘッダを付けたり外したりする)ようにしなければならないからだ。
ここで示す例は、正常に設定されているsshサービス(tcp/22)をhttps経由で使う場合だ。模式図で書くと以下のようになる。
[自宅鯖]----(Internet)----[企業内Proxy]----[クライアントPC]
| |
SSH2 -->|<------------- HTTPS ------------->|<-- SSH2
(tcp/22) | (tcp/443) | (tcp/10022)
鯖の対応 †
Debian Etchでは apt-get でインストール可能だ。
# apt-get install stone
ただ、インストールされるのはバイナリのみで、設定ファイルの雛形や起動スクリプトすらインストールされないので、これらは自分で作らねばならない。
- 設定ファイル(サーバ用)を作成
/etc/stone.conf として保存する。
この例では鯖のtcp/443ポートに届いたパケットを、httpsヘッダを取り除いてtcp/22に中継することを意味する。localhost:22 443
- 起動スクリプトを作成
/etc/init.d/stone として保存する。
パーミッションもそにあるスクリプト群と合わせること。Debian Etchでは755である。#! /bin/sh PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="TCP/IP packet repeater in the application layer" NAME=stone DAEMON=/usr/bin/$NAME DAEMON_ARGS="-l -D -C /etc/stone.conf" SCRIPTNAME=/etc/init.d/$NAME KILL=/usr/bin/killall [ -x "$DAEMON" ] || exit 0 case "$1" in start) echo "Starting $DESC:" "$NAME" $DAEMON $DAEMON_ARGS ;; stop) echo "Stopping $DESC:" "$NAME" $KILL $NAME ;; *) echo "Usage: $SCRIPTNAME {start|stop}" >&2 exit 3 ;; esac - サービスとして登録
コマンド一発。これで鯖を再起動しても勝手に上がってくる。
# update-rc.d -f stone defaults
- stoneをサービスとして起動する
# /etc/init.d/stone start
- tcp/443が外に向けてLISTENしていることを確認
正常に上がっていると、以下のように表示される。
# netstat -alnA inet | grep "443" tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
クライアント側の対応 †
Windows系とLinux系で異なる。stoneにはWindows向けバイナリも存在するので、Windowsのサービスとして登録すると手間が掛からない。
- Linux 編
Debian Etchでは先ほどと同様 apt-get でインストール可能だ。
# apt-get install stone
よって、インストールされるのはバイナリのみで設定ファイルの雛形や起動スクリプトすらインストールされないのも同様なので、これらは自分で作らねばならない。
- 設定ファイル(クライアント用)を作成
/etc/stone.conf として保存する。
この例ではクライアントのtcp/10022ポートから出るパケットについて、Proxyサーバへ中継する際にhttpヘッダを付けるようにし、そこで付けるhttpヘッダにはHTTP/1.0のCONNECTリクエストでhttpsなURLに化かす。もちろんここで設定するURLは、sshで接続したい鯖のものにする。XXX.XXX.XXX.XXX:8080/http 10022 "CONNECT www.example.com:443 HTTP/1.0"
- 起動スクリプトを作成
/etc/init.d/stone として保存する。
パーミッションもそにあるスクリプト群と合わせること。Debian Etchでは755である。#! /bin/sh PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="TCP/IP packet repeater in the application layer" NAME=stone DAEMON=/usr/bin/$NAME DAEMON_ARGS="-l -D -C /etc/stone.conf" SCRIPTNAME=/etc/init.d/$NAME KILL=/usr/bin/killall [ -x "$DAEMON" ] || exit 0 case "$1" in start) echo "Starting $DESC:" "$NAME" $DAEMON $DAEMON_ARGS ;; stop) echo "Stopping $DESC:" "$NAME" $KILL $NAME ;; *) echo "Usage: $SCRIPTNAME {start|stop}" >&2 exit 3 ;; esac - サービスとして登録
コマンド一発。これでクライアントを再起動しても勝手に上がってくる。
# update-rc.d -f stone defaults
- Windows 編
Windowsでも基本は同じ。「バイナリがWindows向けになっていること」と「サービスに設定する手順が異なる」だけである。
- Windows 向けバイナリをDLし解凍
この例ではディレクトリごと C:\bin\stone に保存する。
- configを書く
C:\bin\stone 内に stone.cfg として、Linux編と同じ内容を記述する。
XXX.XXX.XXX.XXX:8080/http 10022 "CONNECT www.example.com:443 HTTP/1.0"
- Windowsサービスとして登録する
解凍したディレクトリにある README にも記述されているが、DOSプロンプトからのコマンド入力で、stoneをWindowsサービスとして設定できる。こうすることでPCの電源を入れるたびに勝手に起動されるようになる。
C:\>stone -M install repeater -C C:\bin\stone\stone.cfg
使い方 †
UTF-8 TeraTerm Pro with TTSSH2などのコンソールエミュレータでは、
- 接続先ホスト名は localhost
- 接続先ポート番号は 10022
とする以外は、SSHの秘密鍵などを通常どおり設定することで自宅鯖に接続できる。
もし企業内で容易に試験できない場合は、httpsに対応したOpen Proxyを経由させることで、自宅で同様の試験が可能だ。
httpsに対応したOpen Proxyはなかなか無いが、ここはほぼリアルタイムで、生きているOpen Proxyが列挙されているので、設置されている国に注意して適宜使用する。
(ロシアや中国は…ね)
tips †
stoneで接続させるには、概ね以下のどれかで可能になるはずだ。
もしできない場合は、その企業網をハックするしかないが…。
なお、クライアント側で"Basicパスワード"とある部分には、アカウントとパスワードをコロンで繋げた文字列(例えば、 tylor:password)を更にBASE64でencodeした文字列を入れる必要がある。BASE64エンコードにはJavaScript による Base64 エンコーダ/デコーダ簡略版が便利。
- 鯖側
stone localhost:22 443
stone localhost:22 443/ssl
- クライアント側
stone 鯖:ポート/ssl localhost:ポート
stone 串:8080/http 10022 "CONNECT 鯖:443 HTTP/1.0"
stone 串:8080/proxy 10022 "Proxy-Authorization:Basicパスワード"
stone localhost:10443/ssl 10022 -- 串:8080/http 10443 "CONNECT 鯖:443 HTTP/1.0"
stone 串:8080/proxy 18080 "Proxy-Authorization:Basicパスワード" -- localhost:18080/http 10022 "CONNECT 鯖:443 HTTP/1.0"
stone localhost:10443/ssl 10022 -- localhost:18080/http 10443 "CONNECT 鯖:443 HTTP/1.0" -- 串:8080/proxy 18080 "Proxy-Authorization:Basicパスワード"
출처:http://www.tylor.jp/index.php?stone
'테크노오로지' 카테고리의 다른 글
| Excelマクロ ファイルEUC-JP出力 (0) | 2010/08/23 |
|---|---|
| [Linux]서버간의 전송속도 측정하기 (0) | 2010/06/09 |
| [Linux]패킷 리피터 스톤(stone) (0) | 2010/04/22 |
| [Linux]route設定について (0) | 2010/04/01 |
| [Linux]FTP유저 ssh접속제한하기 (0) | 2010/03/08 |
| VMwareの自動起動 そしてsuspend,resume (0) | 2010/03/02 |