CentOS で vsftpd を使ったFTPサーバを構築してます。
今までは CTU(NTT西日本光プレミアムの加入者網終端装置。つまりはルータ) の 21 ポートを制御用コネクションと開放し、直下のLANにあるサーバにマッピングしてました。
もちろんサーバ機はプライベートアドレスしか持っておらず、CTUの静的アドレス変換機能を使って外部からFTP接続を仕様としているので、当然 PASV モードでの運用となります。
で、/etc/vsftpd/vsftpd.conf には下記のように PASV に関する設定を追加して運用してました。
pasv_promiscuous=YES パッシブモードを利用にする
pasv_min_port=4000 ←↓パッシブモード利用時のポート範囲
で、今回(Linux)CentOSでちょっとトリッキーなNATルータを構築してみたで書いた他所サーバ機(192.168.1.2)にもFTPサーバの機能を持たせて、インターネット側からアクセスできるようにする必要が生じました。
上記にあるような設定にしたんですが、どうも外部から接続できません。(制御用ポートは21がすでに使ってるのでかなり別のポート番号を使ってます。)
ログインはできてるっぽいんですが、ファイルリスト取得中にタイムアウトしてしまいます。
この時ffftpのログを見てると、アクセスしようとしているIPがローカルのIPアドレス(ここのネットワークAにあたる部分)を示してました。
で、調べてみると PASV で待ち受けているアドレスがなぜかローカルのアドレスを送ってるっぽいですね。
上記のCTU直LAN(ネットワークA)上のFTPサーバは21ポートを制御用として使っているため、気が利く CTU が PASV 待ち受けアドレスをグローバルアドレスに変換してくれているようです。
(多分21ポートならという条件で勝手にアドレス変換してるんでしょうね。。)
解決策としては、PASV 待ち受けアドレスとしてグローバルアドレスをクライアントに送ってあげなければなりません。
その機能が vsftpd にも入っているようです。
vsftpd.conf に下記のように設定すればいいようですね。
pasv_promiscuous=YES パッシブモードを利用にする
pasv_min_port=4000 ←↓パッシブモード利用時のポート範囲
pasv_max_port=4029 ※firewall、ルーターのポートマッピングにあわせる
pasv_addr_resolve=yes pasv_addressで名前解決を有効にするかどうか。yesならpasv_addressでDDNS名が使える。
pasv_address=jehu.example.com ルータ側のアドレスもしくは、DDNS名
pasv_addr_resolveが有効だと、pasv_address の設定でダイナミックDNS名を指定してるとIPに直してくれるようです。
pasv_addressにグローバルIPを設定します。ただ、個人サーバは固定IP持ってない時は pasv_addr_resolve を有効にすることでDDNS名も指定できるようですね。
FTPの仕様と PASV に関する話は、パソコンおやじ:FTPサーバの公開で非常によくまとめられています。FTPサーバ構築当初は非常にお世話になったページです。
参考までに vsftpd でFTPサーバ構築時によく指定してる設定もあげときます。
(設定ファイル /etc/vsftpd/vsftpd.conf)
anonymous_enable=NO anonymousユーザ拒否
chroot_list_enable=YES アクセスディレクトリの制限を有効に。
chroot_list_file=/etc/vsftpd/chroot_list ホームディレクトリ以外へのアクセス拒否させるユーザファイル指定
↑のファイルにアクセス拒否をするユーザーを1行ずつ書く。
local_umask=002 パーミッションマスク。775のパーミッションになる
002だと所有者、所有グループは77,その他は5になる
use_localtime=YES JST使用のため追加
■ユーザーのアクセス制限
・ファイル:/etc/vsftpd/ftpusers
ここに操作させたくないユーザ名を記述します。
passwordの認証時に不正なログインとして失敗に終わります。
・ファイル:/etc/vsftpd.user_list
vsftpd.conf に userlist_deny=NO の記述がない、又は userlist_deny=YES と指定した場合は拒否リスト。(デフォルト)
vsftpd.conf に userlist_deny=NO があると接続許可リスト。
vsftpdの設定の詳細は、パソコンおやじ:FTPサーバ(vsftpd)の構築(RedHat系編)が参考になります。
参考: