WordPressの管理画面をLeopard風に 阪急西院駅のゴミ箱使用中止
6 月 19

自分だけがサーバーのファイルをいじるだけならSSH、SFTPやnetatalkのみで十分だったのですが、後輩たちがクラブのページを作成する場所をつくるにあたってFTPを導入しようと思ったのです。が、なかなかPassiveモードが利用できず、ルーター越えでの接続ができませんでした。
で、ProFTPDの再インストールからはじめ、やっと今回成功したのでメモしておきます。
構成としてはxinetd経由で起動し、ファイルによる仮想ユーザーということで。
(仮想ユーザーについてはまた今度…)

内容は2点です。
1.ProFTPDとxinetdの設定ファイル
2.iptablesのためにモジュールの読み込み


結局最後行き着いたのは以下の設定ファイルの状態。(一部セキュリティのため改変)
/etc/proftpd/proftpd.conf

Include /etc/proftpd/modules.conf

UseIPv6				off

ServerName			"chibiegg FTP Server"
ServerType			inetd
DeferWelcome			off

MultilineRFC2228		on
DefaultServer			on
ShowSymlinks			on

TimeoutNoTransfer		600
TimeoutStalled			600
TimeoutIdle			1200

DisplayLogin                    welcome.msg
DisplayFirstChdir               .message
ListOptions                	"-al"

DenyFilter			\*.*/

UseReverseDNS			off

Port				21

AllowForeignAddress on
DefaultRoot ~

PassivePorts                    23000 25000

MasqueradeAddress		****.******.net

MaxInstances			30

User				******
Group				******
Umask				022  022
AllowOverwrite			on

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

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])"

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

<ifmodule mod_tls.c>
TLSEngine off
</ifmodule>

<ifmodule mod_quota.c>
QuotaEngine on
</ifmodule>

<ifmodule mod_ratio.c>
Ratios on
</ifmodule>

<ifmodule mod_delay.c>
DelayEngine on
</ifmodule>

<ifmodule mod_ctrls.c>
ControlsEngine        on
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</ifmodule>

<ifmodule mod_ctrls_admin.c>
AdminControlsEngine on
</ifmodule>

<limit LOGIN>
	Order allow, deny
	Allow from all
</limit>

AuthOrder mod_auth_file.c

AuthUserFile /etc/proftpd/ftpd.passwd
AuthGroupFile /etc/proftpd/ftpd.group

/etc/xinetd.d/proftpd

service ftp
{
        disable     	= no
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        server          = /usr/sbin/in.proftpd
}

実際ローカルからPassiveモードを利用しない場合は簡単に接続できていたのだが、どうしてもPassiveモードでは接続できなかった。(もちろんログインはできるが一覧の取得などができない。)これではマスカレードを使ったルーター越えができない。

結果として原因は2つありました。
まず一つはProFTPDの設定の問題。(上の設定ファイルは修正後)
ProFTPDには関係の無いIPアドレスからのPassiveモード用ポートへのアクセスは拒否する機能が付いているのですがこれが悪さをしていました。
Passiveモードタイムアウト後のログを見るとこんなエラーがありました。

SECURITY VIOLATION: Passive connection from ***.***.***.*** rejected.


ということでセキュリティー的には避けたいところですが、この機能を無効にしました。
「/etc/proftpd/proftpd.conf」に以下の一行を追加。

AllowForeignAddress on

(こちらのサイトに記載されていました。ありがとうございます。)

もうひとつはiptablesです。FTPを通すためにはポートを開けるだけでなく「ip_conntrack_ftp」と「ip_nat_ftp」の2つのモジュールを読み込む必要があるらしいのです。
ということで「/etc/modules」ファイルに以下の2行を追記しました。

ip_conntrack_ftp
ip_nat_ftp

これでサーバーを再起動するとPassiveモードでもデータ転送ができるようになりました。
悩みの種一つ解消。

トラックバックURL : http://blog.chibiegg.net/2008/06/19_23_150.htm/trackback

コメントお待ちしております