ProFTPd

INDEXに戻る

設定の方針


ProFTPd のインストール

apt-get update
apt-get proftpd
Vine Linuxb3.1では、初期状態でインストールされているかもしれない。
inetd での起動は設定されていないかも。

ProFTPd の主要ファイルの構成

/etc/proftpd.conf 設定ファイル
/etc/hosts.allow
/etc/hosts.deny
TCP/Wrapperによるアクセス制御ファイル
/etc/ftpusers ログイン不可ユーザーの羅列
/var/log/xferlog ログファイル(初期設定値)
(任意の場所を指定できる)

ProFTPdの設定

設定ファイルの編集

/etc/proftpd.confを書き換える。

  1. サーバータイプの変更 (重要)
    # ServerType standalone
      ServerType inetd

     
  2. 子プロセス の制限
    MaxInstances   30
    この設定で、子プロセスの数を制限できる。
    DoSアタックなどから守るために制限すべきかもしれない。
    ただし、inetd から起動している場合は効果がない。
    xinetd などを使って、プロセス起動数の制限をかける必要があるかもしれない。

     
  3. PASV モードを使う場合 (追加)
    # PASVモードでインターネット公開する場合の設定
    AllowForeignAddress    On
    # ルータのWAN側アドレス 又は ドメイン名
    MasqueradeAddress    hogehoge.jp
    # 最小ポート番号 最大ポート番号
    PassivePorts         15000 15029
    MasqueradeAddress
     ルータのWAN側アドレスやドメイン名が指定できる。
    固定IPの環境ではルータのWAN側アドレスでも良いが、動的IPの場合は、DynamicDNSでのドメイン名になる。
     動的IPの場合、サーバタイプが standalone になっているとIPの変化が起きてもDNSで検索しなおせないので、必ず inetd で走らせなくてはならない。
    PassivePorts
     PASVモードで使用するポート番号(1024以上)の 最小値 と 最大値  (範囲指定)。
    MaxInstances と同じ数のポート数で、かつ他のデーモンで使ってないポートがよい。
    (初期設定では MaxInstances = 30 なので 3000  3029 など)
    クライアント側から接続が開始されるので、 このポートはルータのNAPTでサーバにNAPTし、ポートフィルタも開けておく必要がある。

     
  4. PAM認証の設定 (追加)
    # PAM認証の設定
    AuthPAMAuthoritative    On
    AuthPAMConfig           ftp
    もしPAM認証のエラーが出る場合は追加しておくとよい。

     
  5. ユーザ・グループの変更
    User nobody
    Group nobody
     初期設定では Group が nogroup になっているかもしれないが、VineLinuxには nogroupグループは存在しないので、 nobody に変更。
     FTP用の専用グループを作ってもよいかもしれない。

     
  6. アクセスディレクトリの制限(追加)
    DefaultRoot     ~
    「~」という指定をすると、接続ユーザーに home 以上を見せないようにすることができる。

    root権限のユーザーなどが、このような制限をされたくない場合は、
    DefaultRoot    ~ !rootuser,otheruser,otheruser
    !ではじめて、コンマで区切って複数ユーザーを書くとそれらのユーザーは、「~」という指定から除外される。

    グループも指定できる
    DefaultRoot ~ !Groupname

    WebページUP用に使ったりする場合は、/home/user が見えてしまうと、本来アップロードする public_html 以外の場所も見えてしまって困るかもしれない、そんな場合は、
    DefaultRoot     ~/public_html !rootuser
    とすると、一般ユーザーには public_html 内しか見えないようにできる。

    ある特定のグループだけ、特定の場所 ( /hoge/hoge ) をルートフォルダにするためには、
    DefaultRoot ~
    DefaultRoot /hoge/hoge Groupname,Groupname2,…

     
  7. アクセス制限の追加 (追加)
    <Limit LOGIN>
        Order allow, deny
        Allow from 127.0.0.1, 192.168.0.0/24
        Deny from all
    </Limit LOGIN>
    アクセスするホストを制限できる。(inetd 経由の場合は TCP/Wrapper でも制限できるが。)
    192.168.0.  などの省略表記はうまく動作しない場合があるかも。

     
  8. Anonymous ログインの停止
    Anonymousログインが不要の場合は、関連項目をコメントアウトしておくとよい。
    また、 <Limit > セクションを <Anonymous ~ftp> セクション内に追加して、 LOGIN を拒否 (Deny) しておくとなおグッド。
    WRITE (書き込み) や SITE_CHMOD (権限の変更) なども禁止しておくとよいかも。
    <Anonymous ~ftp>
      #       :
      #     (省略)
      #       :
      <Limit LOGIN>
         DenyAll
      </Limit LOGIN>
      <Limit WRITE>
          DenyAll
       </Limit WRITE>
    </Anonymous>

     
  9. ログイン時間の高速化 (追加)
    UseReverseDNS    off
    IdentLookups     off 
    UseReverseDNS
    DNS逆引きを停止。微・若干高速化。名前が引けないことによるログイントラブルも防げるかもしれない。
    IdentLookups
    Identの停止。 standaloneモードのときは、効果はあるらしい。inetd 起動のときは効果なし。
    ユーザー確認のためにIdentが時間を食うと、ログイン時に30秒ほど待たされることがある。 簡単な対応としては、単に、113ポートを開けると良いという報告もあるようだ。

     
  10. Resume 機能のサポート (追加)
    # Allow clients to resume downloads (default on)
    AllowRetrieveRestart on
      
    # Allow clients to resume uploads (default off)
    AllowStoreRestart on
    Resume 機能はファイル転送が中断してしまっても、途中から再開できる設定。
    * AllowRetrieveRestart が ダウンロードする際の Resume
    * AllowStoreRestart が アップロードする際の Resume
    アップロード時は、操作ミスなどでファイルが失われることもあるので、Anonymous 時は、使用しないほうがよい。

     
  11. アップロード中断ファイルの削除 (追加)
    # Enable automatic deletion of partially uploaded files (default off)
    DeleteAbortedStores on
    ユーザーからのアップロード時に、ユーザー操作でキャンセル(ABORT)した場合に残る中途半端なファイルを削除してくれる。
    上の AllowStoreRestart on とは相性が悪いかもしれない。
     
  12. 複数同時アクセスの制限
    # The maximum number of clients allowed to connect per host.(default none: no limit)
    MaxClientsPerHost 1
    # The the maximum number of times different hosts.  (default none: no limit)
    MaxHostsPerUser 1
    MaxClientsPerHost は、同一クライアントからの同時接続数を制限する。(主に分割ダウンロードの抑制)
    MaxHostsPerUser は、違う場所からの同一ユーザーでのログインを制限する。

     
  13. アップ・ダウンファイル容量の制限
    MaxStoreFileSize 3 Mb
    # anonymousのアップロードは 50kに制限、その他のユーザーは無制限
    MaxStoreFileSize 50 Kb user anonymous
    MaxStoreFileSize *
    あくまで一回で送れる転送量の制限なので、ディスク容量制限(クォータ)は別に必要である。
    単位の書き方は
    「Gb」 (ギガバイト)   「Mb」(メガバイト)  「Kb」(キロバイト)   「B」(バイト)

     
  14. タイマー制限
    TimeoutIdle       600
    TimeoutLogin      300 
    TimeoutNoTransfer 600
    TimeoutSession    none
    TimeoutStalled    600
    TimeoutIdle
    制御・接続のいずれからもデータがないまま接続を維持できる時間 初期値:600秒
    TimeoutLogin
    クライアントが認証に費やせる秒数 初期値:300秒
    TimeoutNoTransfer
    認証後に、データやファイルリストを取得しないで接続していられる時間 初期値:300秒
    TimeoutSession
    認証後に、制御コネクションを保持していられる時間 初期値:無制限
    TimeoutStalled
    データ転送が開始されたが、データ転送が途切れた場合にデータコネクションを維持していられる時間 初期値:無制限(0)

     
  15. ルートでのログイン
    RootLogin  off
    rootでの直接ログインはパスワード漏れが危険なのでやめておいたほうがいいかも。 (初期値:off)

     
  16. 隠しファイルの表示
    ShowDotFiles  on
    Linux の隠しファイル (ドットから始まるファイル名) を表示するかどうか。 方針によっては off でもいいかな。

     
  17. ウェルカムメッセージ
    DisplayLogin   .htftpd

     
  18. セキュリティ対策
    DirFakeUser on invisibleUser
    DirFakeGroup on invisibleGroup
    PersistentPasswd off
    RequireValidShell off

     
  19. ディレクトリを隠す
    <Directory /bin>
       HideUser root
    </Directory>
    <Directory /boot>
       HideUser root
    </Directory>
        : 省略
    /bin /boot /dev /etc /home /lib /lost+found /mnt /opt /proc /root /sbin /tmp /usr/ var あたりを隠すとよいかな。
     

