FTPサーバ(ProFTPD)の構築(CentOS編)FTPサーバ(ProFTPD)の構築(CentOS編)CentoOSがサポートしているFTPサーバはvsftpdであり、このデーモンは他のデストリでも多く採用されています。このデーモンはNATルータ越えでPASVモ−ドでのFTPサービスを公開するのに難があるのと、細かいところでおやじの使い方で設定できないことがあるので、今回もFTPサーバはProFTPDで行くことにしました。このデーモンは、設定でNATルータ越えでPASVモ−ドでのFTPサービスの提供ができます。PASVモードでのNATルータ越えのインターネット公開の設定や、FTPサーバの公開、サーバ公開のための設定も参考にしてください。ProFTPD1.2.10rc1から「NLST」のオプション指定が未サポートになり、FFFTPなどではデフォルトのままではファイル一覧が取得できないので注意が必要です。これはRFC959に基づく変更であり、クライアントの設定を変更して「LIST」コマンドでファイル一覧を取得するようにすれば大丈夫です。chroot環境で、アップロードしたファイルのクライアントでのタイムスタンプ表示やログがGMT(9時間前)になってしまう場合は、こちらを参考にしてください。コマンドがサポートされていないバグがあるので実質1.3.1rc3以降)、UTF8に対応できるようになったので追記しました。UTF8対応すると対応するクライアント(Filezilla、SmartFTP等)を使用するとサーバ上での日本語フォルダ・ファイル名が正しく表示されるようになります。既存環境で日本語フォルダ・ファイル名を使用していた場合、UTF8対応クライアントでは表示はされるものの扱えないので、非対応クライアントで削除してからアップロードしなおす必要があります。それ以降は非対応クライアントでは文字化けして扱えなくなります。ProFTPDでUTF8対応しても従来どおりのUTF8非対応クライアントもそのまま使えるし、対応クライアントも使用できるが、それぞれが扱ったファイルはコードが異なるため扱えません。ProFTPDでUTF8対応するとデフォルトでUTF8対応になるが、バーチャルホストやディレクトリ等毎に個別に無効にもできます。■ProFTPDのダウンロードとRPMの作成ここでは、SSL/TLS対応でRPMを作成することにしますが、SSL/TLSを使用しない場合は設定をしなければそのまま使用できます。2004年10月現在でProFTPDにログイン中のコマンド実行タイミングを測定して、そのタイミングを元にアタックすると外部から有効なユーザアカウントを識別することができるという問題があり、その対策として「mod_delay」というモジュールが提供されており、1.2系では自分で組み込む必要がありましたが、proftpd1.3.0rc1ではデフォルトで組み込まれましたので、そのまま作成しました。4.0用)をダウンロードに置いておきますので、面倒な方は利用してください。作業ディレクトリ(いつもの/usr/local/src)に移動して、ProFTPDを本家のこちらからダウンロードして解凍する。(おやじがダウンロードしたのは、proftpd-1.3.0rc1.tar.bz2。proftpd-1.3.0rc1.tar.bz2解凍してできたspecファイルとソースをRedHatのRPM作成環境にコピーする。/usr/src/redhat/SOURCESデフォルトのspecファイルままだと、/etc/ftpusersにusersグループも取り込まれてしまい一般ユーザがアクセスできなくなるのと、基本パッケージとinetdパッケージをインストールすると、どちらもstandaloneモードが起動し、xinetd経由でも起動でき、且つ、configファイルはinetd用になっているというおかしな状態になるので、specファイルを少し編集し、inetdパッケージをインストールしたときには、standaloneモードを停止し、起動スクリプトを無効にするように変更した。ログ用ディレクトリとmod_delayでタイミングデータを格納するディレクトリを自動生成するようにした。UTF8対応にするための設定を追加する。(青字は削除、赤字は追加、緑字は変更したものです。proftpd(snip)[Esc]、[:]、[w]、[q]で保存。nls)対応のバイナリRPMを作成する。(UTF-8対応はProFTPD1.3.1rc3以降)下記操作で、/usr/src/redhat/RPMS/i386配下にRPMが作成される。1.3系ではmod_delayはデフォルトで組み込まれるようになったため、オプション指定は不要。nls上記で作成された2つのRPM(proftpd-1.3.0rc1-1.i386.rpm、proftpd-inetd-1.3.0rc1-1.i386.rpm)をインストールする。proftpd-inetd-1.3.0rc1-1.i386.rpm■ProFTPDの設定RPMそのものは、SSL/TLSに対応していますので設定だけで動作させることができます。SSL/TLS対応やバーチャルホストについては各ページを参考にしてください。ここでは、基本的な設定のみ示します。ProFTPDの設定は、/etc/proftpd.confを編集します。ここでは、FTPはPASV対応のためinetdモードで動作させるものとします。下記は修正した部分のみ記載しています。(青字は削除、赤字は追加、緑字は変更したものです。inetdデフォルトは、デーモン起動のstandaloneですが常時使用するものでもないので、メモリ利用効率を考えxinetd.d経由の起動とし、inetdに変更。attacks等に有効。inetdモードでは無効なため、特にコメントアウトしていない。最大ポート番号ルータによっては、本設定をしなくても自動的にアドレス変換してくれるものがあるので、まずは本設定を行わずにインターネット側からPASVで使用できるか確認し、問題が出た場合(LISTが取得できないという現象になる。クライアントで見ているとPASVコマンドの応答でサーバのプライベートアドレスが通知されてくる。)のみ、この対処を行えばよい。・MasqueradeAddressMasqueradeAddressでは、ルータのWAN側アドレス又はドメイン名が指定できるが、固定IPの場合はルータのWAN側アドレスでも良いが、動的IPの場合は、必然的にDDNSでのドメイン名になる。一般的には関係ないが、おやじのようにインターネットと同じドメイン名で内向きDNSを建てていると、自宅DNSでは自分のドメインでグローバルアドレスが牽けないので接続できない。その場合、別途、FTP専用のホスト名をDDNSで登録し、このドメイン名をMasqueradeAddressに記述することで、この問題を回避できる。動的IPの場合、サーバタイプがstandaloneになっているとIPの変化が起きてもDNSを牽き直さないので、必ずinetdで走らせる必要がある。・PassivePortsPassivePortsでは、PASVモードで使用するポート番号(1024以上)の最小と最大で範囲指定する。おやじは、家庭用なのでそれほど多くは必要ないのと使いまわしされるので、MaxInstancesと同じ30ポートとし、他のデーモンで使ってない4000-4029とした。このポートはインターネット側から接続が開始されるので、ルータのスタティックNATでサーバにNATすると同時に、フルタリングも開ける必要がある。ftpログイン時に、PAMのエラーログが毎回出ていた(接続はできるが)ので設定を追加した。nobodyデフォルトでは、nogroupというグループになっていますが、CentOSにはnogroupというグループはないため、追加してもいいがここでは、権限の低い既存のnobodyに変更。指定により、接続ユーザにユーザのhome以上を見せないようにするが、これでは不便なのでwheelグル−プのユーザ(おやじ)のみ自由にアクセスできるように設定。上記設定では、/houme/user以下がrootディレクトリとなり、Maildir等システム関係のディレクトリ・ファイルが見え、誤操作でおかしてしまう可能性もある。従って、以下のように設定変更し、一般ユーザはpublic_html以下しかアクセスできないようにした。!wheel更に、グループの制御に関してはカンマで区切って複数のグループを記述でき、それらのアンド条件で適用される。従って、下記の例では、ftpユーザで且つwheelユーザではないユーザがpublic_html以下しかアクセスできないようになる。この設定はDefaultRootと~ftp,!wheelの間は[Space]にしないと有効にならなかった。192.168.1.0/24)からのみ、アクセスを許容し、それ以外は拒否するように設定。authログファイルのディレクトリがない場合は、下記で、ログファイルのディレクトリを作成しておく。"-a"デフォルトではドットファイルが見えなくなるので、見せる必要があるなら本設定を追加する。/var/proftpd/proftpd.delayrpmインストール時にmod_delayでタイミングデータを格納するディレクトリが作成されるはずであるが、ない場合は下記で作成しておく。/var/proftpdanonymousFTPの停止anonymousFTPは、運用しないため、全項目をコメントアウト。UTF8対応(ProFTPD1.3.1rc3以降)UTF8対応でRPMを作成した場合、サーバとしてはデフォルトでUTF8対応になるため設定は特に必要はない。従来どおりFFFTPでのみ使用している限りは何も変わりはない。FilezillaやSmartFTPのようなUTF8対応クライアントを使用すると、フォルダやファイル名に日本語を使用してもサーバ側ではUTF8で記録されるため、サーバでも正常に表示される。しても不都合がある場合は、下記のようにすればUTF8対応を停止できる。.ftpaccessで扱えるので、必要に応じて設定すればよい。上記以外で、使用環境によっては設定しておいたほうが良いと思われるパラメータを参考までに上げておきます。timeに変更される。proftpd-1.3.1rc1以降、TimesGMTの設定に関わらずMDTMでは常にGMTで返送されるので本設定は無効です。chroot環境で、アップロードしたファイルのクライアントでのタイムスタンプ表示やログがGMT(9時間前)になってしまう場合は、こちらを参考にしてください。offResume機能のサポート大きなファイルのダウンロードやアップロード中に回線断等のトラブルにより転送が中断してしまった場合、クライアントがサポートしていれば、中断点から再開できるのが、Resume機能である。ダウンロードはデフォルトで機能が有効になっているが、アップロードは無効になっている。有効にしたければ、下記設定を追加する。コマンドによって再開するので、クライアントのオペミス(同一名称のままアップロード)で、先に保存されたファイルが壊れたりすることがあるので、特にanonymousでは絶対に使用しないほうが良い。大きなファイルをアップロードすることがない場合は意味がないが、アップロード中に回線断等ではなく、クライアント操作で転送を中断(ABORコマンドによる中断)した場合に、下記設定を行っておくと自動的に中途半端なファイルを削除してくれる。上記、AllowStoreRestartとは背反である。on同一ホストからの同時接続数の制限ダウンロードツール等を使用すると、複数セッションを設定して高速でダウンロードできるが、特定ユーザに細い回線を占有されてしまう。これを制限するのが下記設定で、数字は同時接続数であり、デフォルトは無制限である。制限されたときは、下記メッセージが返送される。違った場所からの同一ユーザでのログインを制限できる。制限するには下記設定を行うが、数字は同時接続数である。制限されたときは、下記メッセージが返送される。(%mは制限値)アップロードファイル容量の制限アップロードを許可している場合、オペミスで大容量のファイルをアップしてしまったり、anonymousでいたずらされたりすることを防止できる。最悪はHDDを使い切ってシステムロックすることも考えられるので、設定しておいたほうが良い。この設定で制限できるのはファイルの大きさだけなので、quotaでHDDの使用量制限を併用することを勧める。ダウンロードの制限もMaxRetrieveFileSizeで可能であるが、あまり意味はない。下記の上の例は全てを3MByteに制限する例であり、下の例はanonymousのみ50KByteに制限する例である。(bytes)である。*タイマ関係の設定タイマ関係としては、以下が設定可能であるが、家庭内で使用するには基本的にデフォルト値で問題ないはずなので、特に追加記述は不要である。各自の動作環境を想定して変更すると良い。変更するなら、TimeoutStalledで、ストール(止まった)したままでいつまでも繋いでおく必要もないので、10分(600)程度で切断しても良いと思われる。指定すれば、転送の遅いユーザは切ることもできる。ここで無制限としても、巨大なファイルを細い回線で時間をかけて転送していると、転送が切れてしまう(転送完了後に切れることが多いはず)ことがある。これは、クライアントの実装にもよるが、データ転送中は制御コネクションにデータが流れないためルータのNATテーブルが消えてしまうことから発生する。制御コネクションのKeepaliveとしてNOOPコマンドを投げているクライアントもある。制御・データコネクションのいずれかからもデータを全く受け取らないまま、接続を維持している時間。クライアントが認証に最大何秒間費やせるかを指定。認証後に、データ転送(ファイル転送やリストを取得)をしないで、最大何秒間接続していられるかを指定。認証後に、制御コネクションを保持している時間を指定。サーバとFTPクライアント間で、実際のデータ転送をしない(つまり、止まったまま)で最大何秒間データコネクションを維持していられるかを指定。デフォルトは無制限の"0"。いうディレクティブに変更、集約された。.ftpaccessなので、制御単位に合わせて適宜設定する。制御対象のコマンドを指定する。対象コマンドは、RETR、STOR、STOU、APPEであり、複数指定する場合は「,」区切りで記述する。ダウンロード系は「RETR」を、アップロード系は「STOR,STOU,APPE」とすればよい。読んで字のごとく、転送制御量をKByte/s単位で指定する。本パラメータは、「kilobytes-per-sec」に続けて、「:1024」のようにコロンを挟んで指定する。よる転送量制御が効かなくなる。一般的には、転送量制御は大きなファイルの転送を平均化するのが目的のため、このパラメータで小さなファイルは一気に送ってしまうことができる。それぞれ、後ろに対象を記述する。グループ以外が対象となる。ディレクティブで対象を指定する。グループ以外は、5KByte/sに転送量を制限されるが、1Kbyte以下のファイルはこの限りではないとなる。(共通部)に下記のように記述する。クラスを識別するための適当な名前を指定。コネクションの最大数を指定。このクラスとして扱うホスト名を指定。IP/ネットマスクで指定。二つのクラスを作成している。最大100コネクション張れることになる。172.16.1.0/24■logrotateの設定/etc/logrotate.d配下に下記のようにproftpdを作成するだけで、他のlog同様、1週間毎にlogrotateされます。properlynocompress}「Esc」、「:」、「w」、「q」で保存する。1行目は、/var/log/proftpd/*.logでもよい。