バーチャルFTPサーバの構築(Proftpd:CentOS編)


当然ですがCentOSでも、SuSE や RedHat と同様に ProFTPD で バーチャルホスト対応ができます。バーチャルホストに対応する方法は2つあり、一つはXinetdを使う方法であり、もう一つはVirutualHost ディレクティブを使用する方法です。
なお、FTPの場合はHTTPと異なりプロトル上ホスト名の伝達手段がないため、IPベースのバーチャルホストしか対応できないので注意願います。

しかくバーチャルホスト用 IPアドレスの付与方法

FTP では、前述のように IP ベースのバーチャルホストしか対応できません。従って、既存の IP アドレス以外に最低限もう一つ IP アドレスが必要になります。単純には、LAN カードを増設して付与すれば済みますが、トラヒックもたいした事はないですし、電気代も無駄なので Alias で既存のインタフェースにアドレスを追加する以下の方法を採りました。

  1. 「システム設定」 -> 「ネットワーク」で設定画面を開く。
  2. 「デバイス」で「eth0」を選択し、「新規」を押す。
  3. 「デバイスタイプ」の選択で「イーサネット接続」を選択して、「進む」を押す。
  4. イーサネットカードとして、eth0のデバイスが表示されているはずなので選択し、「進む」を押す。
  5. ネットワークの設定画面が出るので、「固定のIPアドレス設定」を選択し、アドレス:192.168.1.101、サブネット:255.255.255.0、デフォルトゲートウェイ:192.168.1.1を入力して、「進む」 -> 「適用」でeth0:1が作成される。(アドレス等は自分の環境に合わせること)
  6. 「ファイル」 -> 「保存」したら、etho:1を選択して「起動」する。

しかくバーチャルホストの設定(1)

バーチャルホストを動作させるのに、Xinetd をうまく使います。なお、この方法は、ProFTPD に限らず vsFTPD でも可能なはずです

この方法は、まず ProFTPD 用にバーチャルホスト単位に conf ファイルを作成します。次に、xinetd 用の起動ファイルもバーチャルホスト単位に作成し、その起動ファイル毎にそれぞれのサーバ用にバインドする IP アドレスを指定すると同時に、使用する conf ファイルを指定するという方法です。これにより、クライアントがアクセスしてきた IP アドレスに応じて、ProFTPD が異なるサーバとして動作できます。

だいやまーくProFTPDの設定

まずは バーチャルホスト対応の conf ファイルを作成します。基本的には、それぞれのホストをデフォルトサーバとして単一で動作させるイメージで作成するだけです。もちろんファイル名は異なります。
以下に、二つのホストの場合の設定イメージを示します。設定内容は、基本的な設定SSL/TLS化の設定を参考にしてできるはずです。DefaultServer は必ず on にしてください。そうしないと、Alias で付与したインタフェース(eth0:1)側は Xinetd がサーバを見つけられません。NIC が2枚あって物理的に存在する場合はこの限りではありません。

[サーバ1のファイル ( /etc/proftpd1.conf ) ]

# This is a first server configuration file

ServerName "ftp.aconus.com FTP Server"
Servertype inetd
DefaultServer on
Port 21
UseReverseDNS off
MaxInstances 30
User nobody
Group nobody
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])"
Umask 022
AuthPAMConfig ftp
TimesGMT off
IdentLookups off

MasqueradeAddress aconusftp.aconus.com
PassivePorts 5000 5029
DefaultRoot ~/public_html users,!wheel
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
<Directory />
AllowOverwrite on
</Directory>
<Limit LOGIN>
DenyGroup !users
</Limit>
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
TLSRequired off
TLSRSACertificateFile /usr/local/certs/server0.crt
TLSRSACertificateKeyFile /usr/local/certs/server0.key
TLSVerifyClient off
</IfModule>

# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>
User ftp
Group ftp
UserAlias anonymous ftp
MaxClients 20
DisplayLogin welcome.msg
DisplayFirstChdir .message
<Limit LOGIN>
AllowAll
</Limit>
<Directory *>
<Limit WRITE>
Order allow, deny
Allow from 127.0.0.1, 192.168.1.0/24
Deny from all
</Limit>
</Directory>
</Anonymous>


[サーバ2のファイル ( /etc/proftpd2.conf ) ]

# This is a second server configuration file

ServerName "ftp.example.com FTP server"
Servertype inetd
DefaultServer on
Port 21
UseReverseDNS off
MaxInstances 30
User nobody
Group nobody
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])"
Umask 022
AuthPAMConfig ftp
TimesGMT off
IdentLookups off

