FTPサーバー構築(ProFTPD)

最終更新日: 2009.12.29

<<トップページ <<新着情報 <<質問掲示板 <<アンケート <<サイト内検索 <<管理人へメール <<Fedoraで自宅サーバー構築

■概要

Webサーバーへのファイル転送用にFTPサーバーを構築する。
なお、ユーザ名、パスワード、CGI等に書かれたパスワード情報等の盗聴による不正入手対策として、TLSによる暗号化通信を行えるようにする。
また、管理者ユーザ以外は自身のWebページ格納ディレクトリである~/public_htmlより上層へはアクセスできないようにする。


■ProFTPDインストール

RPMforgeリポジトリ導入(RPMforge)を参照してRPMforgeリポジトリを導入する

[root@centos ~]# yum -y install proftpd ← proftpdインストール

■ProFTPD設定

(1)ProFTPD設定
[root@centos ~]# vi /etc/proftpd.conf ← proftpd設定ファイル編集
ServerType                      standalone
↓
#ServerType                      standalone ← コメントアウト(スタンドアロンモードで起動しない)
#ServerType                     inetd
↓
ServerType                     inetd ← コメント解除(xinetd経由で起動する)

# Use this to excude users from the chroot
DefaultRoot                     ~ !adm
↓
DefaultRoot                     ~/public_html !wheel ← ルートディレクトリを~/public_htmlとする
※ただしwheelグループ所属ユーザは除く

# TLS
# Explained at http://www.castaglia.org/proftpd/modules/mod_tls.html
#TLSEngine                      on
#TLSRequired                    on
#TLSRSACertificateFile          /usr/share/ssl/certs/proftpd.pem
#TLSRSACertificateKeyFile       /usr/share/ssl/certs/proftpd.pem
#TLSCipherSuite                 ALL:!ADH:!DES
#TLSOptions                     NoCertRequest
#TLSVerifyClient                off
##TLSRenegotiate                ctrl 3600 data 512000 required off timeout 300
#TLSLog                         /var/log/proftpd/tls.log
−−追加(ここから)−−
TLSEngine                      on
TLSRequired                    on ← TLS接続のみ許可※offにすると通常接続も許可
TLSRSACertificateFile          /usr/share/ssl/certs/proftpd.pem
TLSRSACertificateKeyFile       /usr/share/ssl/certs/proftpd.pem
TLSCipherSuite                 ALL:!ADH:!DES
TLSOptions                     NoCertRequest
TLSVerifyClient                off
#TLSRenegotiate                ctrl 3600 data 512000 required off timeout 300
TLSLog                         /var/log/proftpd/tls.log
−−追加(ここまで)−−

ExtendedLog          /var/log/proftpd/access.log WRITE,READ default ← 最終行へ追加(アクセスログを記録する)
ExtendedLog          /var/log/proftpd/auth.log AUTH auth ← 最終行へ追加(認証ログを記録する)
TimesGMT off ← 最終行へ追加(ファイルのタイムスタンプを日本時間にする)
MasqueradeAddress centossrvforftp.dip.jp ← 最終行へ追加(サーバー名を指定)※
PassivePorts 60000 60030 ← 最終行へ追加(PASVモード用ポートとして1024以上の任意のポートを指定)
※MasqueradeAddressには、サーバーのグローバルIPアドレスか、サーバーのグローバルIPアドレスか牽けるサーバー名を指定する必要があるため、固定IPアドレス環境の場合は、IPアドレスをMasqueradeAddressに指定すればよいが、非固定IPアドレス環境の場合は、グローバルIPアドレスが牽けるサーバー名を指定する。なお、内部向けDNSサーバーを導入して内部からの名前解決時にプライベートIPアドレスに変換してしまっている場合は、新たにドメインを取得し、内部向けDNSに設定しないようにして、取得したドメイン名をMasqueradeAddressに指定する。

(2)ルートディレクトリが~/public_htmlのユーザのタイムスタンプを日本時間にする
【新規ユーザ対処】
[root@centos ~]# mkdir -p /etc/skel/public_html/etc ← ユーザ登録時に~/public_htmlへetcディレクトリが作成されるようにする

[root@centos ~]# cp /etc/localtime /etc/skel/public_html/etc
 ← ユーザ登録時に/etc/localtimeが~/public_html/etcへコピーされるようにする

【既存ユーザ対処】
[root@centos ~]# vi localtimeset ← localtimeセットスクリプト作成
#!/bin/bash

WHEELGID=`grep wheel /etc/group|cut -d : -f 3`
for user in `ls /home`
do
    if [ -z "$(id -G $user > /dev/null 2>&1|grep $WHEELGID)" ] && \
       [ -d "/home/$user/public_html" ] && \
       [ ! -f "/home/$user/public_html/etc/localtime" ]; then
        mkdir -p /home/$user/public_html/etc
        cp /etc/localtime /home/$user/public_html/etc
        echo $user
    fi
done

[root@centos ~]# sh localtimeset ← localtimeセットスクリプト実行
user
・
・
・
user

[root@centos ~]# rm -f localtimeset ← localtimeセットスクリプト削除

(3)サーバー証明書作成
[root@centos ~]# cd /usr/share/ssl/certs ← ディレクトリ移動

[root@centos certs]# make proftpd.pem ← サーバー証明書作成
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 ; \
cat $PEM1 >  proftpd.pem ; \
echo ""    >> proftpd.pem ; \
cat $PEM2 >> proftpd.pem ; \
rm -f $PEM1 $PEM2
Generating a 1024 bit RSA private key
.....................................++++++
...............................++++++
writing new private key to '/tmp/openssl.O12534'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP ← 国名応答
State or Province Name (full name) [Berkshire]:Tokyo ← 都道府県名応答
Locality Name (eg, city) [Newbury]:Shinjuku ← 市区町村名応答
Organization Name (eg, company) [My Company Ltd]:centossrv.com ← サイト名応答(なんでもいい)
Organizational Unit Name (eg, section) []: ← 空ENTER
Common Name (eg, your name or your server's hostname) []:ftp.centossrv.com ← FTPサーバー名応答※
Email Address []:root@centossrv.com ← 管理者メールアドレス応答

[root@centos certs]# cd ← ホームディレクトリへ戻る
※Common Nameに応答するFTPサーバー名は、FTPクライアントで設定するサーバー名を応答すること

■ProFTPD起動

(1)ProFTPD起動
[root@centos ~]# vi /etc/xinetd.d/xproftpd ← proftpd起動スクリプト(xinetd用)編集
        log_on_success          += DURATION USERID
    ↓
        log_on_success          += HOST PID ← 変更(ログインに約30秒かかる対処)
        log_on_failure          += USERID
    ↓
        log_on_failure          += HOST ← 変更(ログインに約30秒かかる対処)
        disable                 = yes
    ↓
        disable                 = no ← proftpdのxinetd経由起動の有効化

[root@centos ~]# /etc/rc.d/init.d/xinetd restart ← xinetd再起動
xinetd を停止中:                                           [  OK  ]
xinetd を起動中:                                           [  OK  ]

(2)ポート21番、60000番〜60030番のOPEN
ルーター側の設定でポート21番、60000番〜60030番をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

ポートチェック【外部からポート開放確認】で「host名」にサーバー名(例:centossrv.com)、「port番号」に21と入力して「ポートチェック」ボタン押下し、「ホスト=centossrv.com ポート=21 にアクセスできました。」と表示されることを確認。

※PASVモード接続用ポートは実際にFTPクライアントで接続していないと確認できない

■SSL対応FTPクライアント導入

WindowsからFTPサーバーへ接続(FileZilla)参照
※FileZillaはSFTP接続にも対応しており、SFTPで接続するとFTPサーバーのchroot機能が働かない=ログインユーザー自身のホームディレクトリ以外も参照できてしまうため、SSHサーバーのchroot設定も行なっておくこと

■アクセス制限

FTPサーバーへアクセスできるホストを制限する。
[root@centos ~]# echo "in.proftpd:127.0.0.1" >> /etc/hosts.allow ← サーバー自身からのFTPアクセスを許可

[root@centos ~]# echo "in.proftpd: 192.168.1." >> /etc/hosts.allow ← 内部(例:192.168.1.XXXからのFTPアクセスを許可)

[root@centos ~]# echo "in.proftpd: .ppp.asahi-net.or.jp"  >> /etc/hosts.allow
 ← 外部(例:xxx.ppp.asahi-net.or.jpからのFTPアクセスを許可)

[root@centos ~]# echo "in.proftpd: ALL" >> /etc/hosts.deny ← FTPへの全てのアクセスを禁止
※上記では、内部(例:192.168.1.XXX)と外部(例:xxx.ppp.asahi-net.or.jp)からのみ、FTPへのアクセスを許可している



▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2010 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします