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トンネリングの動作を体験してみましょう。






