ProFTPD 1.3.2rc2

(最終更新日時:2008-12-28 20:59:32)
オープンソースのFTPデーモンである ProFTPD をFTPサーバーとしてインストールします。

ダウンロード

Candidate: 1.3.2rc2 bz2proftpd-1.3.2rc2.tar.bz2

インストール

/usr/local/srcディレクトリでアーカイブを展開し、コンパイルおよびインストールを行います。
$ cd /usr/local/src
$ tar xjvf ダウンロード先/proftpd-1.3.2rc1.tar.bz2

$ cd proftpd-1.3.2rc1
$ ./configure \
>  --with-modules=mod_tls                                SSL/TLSを有効にします
$ make

$ su                                                     ここからはrootで行います
# make install

FTPサーバディレクトリ構成

インストール後のFTPサーバディレクトリは以下になります。(抜粋)
赤字のディレクトリは作成してください。()内はパーミッションです。
/var/proftpd/                                            … FTPサーバトップディレクトリetc/ (755)                                          … 認証用ファイルディレクトリssl/ (755)                                          … SSL用ファイルディレクトリ

/var/log/                                                … ログディレクトリproftpd/ (755)                                      … FTPサーバログディレクトリ

設定

ProFTPDの設定ファイルを編集します。
# vi /usr/local/etc/proftpd.conf

       :
ServerName                      "System House ACT FTP Server"
                                # FTP Server接続時に表示されるServer名です
ServerType                      inetd
                                # xinetdによる起動にします
       :
# Don't use IPv6 support by default.
#UseIPv6                                off
                                # IPv6未サポートでインストールしていますので、コメントアウトします
                                # IPv6サポートは、インストール時に --enable-ipv6 オプションが必要です
       :
Group                           nobody
                                # 認証されるまでの接続groupです
       :
#DefaultRoot ~
DefaultRoot                     ~
                                # ホームディレクトリ以外へのアクセスを禁止します
       :
# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
  DenyAll
  AllowGroup                    サイト内ファイルの属性変更を許可するグループ
</Limit>

# 認証は専用グループ/ユーザーファイルを作成して行います
AuthUserFile                    /var/proftpd/etc/ftpd.passwd
AuthGroupFile                   /var/proftpd/etc/ftpd.group
AuthOrder                       mod_auth_file.c

# リモートユーザ名の確認にidentプロトコルを使用しません
IdentLookups                    off

# 時刻表示にローカルタイムを使用します
TimesGMT                        off
                        
# リストに全ファイルを表示します
ListOptions                     -a
                        
# カスタムフォーマットでログ出力を行います
LogFormat               auth    "[%{%d/%b/%Y %T}t] %u %a[%P] - %h"
LogFormat               info    "[%{%d/%b/%Y %T}t] %u %a[%P] \"%r\" %s"
LogFormat               read    "[%{%d/%b/%Y %T}t] %u %a[%P] %f -> %b"
LogFormat               write   "[%{%d/%b/%Y %T}t] %u %a[%P] %f <- %b"
ExtendedLog                     /var/log/proftpd/access.log AUTH  auth
ExtendedLog                     /var/log/proftpd/access.log INFO  info
ExtendedLog                     /var/log/proftpd/access.log DIRS  info
ExtendedLog                     /var/log/proftpd/access.log MISC  info
ExtendedLog                     /var/log/proftpd/access.log READ  read
ExtendedLog                     /var/log/proftpd/access.log WRITE write

# "Timing attack"対策を有効にします
<IfModule mod_delay.c>
  DelayEngine                   on
</IfModule>
DelayTable                      /var/proftpd/proftpd.delay

# PASV接続用のポートを制限します
PassivePorts                    12200 12229

# アクセス制限を行います
<Limit LOGIN>   
  DenyALL
  AllowGroup                    ログインを許可するグループ ftpgroup
</Limit>
       :
<Anonymous ~ftp>                # AnonymousFTPの運用を行わない場合は
       :                        # 全項目コメントアウトするか削除します
</Anonymous>

認証用のグループとユーザを作成します。
# mkdir -p /var/proftpd/etc
# cd /usr/local/src/proftpd-1.3.2rc2/contrib
# ./ftpasswd \
>   --group \                                                グループを作成します
>   --file=/var/proftpd/etc/ftpd.group \                     グループファイルを指定します
>   --name=ftpgroup \                                        作成するグループ名を指定します
>   --gid=2000                                               作成するグループのgidを指定します

# ./ftpasswd \
>   --passwd \                                               ユーザを作成します
>   --file=/var/proftpd/etc/ftpd.passwd \                    ユーザファイルを指定します
>   --name=ftpuser \                                         作成するユーザ名を指定します
>   --uid=2000 \                                             作成するユーザのuidを指定します
>   --gid=2000 \                                             作成するユーザのgidを指定します
>   --home=/home/www/vhosts/system-act.com/www/ftpuser \     作成するユーザのホームディレクトリを指定します
>   --shell=/sbin/nologin                                    FTP専用ユーザで作成します

SSL/TLS設定

OpenSSL運用 を参考にサーバー証明書とサーバー秘密鍵を生成し、FTPサーバーに設定します。
# mkdir /home/ssl/server/ftp                                 サーバー証明書の生成・保管場所を作成します
# cd    /home/ssl/server/ftp

     :
(サーバー証明書とサーバー秘密鍵を生成)
     :

# mkdir     /var/proftpd/ssl                                 サーバー証明書をサーバーに設定します
# chmod 755 /var/proftpd/ssl
# cp /home/ssl/server/ftp/server.{crt,key} /var/proftpd/ssl/
ProFTPDの設定ファイルにSSL/TLS設定を追加します。
# vi /usr/local/etc/proftpd.conf

       :
# SSL/TLS設定を行います
<IfModule mod_tls.c>
  TLSEngine                     on
  TLSLog                        /var/log/proftpd/tls.log
  TLSProtocol                   SSLv23

  # SSL/TLS接続を強制しません
  TLSRequired                   off

  # サーバー証明書とサーバー秘密鍵を指定します
  TLSRSACertificateFile         /var/proftpd/ssl/server.crt
  TLSRSACertificateKeyFile      /var/proftpd/ssl/server.key

  # クライアント証明書を必要としません
  TLSVerifyClient               off
</IfModule>

起動

xinetdの設定ファイルを作成します。
# vi /etc/xinetd.d/ftp

# default: on
# description: The ProFTPD FTP server serves FTP connections. It uses \
# normal, unencrypted usernames and passwords for authentication.
service ftp
{
  disable         = no
  socket_type     = stream
  wait            = no
  user            = root
  server          = /usr/local/sbin/in.proftpd
  log_on_success += HOST PID
  log_on_failure += HOST
}
    
iptablesの設定ファイルを編集し、外部からFTPが使用できるようにします。
# vi /etc/sysconfig/iptables-config

       :
IPTABLES_MODULES="ip_conntrack_ftp"
       :

# service iptables restart
ファイアーウォール iptables の設定を追加します。
# vi /usr/local/sbin/firewall.sh
# --- (INPUTチェイン) ---# FTP接続を許可
iptables -A INPUT -i $EXTIF -p tcp --dport 21 -j CHK-SYNFLOOD# --- (OUTPUTチェイン) ---# FTP接続を許可
iptables -A OUTPUT -o $EXTIF -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ACCEPT
# firewall.sh                                            設定を反映させます
xinetdを再起動します。
# service xinetd restart

logrotate

設定ファイルを作成します。
vi /etc/logrotate.d/proftpd

/var/log/proftpd/access.log {
  missingok
}

a System House to build an Accounting system by the Computer Technology