FreeBSD 8.4 RELEASE - FTP - IP アドレス制限

クラウディア 
1. 概要
2. tcpserver のインストール
3. 許可アドレスの記述
4. ブートスクリプトの編集

1. 概要

 「rc.conf の編集」のみで起動した場合、どこからでも FTP サーバにアクセスできてしまいます。  FTP サーバを inetd 経由で起動する場合は、/etc/hosts.allow を編集することでアクセスできる IP アドレスの制限をかけられますが、inetd 経由で起動する場合は、/etc/hosts.allow では IP アドレスの制限はかけられません。  ここでは tcpsever というツールを使用して、IP アドレス制限をかける方法を紹介します。

2. tcpserver のインストール

 tcpsever は ucspi-tcp という ports をインストールします。  tcpsever のインストールが終わったら、FTP 専用で動作させて他のソフトウェアと名前がユニークになるようにするために、シンボリックリンクを作成しておきます。

> ln -s /usr/local/bin/tcpserver /usr/local/bin/tcpserver_ftp

3. 許可アドレスの記述

 FTP での接続は基本を拒否にして、許可アドレスを列挙する形式にします。  /etc/ ディレクトリに、/etc/tcp.ftp というファイルを作って次のように編集します。あなたのグローバルネットワークアドレスを仮に xxx.yyy.zzz.0/29 とします。

127.:allow
xxx.yyy.zzz.0-8:allow
#
:deny
 127. は、ループバックアドレス(127.0.0.1)です。  xxx.yyy.zzz.0-8 は許可する IP アドレスの記述です。  # ではじまる行は、コメント行です。  最後の :deny はデフォルトルールで、allow で記述したもの以外は拒否する仕組みです。  /etc/tcp.ftp の編集が終わったら、次のコマンドでデータベースを作成します。

> tcprules /etc/tcp.ftp.cdb /etc/tcp.ftp.tmp < /etc/tcp.ftp

4. ブートスクリプトの編集

 tcpsever 経由で FTP サーバを起動するには、ブートスクリプトを編集しなければなりません。  ブートスクリプトは /etc/rc.d/ftpd です。  デフォルトで以下のように記述されています。

#!/bin/sh

	・・・

. /etc/rc.subr

name="ftpd"
rcvar=`set_rcvar`
command="/usr/libexec/${name}"
pidfile="/var/run/${name}.pid"
start_precmd=ftpd_prestart

ftpd_prestart()
{
    rc_flags="-D ${rc_flags}"
    return 0
}

load_rc_config $name
run_rc_command "$1"
 これを以下のように編集します。編集を行う前に /etc/rc.d/ftpd stop で忘れずに FTP サーバを停止しておいてください。

#!/bin/sh

	・・・

. /etc/rc.subr

name="ftpd"
ftpd_enable=${ftpd_enable:-"NO"}
procname="/usr/local/bin/tcpserver_ftp"
start_cmd="ftpd_start"

ftpd_start()
{
    echo "Starting ${name}."
    /usr/local/bin/tcpserver_ftp -x /etc/tcp/tcp.ftp.cdb 0 \
                                ftp /usr/libexec/ftpd -ld 2>&1 &
}

load_rc_config $name
run_rc_command "$1"
 これで、/etc/rc.d/ftpd start で FTP サーバを起動すれば、IP アドレスの制限がかかります。