FTPサーバー構築(ProFTPD)

最終更新日: 2007.12.10

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

■概要

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


■ProFTPDインストール

[root@centos ~]# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
 ← rpmforgeリポジトリダウンロード※CentOS5の場合

[root@centos ~]# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
 ← rpmforgeリポジトリインストール※CentOS5の場合

[root@centos ~]# rm -f rpmforge-release-0.3.6-1.el5.rf.i386.rpm
 ← rpmforgeリポジトリ削除※CentOS5の場合

[root@centos ~]# rpm -Uvh http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el4/en/i386/RPMS.dries/rpmforge-release-0.2-2.2.el4.rf.i386.rpm
 ← rpmforgeリポジトリインストール※CentOS4の場合

[root@centos ~]# sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo
 ← 基本リポジトリとのパッケージ競合を避けるため、デフォルトは無効にしておく

[root@centos ~]# yum -y --enablerepo=rpmforge 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  ]

[root@centos ~]# chkconfig xproftpd on ← xproftpd自動起動設定

[root@centos ~]# chkconfig --list xproftpd ← xproftpd自動起動設定確認
xproftpd        on

(2)ポート21番、60000番〜60030番のOPEN
ルーター側の設定でポート21番、60000番〜60030番をOPENする。

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

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

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

WindowsからFTPサーバーへ接続(SmartFTP)参照

■アクセス制限

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-2008 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします