ProFTPD 1.3.2rc4

(最終更新日時:2011-01-17 05:50:34)
オープンソースのFTPデーモンである ProFTPD をFTPサーバーとしてインストールします。

ダウンロード

Stable: 1.3.3d bz2proftpd-1.3.3d.tar.bz2

インストール

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

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

$ su                                                          ここからはrootで行います
# #---(checkinstallでRPMファイルを作成し、インストールします)---
# /usr/sbin/checkinstall --exclude=/selinux -R --fstrans=no -y
# rpm -Uhv /usr/src/redhat/RPMS/i386/proftpd-1.3.2rc4-1.i386.rpm

# #---(checkinstallを使用されない場合は、make install でインストールします)---
# 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へ追加

ログファイルを logrotate の対象にするため、logrotate の設定ファイルを作成します。
vi /etc/logrotate.d/proftpd

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

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