
SSHシステムには、SSHキー認証、SSHエージェント、そしてあまり知られていない機能の一つであるポートフォワーディングなど、多くの魔法が備わっています。SSHでは、ポートフォワーディングによってローカルコンピュータとリモートマシンの間に暗号化されたトンネルが作成され、様々なサービスが中継されます。この接続により、通常は暗号化されていない有用な情報を暗号化された接続を介して送信できるようになります。
ポートフォワーディングは、通常はアクセスできないサーバーへのアクセスにも利用できます。これにより、よりセキュリティの高いリモートマシンにアクセスしたり、別のマシンから自分のマシンへの一時的な暗号化トンネルを許可したりすることが可能になります。ポートフォワーディングのもう一つの利点は、トンネルが暗号化されているため、スニファーや不適切な設定のルーターを回避できることです。
ポート転送の種類
SSH ポート転送には 3 つの種類があります。
- ローカル ポート転送 - SSH クライアントからの接続は、SSH サーバー経由で宛先サーバーに転送されます。
- リモートポート転送 - SSHサーバーからの接続はSSHクライアント経由で宛先サーバーに転送されます
- 動的ポート転送 - さまざまなプログラムからの接続が SSH クライアント経由で SSH サーバーに転送され、最終的に複数の宛先サーバーに転送されます。
最初の2種類のポート転送の使い方を説明します。ローカルマシンとリモートマシンの両方に必要なSSHツールがインストールされており、対象のサードパーティマシンに(SSH経由で)アクセスできることを前提としています。
ローカルポート転送
わかりやすく説明します。例えば、Slashdotのウェブサイトにアクセスしたいのですが、(何らかの理由で)暗号化された接続でアクセスしたいとします。SSHポートフォワーディングを使えば可能です。これはローカルポートフォワーディングのおかげで実現できます。これにより、クライアントからslashdot.orgのウェブサイトへのSSHトンネルが作成され、ブラウザでhttp://localhost:8080にアクセスすると、宛先にリダイレクトされます。
クライアントでターミナル ウィンドウを開き、次のコマンドを発行します。
ssh -L 8080:www.slashdot.org:80 localhost
クライアントマシンのユーザーパスワードの入力を求められます。基本的にはSSH経由でクライアントマシンに接続しますが、接続先への必要なSSHトンネルを作成します。ローカルアカウントの認証が完了したら、ブラウザを開き、http://localhost:8080にアクセスしてください。ブラウザが自動的にSlashdotにリダイレクトされるはずです。
接続が完了したら、クライアント端末のウィンドウで exit コマンドを必ず入力してください。これによりトンネルがシャットダウンされ、http://localhost:8080 のアドレス経由で宛先にアクセスできなくなります。
これは、ローカル SSH 接続を使用してリモート マシンへの暗号化されたトンネルを作成するという、基本的なローカル ポート転送の実際の例です。
リモートポート転送
このタイプのポート転送は逆の方向に機能します。例えば、クライアントマシンへのVNCアクセスを誰かに許可する必要があり、暗号化されたトンネル経由でアクセスしたい場合、SSHリモートポート転送を使用すればこれが可能です。
ただし、これを行う前に、 /etc/ssh/sshd_configファイルにオプションを追加する必要があります。お好みのエディタでファイルを開き、末尾に次の行を追加してください。
GatewayPorts yes
次のコマンドで SSH デーモンを再起動します。
sudo systemctl restart sshd
この接続を確立するには、サードパーティのマシンへのSSHアクセスが必要です。そのマシンのIPアドレスが192.168.1.192であると仮定します。VNCアクセス用の暗号化トンネルを提供するには、次のコマンドを実行します。
ssh -R 5900:localhost:5900 [email protected]
ここで、USERNAMEは、相手のマシンでアクセスできるユーザー名です。その後、リモートマシンでUSERNAMEのパスワードを使用して認証する必要があります。SSHセッション中、第三者はlocalhostのポート5900経由で暗号化されたVNCトンネルを介してあなたのマシンに接続します。
以上がSSHを使ったローカルおよびリモートポートフォワーディングの基本です。ポートフォワーディングの機能のほんの一部を紹介したに過ぎませんが、概要はご理解いただけたかと思います。ポートフォワーディングは非常に便利な機能で、厄介な状況から抜け出すのに役立ちます。SSHの機能について詳しく知りたい場合は、sshのマニュアルページ(man ssh)をご覧ください。