proftpd+OpenSSLでFTPSサーバー構築

【環境】
CentOS5系
proftpd 1.3.3

proftpdとOpenSSLを利用して、FTP通信をSSL/TLSで暗号化するセキュアなFTPSサーバの構築。
構築にはSSL証明書が必要です(別途要準備)

1.Proftpdインストール

EPELリポジトリを追加

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

明示的に指定されない限り利用しないように無効化設定します。
全てenabled=1⇒enabled=0に変更します。

# sed -i -e "s/enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

無効化を確認

# cat /etc/yum.repos.d/epel.repo|grep enabled
enabled=0
enabled=0
enabled=0

インストールの実行
認証にLDAPを利用するのでproftpd-ldapも入れています。

# yum --enablerepo=epel install proftpd proftpd-ldap

2.設定ファイル編集

# vi /etc/proftpd.conf

以下、proftpd.confの設定例です。

ServerName "ProFTPD server"
ServerIdent on "SFTP Server ready."
ServerAdmin root@localhost
ServerType standalone
DefaultServer on
AccessGrantMsg "User %u logged in."
DeferWelcome off
AuthPAMConfig proftpd

#LDAP認証設定
AuthOrder mod_ldap.c
LoadModule mod_ldap.c
LoadModule mod_sftp.c
LDAPServer localhost:389
LDAPUseTLS off
LDAPAuthBinds on
LDAPDoAuth on "ou=Users,dc=example,dc=com" "(&(uid=%v)(objectClass=posixAccount))"
LDAPDoUIDLookups on "ou=Users,dc=example,dc=com"
LDAPDoGIDLookups on "ou=Groups,dc=example,dc=com"
DefaultRoot /home/ftp DomainUsers
#PASVポート指定
PassivePorts 4096 4127
ExtendedLog /var/log/proftpd/all.log AUTH,DIRS,READ,WRITE,INFO

#NATしている場合グローバルIPを設定
MasqueradeAddress XXX.XXX.XXX.XXX

IdentLookups off
UseReverseDNS off

#新規フォルダ、ファイル作成時のパーミッションマスク設定
Umask 002 002
ListOptions "-a"

AllowRetrieveRestart on
AllowStoreRestart on
MaxInstances 20
User nobody
Group nobody
UseSendfile no
ScoreboardFile /var/run/proftpd.score
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"

<Global>
AllowOverwrite yes
<Limit ALL SITE_CHMOD>
AllowAll
</Limit>
</Global>

<IfModule mod_facts.c>
FactsAdvertise off
</IfModule>

#SSL/TLS設定
<IfModule mod_tls.c>
TLSProtocol TLSv1
Port 21
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSRequired on
TLSRSACertificateFile /etc/httpd/conf.d/ssl/2014.crt
TLSRSACertificateKeyFile /etc/httpd/conf.d/ssl/2014.key
TLSVerifyClient off
TLSOptions NoSessionReuseRequired
</IfModule>

#デフォルトルートディレクトリへの書込削除関連を禁止
#Limit設定はサブディレクトリへ継承
<Directory /home/ftp>
<Limit MKD RMD DELE RNFR STOR WRITE>
DenyAll
</Limit>
</Directory>

#以下FTPディレクトリ設定例
#ディレクトリを削除・移動させないように権限を二段階で設定
<Directory /home/ftp/share>
<Limit ALL CWD MKD RNFR RNTO RETR STOR>
Order allow,deny
DenyAll
AllowUser user1,user2
</Limit>
</Directory>
<Directory /home/ftp/share>
<Limit DELE RMD>
AllowUser user1,user2
</Limit>
</Directory>
#※AllowUserにアクセス許可するユーザを指定

3.FTPディレクトリを作成

FTP DefaultRootディレクトリ作成

# mkdir -m 770 /home/ftp
# chgrp DomainUsers /home/ftp

各FTPディレクトリ作成

# mkdir -m 770 /home/ftp/share
# chgrp DomainUsers /home/ftp/share

4.サービスの開始・起動設定

# /etc/rc.d/init.d/proftpd start
# chkconfig proftpd on

後は接続確認をして完了です。
ファイアウォールの設定port21,4096:4127の開放も確認しておきます。