/home/by-natures/dev*

ソフトウェア開発者として働く人の技術的なメモ

FTPの煩雑さ

今日、FTPについて調査する場面があったので簡単にまとめたいと思います。

FTPとはFile Transfer Protocol の略で、簡単に言えばファイルの送受信をするときに用いるプロトコルです。手元のPCがWindowsで、Linuxサーバにデータを上げてホームページを開設したい!なんて時に使いますね。私が初めてHPを開設したのは中学生でした。懐かしいです。

さて、そのFTPには2種類の接続方法があります。1つはアクティブモードで、もう1つはパッシブモードです。何も気にしなければ FFFTPなどのデフォルトもパッシブモードなのでパッシブモードで接続すると思うのですが、それぞれ説明しましょう。

まずアクティブモードですが、まずクライアントがサーバの21番ポートに接続しに行き、通信を確立します。その後データのやりとりのため、クライアントはサーバに「20番ポートから、私のX番のポートに接続して下さい」と依頼し、サーバは自分の20番ポートからクライアントのX番ポートに接続しに行きます。これがアクティブモードでの接続です。

一方パッシブモードでは、データのやり取りのための接続確立手順が異なります。今度はサーバがクライアントに「何番ポートからでもいいから、私のX番ポートに接続しに来てくれ」と頼みます。これがパッシブモードでの接続です。

何が違うのかよく考えないとわかりませんが、「どちらが初めにつなぎにいくか」が逆になっています。アクティブモードではサーバからクライアントに繋ぎに行きますが、通常であればルータに弾かれてしまいます。このブログが乗っている自宅サーバも、ルータで「80番ポートにアクセスが来たら自宅サーバに転送する」というようなことを設定しており、外からクライアントに繋ぐ難しさがわかると思います。

また、パッシブモードではサーバ側がポートを指定しますが、特に指定しなければ空いている適当なポートを使用してしまうので、FWの設定がやや困難です。パッシブモード使用してよいポートを設定することもできますが、いくつも設定しなければならず、FWの設定がやや煩雑になりがちです。また、HTTPは80番だけ開けておけばよいのにFTPのためにどうしてこんなにポートを開けなければならないんだ?と、ふと考えることもあります。そもそも、FTPは暗号化されていないために非常に危険です。

以上の理由から、私はセキュリティの理由以上に簡易さからSCPやSFTPを利用しています。これらはWinSCPクライアントから簡単に利用することが出来ますし、繋がらなければ単に22番ポートをチェックすればよいだけですし、FWの設定も特に要りません。

SCPやSFTPを知らないだけのお客さんなら、これらを伝えるだけでよいのですが、アプリケーション上の理由からFTPのみ利用可能な場合があるらしく、これからもお仕事でFTP周りの苦労は続きそうです…。