sshによるファイアーウォール越え
sshのポートフォワード機能を使って,ファイアーウォールを通過してファイァーウォール内のマシンにログインする方法を考えます.
想定としましては,自宅のWindowsマシンから,会社や研究所のネットワークの中のマシンに入るとします.
通常,一度,ファイアーウォールもしくはログイン専用サーバに一度ログインしてネットワークに入り,そこからネットワーク内のマシンにログインするという2度手間になります.それが面倒なので,ファイァーウォールのroot権限は有るものとして,一発で入る方法を考えます.また,自宅のWindowsマシンからファイァーウォールに到達するためのunixマシン(自宅FW)も有るとします.LinuxでもBSDでも良いです.要は,sshのポートフォワードを常にしてくれるマシンだったら良いです.
図にすると,こんな感じです.
+--------+ +------+ +------+ +----------+ |Windows |----|自宅FW|----インターネット----|会社FW|----|内部マシン| +--------+ +------+ +------+ +----------+
んで,「Windows」→「内部マシン」に一発で入りたいと.
さて.
まず,「自宅FW」が,「会社FW」に信用されていなければなりません.
sshは,パスワード認証は不可としましょう.鍵認証を使います.鍵があれば,鍵のパスワードはヌル(空のパスワード)でも良いと思っています.
信用されるために,次のことを行います.
- 「自宅FW」の公開鍵を,「会社FW」の.ssh/authorized_keysに登録する.(=「会社FW」に信用してもらうために,「自宅FW」を「会社FW」に受け入れる準備をする)
これで,「自宅FW」から「会社FW」に,sshで入れるようになるはずです.
で,入ったついでにポートフォワードをします.
- 「自宅FW」から,「会社FW」に入り込んでポートフォワードをする
このコマンドの意味は,
localhost(=「自宅FW」)の「適当なポート(例:50022)」を,(「会社FW」から見た)「内部マシン」の「ポート22」に転送する
ということです.
最後の「22」は普通のsshのポート番号なので,変えるなら変えても構いません.
次に,Windows側の準備として,素晴らしいソフトである「PortForwarder」の設定をします.
fuji-climb: Top
(PortForwarderのダウンロードとインストールは済ませておいて下さい.設定ファイルについては,これから御説明致します)
PortForwarderの設定ファイルサンプルのページには,このような例が示されています.
fuji-climb: Top
(以下の例は,適当に省略致しました)
Host my_server
HostName test.example.xx
User toh
LocalForward 10023 localhost:23
これに,ファイァーウォール越えのための設定を,次のように加えます.
Host my_server
HostName test.example.xx
User toh
LocalForward 10023 localhost:23
「50022」は,「自宅FW」上で設定したものです.要は,「Windowsマシンのローカルな適当なポート」を,test.example.xxマシンのポート50022に転送する」という設定です.test.example.xxというのは,今回で言う「自宅FWマシン」になります.「自宅Windows」から「自宅FW」へは,当然,sshでログインできる設定にしておいて下さい.
これをconfig.txt等として保存して下さい.
これで終わりです.PortForwarderを起動するのを忘れずに.
「Windowsマシン」から「内部マシン」に入るには,適当なsshサポートされているターミナルソフト,TeraTermやPoderosa,Puttyなどで,次のようにアクセスします.
sshの鍵を作るときにパスワードをヌルにすれば,一発で入れるはずです.
つまり,「localhost:Windowsの適当ななポート」にアクセス→PortFowarderが,「localhost:50022」(=自宅FWの適当なポート)に転送してくれます.
ところで,既に「自宅FW」では,前述のように次のようなコマンドが実行されています.
従って,「Windowsマシン」からのパケットの流れは,次々と転送されます.
localhost(Windowsマシン):Windowsの適当なポート→localhost(自宅FW):50022(自宅FWの適当なポート)→内部マシン:22
これでOkです.
最後に,これを読むかもしれない職場の同僚にアドバイス.
名前解決の観点から,「内部マシン」の設定は,上位ドメインが考慮されます.なので,うまくいかなかったら,IPアドレスで指定するか,内部でのトップドメインまでフルに書いて下さい.あと,TeraTermを使う場合,鍵ファイル(=秘密鍵のファイル)は,「OpenSSH形式」で作ったものを指定して下さい.
p.s.
自宅FWでは,オプションを付け足すのもアリです.例えば...
#[自宅FW] ssh 会社FW -N -t -L localhost:50022(自宅FWの適当なポート):内部マシン名:22 &