yassy's note

なんかかきます

SSHポートフォワーディングについて

はじめに

ふと思い立って、SSHポートフォワーディングについて調べた。
LPICの解説書では、1ページほどの分量しかなかったが、奥の深い内容だった。

SSHポートフォワーディングって?

SSHを使用して、ローカルホストの任意のポートに送った通信を、リモートホストの特定ポートへ転送する機能。
SSHで暗号化された経路に他プロトコルを載せることができるので、暗号化されていないプロトコルの安全性を高めることができる。

ポートフォワーディングの方法にはローカルフォワード、リモートフォワードが存在する。

ローカルフォワード

ポートフォワーディングと聞いてまず最初に出てくる方法。
ローカルホストのポートをリモートホストへのポートに転送することから、ローカルフォワードと呼ばれている。

f:id:yanapile:20200922223204p:plain

上記の図でいえば、ポートフォワードの設定を行うことで、プロセスはローカルホストのポート8000に接続するだけで、
踏み台サーバを経由してリモートホストのポート80(HTTP)に転送される。

これの何が嬉しいかというと、ローカルホストとリモートホストの直接の通信が出来ない場合でも、
ポートフォワードを使うことで通信が可能となるため。

図を実現するためのローカルフォワードの設定方法は以下となる。

# ssh -L 8000:<リモートホストのIPアドレス>:80 <踏み台ホストのIPアドレス>

このコマンドを実行した場合、踏み台ホストにログインできる。

とても分かりづらいのだが(自分はすこし詰んだ)、この状態でローカルホストとリモートホスト間の通信経路は作成されている。
リモートホストに接続するためには、ローカルホストの別ターミナルを起動し、以下のコマンドでローカルホストの8000にアクセスする。

# curl http://localhost:8000

うまくいけば、リモートホスト側で公開されているwebページを確認できる。

リモートフォワード

こちらはあまり使われていない方法。
動きとしてはローカルフォワードの逆となる。

f:id:yanapile:20200922223209p:plain

ローカルフォワードとの違いは、踏み台ホスト側から接続しにいくため、
ローカルホストと踏み台ホスト間にFWがあっても影響を受けないことである。

リモートフォワード設定のコマンドは以下となる。
ローカルフォワードとは異なり、図中の踏み台ホストにて実行する。

# ssh -R 8000:<リモートホストのIPアドレス>:80 <ローカルホストのIPアドレス>

設定後、ローカルホストより以下コマンドを実行すると、リモートホスト側で公開されているwebページが確認できる。

# curl http://localhost:8000