変なタイトルですみません・・・。(ちと間違いがあったので大幅に修正しました。9/2)
「ポートフォワーディング」を検索すると概念的な説明とか詳しい設定方法がいっぱいあるのでそちらを参照するほうが良いです。あくまで自分用の備忘録です。あしからず。
Webサイト構築などでサーバーの設定を自分でいじれるようになると、いろいろ触りたくなるものです。通常ホームページのデータはFTPでアップロードしてたわけですが、セキュリティーだの個人情報だの、騒がれると、このFTP経由でのアップロード手段も問題となります。FTPの何が駄目なのか、「生のデータを垂れ流す」この一点につきると思います。パスワードでさえプレーンテキストで送っちゃうんですから・・・。
というわけで、SFTPだの、SSLを利用したFTPSだのといったものが出てくるわけですが、使い慣れたFTPクライアントを変えたくない・・・というのは誰しも思うのではないでしょうか。
そこで、これらセキュリティーの問題を克服しつつ、使い慣れたFTPクライアントを使い続けたい・・・この二つの要望を叶えてくれるのが、TCP 22番ポートを利用した、ポートフォワーディングというわけです。
つい最近知りました(笑)
もともとは、DreamWeaverCS4で、秘密鍵を利用したsFTPができないことが、不満で、いろいろ検索して調べた結果、このポートフォワーディングという仕組みを知ったというわけです。なお、DreamWeaverCS4はSFTPのパスワード認証ログインのみ対応しているようです。CS5は持ってないので分かりません。
で・・・ポートフォワーディングを利用する準備です。TeraTerm(ver4.65)を使用します。
- サーバー側のsshd の設定を確認。
/etc/ssh/sshd_config ファイルで、AllowTcpForwarding を yes に。 - FTPサーバー(vsftpd) の設定ファイル(/etc/vsftpd/vsftpd.conf)に次を追記。
pasv_promiscuous=YES
(注)YES に設定した場合、 PASV セキュリティーチェックを無効にし、 制御用の接続と異なる IP アドレスからのデータ接続を許可する。 何をしているかを理解している場合にのみ有効にすること。 唯一の道理にかなった利用法は、安全なトンネルの中で使うか、 そうでなければ、おそらくは FXP(訳注: リモートホスト間転送) を容易にするためのものである。pasv_min_port=50000
pasv_max_port=50002
も追加します。PASVモードでデータ受信のためにランダムなポートで接続しますので、これらポートもポートフォワーディングしないといけません。ポート番号の最小値・最大値を指定してそれらのポートすべてについてポートフォワーディングする必要があります。 ※これら上記の値(50000とか)は適当につけてます。 - TeraTermの「設定」メニューの【ssh転送】を設定。
「ローカルのポート」は、FTPクライアントと同じマシン(つまりlocalhost)の適当なポート。21番じゃなくてもいい。なんでも好きなの。 「リモート側ホスト」には、sshdが動作しているサーバーから見たFTPホスト。たいていsshdとvsftpdは同じマシンで動作していることが多いし、実際僕の場合もそうなので、今回はサーバーから見たFTPホストということで127.0.0.1を入力。
また、これと同様に上記で
pasv_min_port=50000
pasv_max_port=50002
と設定しているので、50000~50002までのポートも同様に転送設定を行います。
最終的には、下記のような感じになります。
これらの設定で、クライアント側のマシンで21番と,50000~50002番ポートがLISTEN状態になっているはずです。コマンドプロンプトを立ち上げ、netstat –a –p TCP と入力することで確認できます。
- 準備完了で、次はFTPクライアントの設定変更です。
- FTPクライアントの設定。
普通はFTPサーバーの接続先は、Webサーバーのアドレスを指定していると思いますが、これをlocalhost、つまり自分のマシンのループバックアドレス(127.0.0.1)を指定します。使用するポートは、上記で指定した「ローカルポート」を使うように設定します。上記の例ですと21番を指定しているので、FTPクライアントのポート番号を変更する必要はないですが。
あと、PASVモードを有効にする必要です。 - これで設定終了。
つまり、FTPクライアントは、自分のマシンの21番ポートにアクセスすると、ポートフォワーディングによって、その接続(コネクション)がリモートホスト側に転送されるってわけで。自分のマシンからリモートホストまでは当然、ssh接続なのですべてのデータが暗号化されている・・・ってわけで、これで安心・・・というわけです。。。 - ちなみに・・・
FTPサーバーの設定で、ローカルアドレス(127.0.0.1)からのみ接続可のように設定しておけば、ポートフォワーディングしていない、普通の?FTP接続は拒否できると思います。たとえば、僕は /etc/xinetd.d/vsftpd に、only_from = 127.0.0.1 とかしています・・・。
FTP接続するたびに、TeraTermを立ち上げなければなりませんが、まぁ、最小化していれば問題ないしね。。。
で、このポートフォワーディングを利用することで、なにかとアクセス制限が多くなるファイアーウォールを超えて自由に通信が可能になります。家のブロードバンドルータの22番ポートさえ開けておけば、適切にアドレス変換などの設定を行うことで、インターネット上の経路を流れるデータを暗号化しつつ、どんなポートでも転送してくれるので非常に便利です。
あ、sshdデーモンの設定を変えれば別に22番ポートじゃなくてもいいかなと。 実際、秘密にするときは、22番ポートなんて使わないでしょうし。。。
いやぁ、Linuxのサーバー一個家に入れとくだけで、たいていのことなら全部解決してしまいますねぇ~。便利ですねぇ。