とある方からの問い合わせがありました。私のところのFTPサーバにプロキシサーバ経由で接続すると、エラーになってしまうとのこと。プロキシサーバが返したエラー画面を見てみると、EPSVで接続しているようですね。
ところでEPSVとは何でしょう? というか、EPSVが私のところで問題になるのは初めてなので、正直意外でした。世の中のFTPを取り巻くステータスが変化しているのでしょうか?
EPSVとは、RFC2428で拡張されたFTP(File Transfer Protocol)の仕様です。2000年より前の話で、かなり古い仕様です。なので、今さらこういうのが問題になると、「えええ?」と思ってしまうのです。
EPSVとは、Extended PASVの略でしょうか。さらに言えば、PASVとはPassiveの略です。クライアントとFTPサーバの通信方式を決めるのですが、EPSVは対になるEPRTとともにIPv6とNAT(Network Address Translation)に対応したコマンド、ということになっています。そうです、オリジナルのFTPは、IPv4にしか対応していないですし、NAT(ルータ)にも対応していません。
世の中にIPv6対応のサーバが増えてきているとして、またNAT越しにFTPサーバに接続するということも想定して、最初からEPSV/EPRTコマンドを発行する、というケースが増えてくるのでしょうか。
ところで、今どきのFTPサーバソフトウェア、たとえばvsftpdやproftpdなどは問題なくEPSV/EPRTコマンドに対応しています。しかも、最初から有効になっているので、これでクライアントにいらぬ期待を抱かせる可能性もあります。なので、キッパリと、EPSV/EPRTコマンドは使えないというように、設定を変更してあげるのも親切というものですね。
vsftpdでは、/etc/vsftpd.confにcmds_deniedパラメータを入れて、そこにEPSVとEPRTを指定してあげるとよいようです。
cmds_denied=EPSV,EPRT
この状態で、EPSV/EPRTコマンドを受け取ると、“550 Permission denied”エラーになるようです。このエラーによってEPSVは諦め、基本のPASVに切り替えるようです。
たかがFTPといえど知らないことが多すぎます。こういったことに気づかせてくれたEPSV君に感謝です。