こんな具合になっていれば、動いていると思われます。デフォルトでは、ポート21への接続を待っており、接続があると1接続あたり1つのプロセスが起動されます。最大の接続数は、先に出てきた
proftpd.conf ファイルで設定します。/usr/etc/proftpd.conf として存在するはずです。
このファイルの記述に関する詳細は、インフォサイエンスの日本語訳を見ていただくとして、ひとまず僕がいじった個所を。
- ftpユーザに~/以上を見せなくする(chrootする)
wu-ftpd では、/etc/passwd やら /etc/ftpaccess やらいろんなところを直してやっと出来るこのchrootですが、ProFTPD
では proftpd.conf ファイル中に1行挿入するだけで済みます。
入れる場所ですが、きっと基本的にはどこでもいいんでしょう。僕はなんとなく、元々あったDefaultServerのすぐ下に挿入しました。
なお、既に wu-ftpd を使っていたときに同様の処理をしていた場合は、/etc/passwd ファイルを元に戻さないと期待した結果になりませんので、ご注意下さい。
- AnonymousFTPを使えなくする
AnonymousFTP は、<Anonymous> ディレクティブによって制御されています。デフォルトでこのディレクティブはAnonymousFTPログインを許すようになっています。従って、単純に考えれば、このディレクティブ(<Anonymous>〜</Anonymous>)をコメントアウトしてしまえば、Anonymousログインは出来なくなりますが、もうちょっといい方法がありそうです。
ここでは、<Limit>ディレクティブを使ってみます。インフォサイエンスの日本語マニュアルを見ると、LOGIN
というキーワードが存在していて、LOGIN 操作自体の制御が出来るらしいですから、これをデフォルトの<Anonymous ~ftp>ディレクティブで囲まれた中へ追加してみます。
<Limit LOGIN>
DenyAll
</Limit LOGIN>
これで、Anonymousログインしようとすると、530 Login incorrect となればOKです。
- Resumeを有効にする
よく巨大なファイルのFTPサーバへのアップロードやらFTPサーバからのダウンロードで、途中で回線が途切れてしまったり、何らかの事情で中断したあとで、続きをしたいときがありますね? こういうのをResumeという風に呼んだりするんですが、ProFTPDはデフォルトではこれらの動作を禁止しています。
これらを許可したい場合は、AllowStoreRestart/AllowRetrieveRestart の2つのディレクティブで制御します。
AllowStoreRestart on
これでアップロードのResumeが、
AllowRetrieveRestart on
同様にこれでダウンロードのResumeが、それぞれ可能になります。
なお、サーバ全域に行うことも、<Directory> やら <Anonymous> やらの中に書けば、その範囲に関してだけ行うことも可能です。
- inetデーモン経由で起動する
既に書いた通り、inetデーモン経由でも使えます。その場合は、/etc/inetd.conf をいじると同時に、/usr/etc/proftpd.conf
内の ServerType ディレクティブもいじる必要があります。デフォルトではここは standalone になっていますから、これを
inetd に書き換えてください。そうしないと起動してくれません。起動してくれないときは、/var/log/syslog を見てください。"Check
the ServerType directive to ensure you are configured correctly."
というメッセージが残っていれば、これが原因です。
- Passiveモードで使うポートを限定する
ProFTPD のデフォルトでは、Passiveモードでの接続は出来なくなっています。
嘘です(^^; 今はデフォルトでもPassiveで動くようです。でも、以前のバージョンでは確かに動かなかったんだけどなぁ・・・
NATの内側のネットワークからFTP接続したいときなど、NATの設定上の問題でPassiveモードでないと接続できない場合があります。外部からの20番ポートへのアクセスを禁止されている場合などです。IP
masquerade だったら、ip_masq_ftp というモジュールが勝手にやってくれますが、市販ルータではこれに相当する機能がついていない場合もあるようです。
このようなネットワークから自宅などのNATの内側のホストへのFTP接続を許可しようとした場合、Passiveモードにしないと接続できないことになりますが、NATのフィルタの制限を緩める関係でネットワークの使用するポートが既知でありたいということもあります。
このような場合の設定例が、こちらで紹介されています。Mini-HOWTO
for ProFTPD and NAT という文書がそれです。/usr/etc/proftpd.conf 内で、下記のディレクティブを追記することで、上記のようなシチュエーションにおいてFTPサービスを利用可能にできます。
MasqueradeAddress aa.bb.cc.d
PassivePorts 10020 10024
ここで、aa.bb.cc.d はNATの外側のグローバルアドレスです。IPアドレス固定のネットワークであれば、ここにIPアドレスを生々しく記述してもいいでしょう。もし、ISDNやxDSL、CATVなどの常時接続サービスを利用していて、IPアドレスが固定されていない場合は、DynamicDNSサービスをつかって名前でグローバルIPを引けるような環境を作った上で、ここにIPアドレスの代わりにDNSに登録した名前を用いることができます。
これで、Passiveモードではポート10020から10024だけをFTPデータコネクションに利用しますので、NATの設定ではこれらのポートの外部からのアクセスを許すようにすればいいのです。
なお、グローバルアドレスが固定されていない場合は、ProFTPD自体をinetdから起動するようにしたほうがいいみたいです。Standaloneで起動されていると、なにかの拍子にグローバルアドレスが変わってしまったときに接続できなくなります。ProFTPDがPORTコマンドで返してくるべきIPアドレスは、オンデマンドで名前引きするわけではなくて、起動時に見ているだけらしいので、昔のIPアドレスが返ってきてしまったりします(^^;
- SSH経由で接続する
FTPをSSH経由で接続するようにすると、パスワードを暗号化してネットワークへ流すことができるので、セキュリティレベルが上がります。SSH経由で接続(SSH
PortForwarding)については、こちらで書いていますので、参考にしてください。違いは、フォワードするポートをFTP用にすることです。
・・・ということを書こうと思ったら、もっと丁寧にかかれているサイトがありますね(^^; やっぱり。
ご紹介しますのでそちらをご覧下さい。
http://www.itboost.co.jp/inst/inst_17.php
ポイントは、上の4.で示したような設定にくわえて、AllowForeignAddress On というディレクティブを追記することです。これをしないと、ProFTPDはSECURITY
ALERTを吐いて接続させてくれません。