SSHポートフォワーディングについて
はじめに
ふと思い立って、SSHポートフォワーディングについて調べた。
LPICの解説書では、1ページほどの分量しかなかったが、奥の深い内容だった。
SSHポートフォワーディングって?
SSHを使用して、ローカルホストの任意のポートに送った通信を、リモートホストの特定ポートへ転送する機能。
SSHで暗号化された経路に他プロトコルを載せることができるので、暗号化されていないプロトコルの安全性を高めることができる。
ポートフォワーディングの方法にはローカルフォワード、リモートフォワードが存在する。
ローカルフォワード
ポートフォワーディングと聞いてまず最初に出てくる方法。
ローカルホストのポートをリモートホストへのポートに転送することから、ローカルフォワードと呼ばれている。
上記の図でいえば、ポートフォワードの設定を行うことで、プロセスはローカルホストのポート8000に接続するだけで、
踏み台サーバを経由してリモートホストのポート80(HTTP)に転送される。
これの何が嬉しいかというと、ローカルホストとリモートホストの直接の通信が出来ない場合でも、
ポートフォワードを使うことで通信が可能となるため。
図を実現するためのローカルフォワードの設定方法は以下となる。
# ssh -L 8000:<リモートホストのIPアドレス>:80 <踏み台ホストのIPアドレス>
このコマンドを実行した場合、踏み台ホストにログインできる。
とても分かりづらいのだが(自分はすこし詰んだ)、この状態でローカルホストとリモートホスト間の通信経路は作成されている。
リモートホストに接続するためには、ローカルホストの別ターミナルを起動し、以下のコマンドでローカルホストの8000にアクセスする。
# curl http://localhost:8000
うまくいけば、リモートホスト側で公開されているwebページを確認できる。
リモートフォワード
こちらはあまり使われていない方法。
動きとしてはローカルフォワードの逆となる。
ローカルフォワードとの違いは、踏み台ホスト側から接続しにいくため、
ローカルホストと踏み台ホスト間にFWがあっても影響を受けないことである。
リモートフォワード設定のコマンドは以下となる。
ローカルフォワードとは異なり、図中の踏み台ホストにて実行する。
# ssh -R 8000:<リモートホストのIPアドレス>:80 <ローカルホストのIPアドレス>
設定後、ローカルホストより以下コマンドを実行すると、リモートホスト側で公開されているwebページが確認できる。
# curl http://localhost:8000