自分だけがサーバーのファイルをいじるだけなら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モードでもデータ転送ができるようになりました。
悩みの種一つ解消。











最近のコメント