通信ログを残す場合

ログを残す場合は、 /etc/proftpd.conf に以下の記述を追加。

LogFormat allinfo "%t : %u (%a [%h]) : [%s], %T, %m (%f)"
LogFormat write "%t : %u : %F (%a)"
LogFormat read "%t : %u : %F (%a)"
LogFormat auth "%t : %u (%a [%h])"

ExtendedLog /var/log/proftpd/all.log ALL allinfo
ExtendedLog /var/log/proftpd/write.log WRITE write
ExtendedLog /var/log/proftpd/read.log READ read
ExtendedLog /var/log/proftpd/auth.log AUTH auth

また、ログ用フォルダを作成しておく。

mkdir /var/log/proftpd

logrotateの設定

logrotateを使って、ログを1週間ごとにローテーションしておくとよいかも。
/var/log/proftpd/*.log{
  missingok
  notifempty
  postrotate
  /usr/bin/kill -HUP `cat /var/run/proftpd.pid 2>/dev/null` 2>/dev/null || true
  endscript
}
VineLinux3.1 初期設定では /var/log/xferlog にログはとられているようなので、デフォルト設定で使う場合は1行目を書き換えてもよいかもしれない。

TCP/Wrapper アクセス制御の設定

/etc/hosts.allow

in.proftpd: 192.168.1. hogehoge.jp
# WANに公開する場合
in.proftpd: ALL
アクセスを許可するホストを記入する。

/etc/hosts.deny

in.proftpd: ALL
クローズドなFTPサーバーの場合、hotsts.allowで許可したホスト以外のアクセスを禁止しておくと、セキュリティ的によいかも。

inetdで起動する設定

/etc/inetd.conf を書き換えて、inetd から起動するよう設定する。
ftp stream tcp nowait root /usr/sbin/tcpd in.proftpd
コメントアウトをはずして、FTP が inetd から起動される設定を有効にする。

inet サービス再起動

inetd.conf を書き換えた後、サービスを再起動してから有効になる。

service inet restart

ユーザーを作成する

FTP クライアントからアクセスするためには、linux 上のユーザーが必要。
Linux上に存在するユーザーが、ftpアクセス権を持つ。

useradd username
passwd username