stoneでファイアウォールを越えてssh接続

Posted by @kachina_t on Thu, Feb 17, 2011
In Development
Tags development

セキュリティ意識が高まった昨今では、内部から外部への公開ポートも制限することが多く
下の図のように、http(80)とhttps(443)以外は利用不可としている場所で作業をすることが増えてきました。

+----+           +----------+      +----------+
| PC |-----------| FireWall |------| MyServer |
+----+           +----------+      +----------+
                80,443のみ許可
               --------------->
|                                             |
|--- PrivateNetwork ---| |----- Internet -----|
|                      | |                    |

準備の悪い僕は、使い馴れた『.vimrc』ファイルが欲しくなったり
昨晩に書いた『ソース』が見たくなったり、『秘密鍵』が欲しくなったり…etc
と、【MyServer】にssh接続さえできれば、ちゃちゃっとやっつけられる事に余計な労力をかけることがしばしば・・・

『便利と危険は表裏一体』なんて言葉がありますが
論理的な理由なく不便を強いられている方は、たまったもんじゃないのです。

ってことで、心に誓います。

この状況をくぐり抜けて【MyServer】にssh接続してやるんだ

ルールは2つ

  • 足が付かないこと
  • 汎用的であること

このルールに従い、DMZ環境のサーバを踏むことはNGとしました。

そんで、見つけたのが『stone
アプリケーションレベルのTPC/UDPパケットリピータです。

実行イメージは↓こんな感じ。 * 【PC】から【MyServer】間は443番ポートにて通信し * 【MyServer】内で『stone』が443番ポートのパケットを22番ポートに中継 * 【MyServer】の『sshd』は、通常のsshリクエストとしてコネクションを確立

+----+           +----------+             +----------+
| PC |-----------| FireWall |-------------| MyServer |
+----+  80,443   +----------+   internet  +----------+
        のみ許可
|                                                    |
|------------------ 443 --------------[stone]-- 22 --|
|                                                    |

環境構築手順は以下のとおり。

  1. 【MyServer】へ『stone』のインストール
[kachina@devsrv ~]$ cd /usr/local/src/
[kachina@devsrv src]$ wget http://www.gcd.org/sengoku/stone/stone-2.3e.tar.gz
[kachina@devsrv src]$ tar xvzf stone-2.3e.tar.gz
[kachina@devsrv src]$ cd stone-2.3d-2.3.2.7/
[kachina@devsrv stone-2.3d-2.3.2.7]$ make linux-ssl
[kachina@devsrv stone-2.3d-2.3.2.7]$ cp stone /home/kachina/bin/
  1. 『stone』の起動
[kachina@devsrv ~]$ cd ~
[kachina@devsrv ~]$ sudo /home/kachina/bin/stone -d localhost:22 443
  1. 【PC】からポート443番で【MyServer】へssh接続

これで、443番ポートを利用して【MyServer】へssh接続をすることができました。
基本的なことですが、【MyServer】で既に443番ポートのサービスが動いると動きません。
また、443番ではなく80番ポートを利用したい場合は、手順2~3の『443』を『80』で設定して下さい。

自分の場合は、/etc/rc.localに以下を追記して
常にstoneが起動する様にしました。

# stoneの起動
/home/kachina/bin/stone -d localhost:22 443

443番ポートは惜しいけど、背に腹さね

べんりべんり!
うぇっへっへっへ