MasqueradeAddress 111.222.111.222
PassivePorts 5000 5029
DefaultRoot /srv/ftp/exsample
<Directory /srv/ftp/exsample>
AllowOverwrite on
</Directory>
<Limit LOGIN>
DenyGroup !example
</Limit>
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/example-tls.log
TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
TLSRequired off
TLSRSACertificateFile /usr/local/certs/server1.crt
TLSRSACertificateKeyFile /usr/local/certs/server1.key
TLSVerifyClient off
</IfModule>
ExtendedLog /var/log/proftpd/example-all.log ALL allinfo
ExtendedLog /var/log/proftpd/example-write.log WRITE write
ExtendedLog /var/log/proftpd/example-read.log READ read
ExtendedLog /var/log/proftpd/example-auth.log AUTH auth


前述のとおり、基本的には、基本的な設定SSL/TLS化の設定を参考にして、ホスト固有の設定をしていくだけなので、ここでは、バーチャルホスト対応のポイントだけしまします

だいやまーくXinetdの設定

続いて、xinetd 用の起動ファイルをバーチャルホスト単位に作成します。/etc/xinetd.d 配下に proftpd という起動ファイルがインストールされているはずですので、それをベースにそれぞれのサーバ用の起動ファイルを作成します。(赤字:追加) proftpd ファイルの削除を忘れずに。

[サーバ1のファイル ( /etc/xinetd.d/proftpd1 ) ]

# default: on
# description: The ProFTPD FTP server
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/proftpd
server_args = -c /etc/proftpd1.conf
bind = 192.168.1.100
log_on_failure += USERID
disable = no
}


[サーバ2のファイル ( /etc/xinetd.d/proftpd2 ) ]

# default: on
# description: The ProFTPD FTP server
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/proftpd
server_args = -c /etc/proftpd2.conf
bind = 192.168.1.101
log_on_failure += USERID
disable = no
}


赤字のパラメータを追加しますが、その概要を以下に示します。
設定が完了したら、Xinetd を再起動すれば、192.168.1.100でアクセスすれば proftpd1.conf の内容で、192.168.1.101でアクセスすれば proftpd2.conf の内容で ProFTPD が動作してくれます。

しかくバーチャルホストの設定(2)

CentOS 環境下で、VirutualHost ディレクティブを使用してバーチャルホストを動作させる方法を示します。基本的には RedHat の場合と同様ですが、ディレクティブを1つ追加するだけでうまく動作してくれます。

だいやまーくProFTPDの設定

まずは VirutualHost ディレクティブを使用したバーチャルホスト対応の conf ファイルをこちらを参考に作成します。追加するディレクティブは下記の緑字で示した「DefaultAddress」で、アドレスはダミーなので 「0.0.0.0」 で問題ありません。

# This is a basic ProFTPD configuration file

ServerName "ProFTPD"
Servertype inetd
DefaultServer on
DefaultAddress 0.0.0.0
Port 21
UseReverseDNS off
MaxInstances 30
User nobody
Group nobody
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])"
<Global>
Umask 022
AuthPAMAuthoritative On
AuthPAMConfig ftp
TimesGMT off
IdentLookups off
</Global>

# First virtual server
<VirtualHost 192.168.1.100>
ServerName "ftp.aconus.com FTP Server"
MasqueradeAddress aconusftp.aconus.com
PassivePorts 5000 5029
DefaultRoot ~/public_html users,!wheel
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
<Directory />
AllowOverwrite on
</Directory>
<Limit LOGIN>
DenyGroup !users
</Limit>
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
TLSRequired off
TLSRSACertificateFile /usr/local/certs/server0.crt
TLSRSACertificateKeyFile /usr/local/certs/server0.key
TLSVerifyClient off
</IfModule>

# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>
User ftp
Group ftp
UserAlias anonymous ftp
MaxClients 20
DisplayLogin welcome.msg
DisplayFirstChdir .message
<Limit LOGIN>
AllowAll
</Limit>
<Directory *>
<Limit WRITE>
Order allow, deny
Allow from 127.0.0.1, 192.168.0.0/23
Deny from all
</Limit>
</Directory>
</Anonymous>
</VirtualHost>

# Another virtual server
<VirtualHost 192.168.1.101>
ServerName "ftp.example.com FTP server"
MasqueradeAddress 111.222.111.222
PassivePorts 5000 5029
DefaultRoot /var/www
<Directory /var/www>
AllowOverwrite on
</Directory>
<Limit LOGIN>
DenyGroup !example
</Limit>
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/example-tls.log
TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
TLSRequired off
TLSRSACertificateFile /usr/local/certs/server1.crt
TLSRSACertificateKeyFile /usr/local/certs/server1.key
TLSVerifyClient off
</IfModule>
ExtendedLog /var/log/proftpd/example-all.log ALL allinfo
ExtendedLog /var/log/proftpd/example-write.log WRITE write
ExtendedLog /var/log/proftpd/example-read.log READ read
ExtendedLog /var/log/proftpd/example-auth.log AUTH auth
</VirtualHost>


だいやまーくXinetdの設定

xinetd 用の起動ファイルは、デフォルトのままで問題ありません。

# default: on
# description: The ProFTPD FTP server
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/proftpd
log_on_failure += USERID
disable = no
}



Top Pageへ

AltStyle によって変換されたページ (->オリジナル) /