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