SSHポートフォワーディングとは?トンネリングの仕組みと活用方法を解説

SSHポートフォワーディングとは?

SSHポートフォワーディングを理解して安全な通信経路を構築しよう

SSHはLinuxサーバへログインするための仕組みとして知られていますが、実はそれ以外にも強力な機能を備えています。

その代表的な機能がSSHポートフォワーディング(SSHトンネリング)です。

ポートフォワーディングを利用すると、SSHの暗号化通信を利用して別のサービスへ安全に接続できます。

例えば、社内ネットワークにあるデータベースへ安全に接続したり、踏み台サーバ経由で内部サーバへアクセスしたりすることが可能になります。

実務ではサーバ保守、データベース管理、クラウド運用など幅広い場面で利用されています。

本記事ではSSHポートフォワーディングの仕組みや種類、設定方法について詳しく解説します。

SSHポートフォワーディングとは

SSHポートフォワーディングとは、SSH接続の暗号化通信経路を利用して別の通信を転送する機能です。

別名SSHトンネリングとも呼ばれます。

通常のSSH接続はシェル操作のために利用されます。

しかしポートフォワーディングでは以下のような通信も転送できます。

  • Web通信
  • データベース接続
  • RDP接続
  • 内部サーバ通信
  • 管理ツール接続

通信はSSHで暗号化されるため安全です。

なぜSSHトンネリングが必要なのか

例えば社内ネットワークにMySQLサーバがあるとします。

セキュリティ上、MySQLの3306番ポートはインターネットへ公開したくありません。

しかし管理者は外部から接続したい場合があります。

このような場合にSSHトンネルを利用すると、安全な接続経路を構築できます。

データベース自体を公開する必要はありません。

SSHポートフォワーディングの種類

SSHには主に3種類のポートフォワーディングがあります。

  • ローカルフォワード(Local Forward)
  • リモートフォワード(Remote Forward)
  • ダイナミックフォワード(Dynamic Forward)

実務で最も利用されるのはローカルフォワードです。

ローカルフォワードとは

ローカルPCのポートをSSHサーバ経由で転送する方式です。

最も利用頻度が高い方式です。

基本構文です。

$ ssh -L ローカルポート:接続先ホスト:接続先ポート ユーザー@SSHサーバ

例です。
ssh -L 3306:localhost:3306 student@192.168.60.101

これによりローカルPCの3306番へ接続すると、SSHサーバ上の3306番へ転送されます。

MySQL接続の例

例えばSSHサーバ上でMySQLが動作している場合です。

$ ssh -L 3306:localhost:3306 student@server01

接続後、ローカルPCから以下へ接続できます。

127.0.0.1:3306

実際にはSSHサーバ上のMySQLへ接続しています。

データベースを公開する必要がありません。

Webサーバ接続の例

内部Webサーバを確認する場合です。

$ ssh -L 8080:localhost:80 student@server01

ブラウザで以下へアクセスします。

http://localhost:8080

内部Webサーバの内容が表示されます。

リモートフォワードとは

リモート側のポートをローカルPCへ転送する方式です。

構文です。

$ ssh -R リモートポート:ローカルホスト:ローカルポート

例です。
$ ssh -R 8080:localhost:80 student@server01

サーバ側の8080番へ接続すると、ローカルPCの80番へ転送されます。

リモートフォワードの利用例

以下のような用途があります。

  • 開発環境公開
  • 検証環境共有
  • NAT環境の接続
  • 一時的な公開環境構築

利用頻度はローカルフォワードより少なめです。

ダイナミックフォワードとは

SOCKSプロキシを構築する方式です。

構文です。

$ ssh -D 1080 student@server01

ブラウザなどでSOCKS5プロキシとして利用できます。

通信はSSHトンネル経由になります。

ダイナミックフォワードの用途

  • 通信経路の暗号化
  • 検証環境利用
  • ネットワーク調査
  • SOCKSプロキシ構築

ネットワーク管理者が利用することがあります。

ポートフォワーディングの通信イメージ

ローカルフォワードの場合です。


PC
↓
localhost:3306
↓
SSHトンネル
↓
server01
↓
localhost:3306(MySQL)

途中の通信はSSHによって暗号化されます。

実務で最も多い利用例

企業環境では以下がよく利用されます。

  • MySQL保守
  • PostgreSQL保守
  • Redis確認
  • 内部Webサーバ確認
  • Kubernetes管理

特にデータベース管理で利用されることが多いです。

踏み台サーバとの組み合わせ

企業環境では踏み台サーバ経由で利用することがあります。

例です。

$ ssh -L 3306:db01:3306 admin@bastion

外部から直接アクセスできないDBサーバへ接続できます。

セキュリティ上非常に有効です。

AllowTcpForwardingとは

SSHサーバ側ではポートフォワーディングを制御できます。

設定ファイルです。

/etc/ssh/sshd_config

設定例です。

AllowTcpForwarding yes

無効になっているとポートフォワーディングは利用できません。

ポートフォワーディングできない場合の確認ポイント

  • AllowTcpForwarding設定
  • firewalld設定
  • SELinux設定
  • 転送先サービス起動確認
  • ポート番号確認

まずは転送先サービスが動作しているか確認しましょう。

セキュリティ上の注意点

SSHトンネリングは便利ですが注意も必要です。

  • 不要な転送を許可しない
  • 接続元を制限する
  • 監査ログを確認する
  • 管理者のみ利用する

誤った設定は内部サービスの露出につながる可能性があります。

学習環境で試してみよう

VirtualBox環境でWebサーバを構築している場合は以下がおすすめです。

$ ssh -L 8080:localhost:80 student@192.168.60.101

ブラウザでlocalhost:8080へアクセスすると、SSHサーバ上のWebページが表示されます。

SSHトンネリングの仕組みを理解しやすい実験です。

まとめ

SSHポートフォワーディングは、SSHの暗号化通信を利用して別のサービスへ安全に接続するための機能です。

ローカルフォワード、リモートフォワード、ダイナミックフォワードの3種類があり、実務では特にローカルフォワードがよく利用されます。

データベース管理や内部サーバ保守などで非常に便利な機能であり、Linux管理者であればぜひ覚えておきたい知識です。

まずはローカルフォワードを実際に試しながら、SSHトンネリングの動作を体験してみましょう。