SquidとCorkscrewでSSH over HTTP
前に似たようなことをstoneでやったのですが、MacのHomebrewにstoneのパッケージがなかったので、今度はSquidとCorkscrewでやってみました。HTTPでSquidに接続し、そこからsshサーバに接続します。
サーバはUbuntu Server 11.10、クライアントはOS X 10.7.3な環境で試してます。
サーバ側の設定
Squidのインストール
Squidの設定
Basic認証用にユーザを作成しておきます。ほんとはDigest認証を使いたいところですが、残念ながら今回の用途では利用できないようです。
ポートはデフォルトでは3128になっています。443などのすり抜けられそうなポートに変更しましょう。ポートに制限がなかったとしても、わざわざわかりやすい番号を開けておくのは間抜けなので変えた方がいいでしょう。
Basic認証を利用するように設定します。
SSHのポートに対するアクセスを許可するようにします。
接続時にパスワードを要求するようにします。
アクセス元を制限したほうがより安全でしょう。
変更した設定を反映させます。
ファイアウォールの設定を変更して外部からアクセスできるようにすれば完了です。
クライアント側の設定
Corkscrewのインストール
Homebrewでインストールします。
proxyの設定
認証用のファイルを作成します。
「ユーザ名:パスワード」の形式で記述します。
ssh接続時にCorkscrewを利用するように設定します。
単にCorkscrewを利用するだけなら以下の行を記述すればおしまいです。
実用的な設定方法
実際に使う場合は、Corkscrewを通すか通さないかを簡単に切り替えられるようにしたい・複数の接続先を利用したい、などの要望が考えられるので、ちょっと書き方を工夫します。
接続時は以下のように解釈されます。
$ ssh server-1 : Hostname server-1へ接続する
$ ssh server-2 : Hostname server-2へ接続する
$ ssh server-1-proxy-1 : Hostname server-1へproxy-1を利用して接続する
$ ssh server-2-proxy-1 : Hostname server-2へproxy-1を利用して接続する
$ ssh server-1-proxy-2 : Hostname server-1へproxy-2を利用して接続する
$ ssh server-2-proxy-2 : Hostname server-2へproxy-2を利用して接続する
この場合は 接続先2通り * proxy3通り(proxy2通り+proxyなし) = 6通り の設定が考えられますが、接続先を指定している部分とproxy設定を指定している部分を分離しているので、組み合わせの爆発を回避していることがわかりますね。例では数が少ないですが、数が増えた場合には効果も大きいと思います。