ポートフォワーディング(port forwarding)とは、ローカルコンピュータの特定のポートに送られてきたデータを、別な通信経路を用いてリモートコンピュータの特定ポートに送信する事です。
この通信経路には、SSHを利用する事が多いです。
SSHの通信路を使用することによって、通信を暗号化することができます。
通信のイメージは図のようになります。
通常は、各アプリケーションが、それぞれのポートを使用して暗号化されていない平文で通信を行います。
しかし、このままではパケットの盗聴などセキュリティに危険が生じます。
そこで登場するのが、”SSHを利用したポートフォワーディング(Port Forwarding)”です。
この方法によって、通信は暗号化されたSSHの経路を通ります。
従って、平文よりも安全性を高める事ができます。
では、実際の通信の経路を追ってみましょう。
通常の通信では、各アプリケーションに応じたポートを経由して通信が行われます。
しかし、一度ローカルマシンとリモートマシンをSSHで接続し、その経路を使用してアプリケーションの通信を行います。
この経路の事を、”SSHトンネル”と呼ぶこともあります。
SSHで暗号化されたSSHトトンネルを掘り、そのトンネルの中にデータを送るといったイメージです。
この方法により、通信を暗号化することができ、セキュリティを高める事ができます。
メールやファイル転送、リモートデスクトップなど様々なアプリケーションに応用できます。
SSH ポートフォワーディングは、設定のほとんどがクライアントですが、サーバ側でSSH サービスが稼動していて、ポート転送が可能である事と、SSH 経由で利用したいサービスが起動している事が前提です。
ここでは、メールをSSH ポートフォワーディング経由で送信する例を挙げます。
このメリットは2つありあます。
一つは、SSH 経由なので通信全体が暗号化される事であり、もう一つは外部からメールサーバ利用できない場合の解決策になる事です。
例えば、会社や大学などでは、セキュリティのためにその組織の属するドメイン以外の端末からはメールが送信できないようになっている事が多いです。
社内や構内の端末にはその組織で管理するIP アドレスが付与されていて、メールの送信元がそれらに合致する場合にのみメールを送信するといった制限をかけます。
このような制限を設けなければ、社外や大学構外からサーバが悪用され、不要なメールを送信してしまう可能性が高くなります。
しかしながら、自宅から会社や大学のメールサーバを使ってメールを送信したい場合も少なくありません。
普段取引している相手とのメールは、同じメールアドレスでメールを出したいでしょうし、大学では学内用のアドレスでのみレポート提出が可能、といった場合もあると思います。
このような時でも、外部からSSH が利用できる状態ならばメールを送信する事ができます。
外部からのメール送信やFTP は禁止されている事は多いですが、SSH は許可になっている環境も少なくはありません。
そこで、SSH ポートフォワーディングの登場となります。
例において使用するソフトは、メーラとして「Mozilla Thunderbird」、Windows のSSH クライアントとしてPutty です。
その他のメーラやSSH クライアントでも同様の設定があると思います。
SMTP サーバの設定を編集するので、前もって必要な情報等は控えておく事をお勧めします。
また、メーラによっては複数のSMTP サーバの設定を保持し、送信時にSMTP サーバを選択できるものがあります。
SMTP サーバの設定を複数保持できないメーラの場合には、普段の設定とポートフォワーディングの設定を両方保持できないため、非常に不便になると思いますので、ご注意下さい。
SSH とアプリケーションで使用するポートを整理すると、次のようになります。
ローカルホストでSSH がメール待ち受けるポートは任意のポートを使用できますが、ウェルノンポートやトロイの木馬などが利用するポートは避けるべきです。
メール送信のSSH ポートフォワーディングで使用するポートの例
ポート番号 |
動作 |
22 |
SSH の通信ポート |
25 |
メールサーバのSMTP ポート |
8025 |
ローカルホストでSSH がメール待ち受けるポート(任意のポートを使用可能) |
-
手順
-
@ ローカルホストを経由するようにメーラの設定をする
A ポートを転送するようにSSH クライアントの設定をする
B SSH でメールサーバへ接続する
C SSH の接続を保ったままメールを送信する
それでは、メーラの設定から説明していきます。
Thunderbird のSMTP サーバの設定を開きます。
サーバ名には自分自身を示す「localhost」あるいは「127.0.0.1」を指定します。
ポート番号は任意ですが、後のSSH クライアントで指定するポートをこれに合わせる必要があります。
ユーザ名は、メールサーバにおける自分のアカウント名です。
メーラの設定は以上で終わりです。
SSH クライアントの設定はWindows(Putty)とLinux(コマンド)の場合に分けて説明します。
-
・ Windows(Putty)の場合
-
接続先ホストにメールサーバのIP 又はホスト名を入力します。
次に、トンネルの項目を選択し、源ポートと送り先を指定します。
源ポートとは、ローカルホストがメールをSSH トンネルに流すためのポートであり、任意のポートを指定できます(ここでは8025番ポート)。
送り先は、メールサーバとSMTP のポート番号を半角コロンで区切って指定します。
SMTP で使用するポートは25番なので、「サーバのIP アドレス又はホスト名:25」とします。
追加したならば、セッションを保存します。
-
・ Linux の場合
-
Linux の場合には、少し長いですがコマンド1行で設定が済みます。
次のように、SSH コマンドに-L オプションを付加します。
SSH コマンドは一例ですので、他にも書式はあります。
$ ssh -L [リモートホストのユーザ名]@[リモートホスト] [localhostポート]:[リモートホスト]:[リモートホストポート]
$ ssh ユーザ名@192.168.1.22 -L 1234:192.168.1.22:5901
以上のように、SSH クライアントの設定を行ったならば、SSH でメールサーバへログインします。
ログイン後、その状態のままメーラを起動して、メールを送信します。
メールは自分のマシンからSSH トンネルを通り、メールサーバへの22番ポートへ到達し、ポート転送機能により25番ポートへ転送されます。
その結果、SMTP サーバからメールが配信されます。