ProFTPDの導入

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<code>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
 
&lt;ifmodule mod_tls.c&gt;
TLSEngine off
&lt;/ifmodule&gt;
 
&lt;ifmodule mod_quota.c&gt;
QuotaEngine on
&lt;/ifmodule&gt;
 
&lt;ifmodule mod_ratio.c&gt;
Ratios on
&lt;/ifmodule&gt;
 
&lt;ifmodule mod_delay.c&gt;
DelayEngine on
&lt;/ifmodule&gt;
 
&lt;ifmodule mod_ctrls.c&gt;
ControlsEngine        on
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
&lt;/ifmodule&gt;
 
&lt;ifmodule mod_ctrls_admin.c&gt;
AdminControlsEngine on
&lt;/ifmodule&gt;
 
&lt;limit LOGIN&gt;
    Order allow, deny
    Allow from all
&lt;/limit&gt;
 
AuthOrder mod_auth_file.c
 
AuthUserFile /etc/proftpd/ftpd.passwd
AuthGroupFile /etc/proftpd/ftpd.group</code>

/etc/xinetd.d/proftpd

1
2
3
4
5
6
7
8
9
<code>service ftp
{
        disable         = no
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        server          = /usr/sbin/in.proftpd
}</code>

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

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

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


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

1
AllowForeignAddress on

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

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

1
2
<code>ip_conntrack_ftp
ip_nat_ftp</code>

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

コメントを残す

メールアドレスが公開されることはありません。

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen

*