Top過去ログ目次掲示板

作成日:2005年12月21日 作成:おやじ
掲示板で過去に質問された内容です。

No.5465 FTPデータ転送コネクションに関して


No.5465 投稿時間:2005年12月21日(Wed) 14:58 投稿者名:KC URL:
タイトル:FTPデータ転送コネクションに関して

動的IP、ルータはAterm WD701CVで
OSはFC4、vsftpdでFTPサーバを立てています。

しかし、WAN側からの接続の際に以下のエラーが出ました。
(ログはFFFTPでのログ)

----------------------------------------
ホスト XXXXXXXXXXXXXX を探しています.
ホスト XXXXXXXXXXXXXX (xx.xxx.xxx.xx (21)) に接続しています.
接続しました.
220 FTP server
>USER xxxxx
331 Please specify the password.
>PASS [xxxxxx]
230 Login successful.
>XPWD
257 "/"
>TYPE A
200 Switching to ASCII mode.
>PORT 10,104,2,143,6,87
200 PORT command successful. Consider using PASV.
>NLST -alL
425 Failed to establish connection.
コマンドが受け付けられません.
ファイル一覧の取得を中止しました.
ファイル一覧の取得に失敗しました.
-----------------------------------------

ユーザ名とパスワード応答は返ってくるのですが、
ファイル一覧の取得ができませんでした。


上記の時点で、vsftpd.conf は以下のように設定していました。

-----------------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=60

ascii_upload_enable=YES
ascii_download_enable=YES

ftpd_banner=FTP server
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
use_localtime=YES
pam_service_name=vsftpd
userlist_enable=YES
listen=YES
tcp_wrappers=YES
xferlog_std_format=NO
log_ftp_protocol=YES
pasv_promiscuous=NO  ←PASVを無効にしていました。
-----------------------------------------




そこで、PASVを有効にすれば事象が変化するかと思い、
コンフィグに以下を追加・修正しました。

pasv_min_port=40000
pasv_max_port=40030
pasv_promiscuous=YES  ←有効に修正

また、ルータにて以下のポートマッピング設定を追加しました。
・変換対象プロトコル:TCP
・変換対象ポート:40000-40030
・宛先アドレス:FTPサーバのローカルIP(192.168.0.xx)


この状態に更新し、再度FFFTPでWAN側からPASVを有効にして
アクセスした際のログが以下になります。

----------------------------------------
230-230 Login successful.
230
>>CD F:\
>XPWD
257 "/"
>TYPE A
200 Switching to ASCII mode.
>PASV
227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,116)
ダウンロードのためにホスト xxx.xxx.xxx.xxx (60020) に接続しています.
接続しました.
>LIST
150 Here comes the directory listing.
226 Directory send OK.
ファイル一覧の取得は正常終了しました. (195 Bytes)
>CWD public_html
250 Directory successfully changed.
>XPWD
257 "/public_html"
>TYPE A
200 Switching to ASCII mode.
>PASV
227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,117)
ダウンロードのためにホスト xxx.xxx.xxx.xxx (60021) に接続しています.
接続しました.
>LIST
150 Here comes the directory listing.
226 Directory send OK.
ファイル一覧の取得は正常終了しました. (0 Bytes)
>CDUP
250 Directory successfully changed.
>XPWD
257 "/"
>CWD public_html
250 Directory successfully changed.
>XPWD
>CWD public_html
257 "/public_html"
>XPWD
550 Failed to change directory.
>PWD
>CWD public_html
257 "/public_html"
>PWD
257 "/public_html"
550 Failed to change directory.
>TYPE A
257 "/public_html"
>PASV
200 Switching to ASCII mode.
アドレスが取得できません.
ファイル一覧の取得を中止しました.
ファイル一覧の取得に失敗しました.
227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,119)
>PWD
257 "/public_html"
>TYPE A
200 Switching to ASCII mode.
>PASV
227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,120)
アップロードのためにホスト xxx.xxx.xxx.xxx (60024) に接続しています.
接続しました.
>STOR /public_html/index2.htm
150 Ok to send data.
226 File receive OK.
アップロードは正常終了しました. (1 Sec. 18 B/S).
>TYPE A
200 Switching to ASCII mode.
>PASV
227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,121)
ダウンロードのためにホスト xxx.xxx.xxx.xxx (60025) に接続しています.
接続しました.
-----------------------------------------


なぜか、60000番台のポートでコネクションが
張られようとしています。
(PASV応答で60000番台が指定されている)

vsftpd.confに
pasv_min_port=40000
pasv_max_port=40030 と追加してvsftpdを再起動し、

ルータに
・変換対象プロトコル:TCP
・変換対象ポート:40000-40030
・宛先アドレス:FTPサーバのローカルIP(192.168.0.xx)

としているのですが、どこに誤りがあるのでしょうか?
もしくは、設定に不足があるのでしょうか。
(パケットフィルタは特にいじっていません。)

また、60000番台を任意に開放した覚えはない
(FCのFW、ルータ共に)のに、なぜ60000番台でコネクションが
張れてしまう場合があるのかがわかりません。
(60021とか60106ぐらいまでは成功するように見え、60108などは
失敗します)

何か助言をいただければと思います。


No.5467 投稿時間:2005年12月21日(Wed) 21:13 投稿者名:おやじ URL:
タイトル:起こるべくして起きている問題かと思います。

マルチポストは嫌がられますよ。しかも、鷹の巣さんのところでレスがついているいるのに、一番最初と同じ内容をあげるのはチョットまずいのでは?
あくまで状況証拠からの想像ですが、恐らく下記で間違いないのではないかと思います。こちらで解決したのなら、鷹の巣さんのところもスレを閉めてくださいね。
Activeモードうまくいかない理由とPassiveモードがうまくいかない理由は、恐らく全く別の問題と思われます。理由はインラインで。

> 動的IP、ルータはAterm WD701CVで
> OSはFC4、vsftpdでFTPサーバを立てています。
>
> しかし、WAN側からの接続の際に以下のエラーが出ました。
> (ログはFFFTPでのログ)
>
> ----------------------------------------
> ホスト XXXXXXXXXXXXXX を探しています.
> ホスト XXXXXXXXXXXXXX (xx.xxx.xxx.xx (21)) に接続しています.
> 接続しました.
> 220 FTP server
> >USER xxxxx
> 331 Please specify the password.
> >PASS [xxxxxx]
> 230 Login successful.
> >XPWD
> 257 "/"
> >TYPE A
> 200 Switching to ASCII mode.
> >PORT 10,104,2,143,6,87
> 200 PORT command successful. Consider using PASV.
> >NLST -alL
> 425 Failed to establish connection.
> コマンドが受け付けられません.
> ファイル一覧の取得を中止しました.
> ファイル一覧の取得に失敗しました.
> -----------------------------------------
>
> ユーザ名とパスワード応答は返ってくるのですが、
> ファイル一覧の取得ができませんでした。

PORTコマンドに残ったクライアントのアドレスがクラスAということからの想像ですが、クライアントの場所は会社とか学校からテストしたのではないですか?
もしそうなら、これが失敗するのはサーバ側の問題ではなくクライアント側のファイヤウォールでサーバからのデータコネクションの接続が弾かれている可能性が高いです。Activeモードのデータコネクションは、クライアント側からみると外部からの侵入になるので、学校や会社ではまず接続できないと思ったほうが早いです。
おやじのFTPテストをしてうまくいけば、一般家庭(普通のBBR経由)からならつながるはずですので心配いりません。できないことをやろうとしているだけですから。


(snip)

> log_ftp_protocol=YES
> pasv_promiscuous=NO  ←PASVを無効にしていました。
> -----------------------------------------
>
> そこで、PASVを有効にすれば事象が変化するかと思い、
> コンフィグに以下を追加・修正しました。
>
> pasv_min_port=40000
> pasv_max_port=40030
> pasv_promiscuous=YES  ←有効に修正
>
> また、ルータにて以下のポートマッピング設定を追加しました。
> ・変換対象プロトコル:TCP
> ・変換対象ポート:40000-40030
> ・宛先アドレス:FTPサーバのローカルIP(192.168.0.xx)
>
>
> この状態に更新し、再度FFFTPでWAN側からPASVを有効にして
> アクセスした際のログが以下になります。
>
> ----------------------------------------
> 230-230 Login successful.
> 230
> >>CD F:\
> >XPWD
> 257 "/"
> >TYPE A
> 200 Switching to ASCII mode.
> >PASV
> 227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,116)
> ダウンロードのためにホスト xxx.xxx.xxx.xxx (60020) に接続しています.
> 接続しました.
> >LIST
> 150 Here comes the directory listing.
> 226 Directory send OK.
> ファイル一覧の取得は正常終了しました. (195 Bytes)
> >CWD public_html
> 250 Directory successfully changed.
> >XPWD
> 257 "/public_html"
> >TYPE A
> 200 Switching to ASCII mode.
> >PASV
> 227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,117)
> ダウンロードのためにホスト xxx.xxx.xxx.xxx (60021) に接続しています.
> 接続しました.
> >LIST
> 150 Here comes the directory listing.
> 226 Directory send OK.
> ファイル一覧の取得は正常終了しました. (0 Bytes)
> >CDUP
> 250 Directory successfully changed.
> >XPWD
> 257 "/"
> >CWD public_html
> 250 Directory successfully changed.
> >XPWD
> >CWD public_html
> 257 "/public_html"
> >XPWD
> 550 Failed to change directory.
> >PWD
> >CWD public_html
> 257 "/public_html"
> >PWD
> 257 "/public_html"
> 550 Failed to change directory.
> >TYPE A
> 257 "/public_html"
> >PASV
> 200 Switching to ASCII mode.
> アドレスが取得できません.
> ファイル一覧の取得を中止しました.
> ファイル一覧の取得に失敗しました.
> 227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,119)
> >PWD
> 257 "/public_html"
> >TYPE A
> 200 Switching to ASCII mode.
> >PASV
> 227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,120)
> アップロードのためにホスト xxx.xxx.xxx.xxx (60024) に接続しています.
> 接続しました.
> >STOR /public_html/index2.htm
> 150 Ok to send data.
> 226 File receive OK.
> アップロードは正常終了しました. (1 Sec. 18 B/S).
> >TYPE A
> 200 Switching to ASCII mode.
> >PASV
> 227 Entering Passive Mode (xxx.xxx.xxx.xxx,234,121)
> ダウンロードのためにホスト xxx.xxx.xxx.xxx (60025) に接続しています.
> 接続しました.
> -----------------------------------------
>
>
> なぜか、60000番台のポートでコネクションが
> 張られようとしています。
> (PASV応答で60000番台が指定されている)
>
> vsftpd.confに
> pasv_min_port=40000
> pasv_max_port=40030 と追加してvsftpdを再起動し、
>
> ルータに
> ・変換対象プロトコル:TCP
> ・変換対象ポート:40000-40030
> ・宛先アドレス:FTPサーバのローカルIP(192.168.0.xx)
>
> としているのですが、どこに誤りがあるのでしょうか?
> もしくは、設定に不足があるのでしょうか。
> (パケットフィルタは特にいじっていません。)
>
> また、60000番台を任意に開放した覚えはない
> (FCのFW、ルータ共に)のに、なぜ60000番台でコネクションが
> 張れてしまう場合があるのかがわかりません。
> (60021とか60106ぐらいまでは成功するように見え、60108などは
> 失敗します)
>

データコネクションのポートが変わるのはNEC製ルータを使用しているからです。Coregaやマイクロ総研、NEC製のルータの多くは、FTPサーバ構築時のPASVモード問題(NAT配下では何らかの対策をしないとデータコネクションがつながらない問題。おやじのHPを見てください。)に対応しており、ルータが勝手にクライアントに通知するサーバのアドレスとポート番号を書き換えてしまいます。従って、サーバ側でPASV対応の設定は何もしなくてもPASV通信ができてしまいます。データコネクションポートのポートフォワードも不要で、勝手に通してくれます。というか、ルータがポートを勝手に変えてしまうので設定できません。
60108がうまくいかない理由はいまいちわかりませんが、FC4のファイヤウォールで止まっている可能性があるのではないですか?ルータでフィルタをガチガチにかけていない限りルータの問題ではないと思います。設計思想の問題なのでなんともいえませんが、ルータによっては、このFTPの変換動作のほうがフィルタより優先しているものもあると思います。
おやじのところにFTP関連の情報やテストがありますので、参考にされては?


No.5468 投稿時間:2005年12月22日(Thu) 10:11 投稿者名:KC URL:
タイトル:Re: 起こるべくして起きている問題かと思います。

>マルチポストは嫌がられますよ。

すみません。


> PORTコマンドに残ったクライアントのアドレスがクラスAということからの想像ですが、クライアントの場所は会社とか学校からテストしたのではないですか?

普通の一般家庭です。


> もしそうなら、これが失敗するのはサーバ側の問題ではなくクライアント側のファイヤウォールでサーバからのデータコネクションの接続が弾かれている可能性が高いです。Activeモードのデータコネクションは、クライアント側からみると外部からの侵入になるので、学校や会社ではまず接続できないと思ったほうが早いです。

弾いているであろう事は想定していました。
そのため、PASVでも接続を可能にしたいと思いました。



> おやじのFTPテストをしてうまくいけば、一般家庭(普通のBBR経由)からならつながるはずですので心配いりません。できないことをやろうとしているだけですから。

PORTモードではLISTの取得までうまくいきますが、
PASVモードでは成功するのはログインまでです。
エラー999が発生しました。



> データコネクションのポートが変わるのはNEC製ルータを使用しているからです。Coregaやマイクロ総研、NEC製のルータの多くは、FTPサーバ構築時のPASVモード問題(NAT配下では何らかの対策をしないとデータコネクションがつながらない問題。おやじのHPを見てください。)に対応しており、ルータが勝手にクライアントに通知するサーバのアドレスとポート番号を書き換えてしまいます。従って、サーバ側でPASV対応の設定は何もしなくてもPASV通信ができてしまいます。データコネクションポートのポートフォワードも不要で、勝手に通してくれます。というか、ルータがポートを勝手に変えてしまうので設定できません。

つまり、この場合ルータ側で「40000-40030」を開放しても
意味がないと言うことでしょうか。



> 60108がうまくいかない理由はいまいちわかりませんが、FC4のファイヤウォールで止まっている可能性があるのではないですか?ルータでフィルタをガチガチにかけていない限りルータの問題ではないと思います。設計思想の問題なのでなんともいえませんが、ルータによっては、このFTPの変換動作のほうがフィルタより優先しているものもあると思います。

FC4のFWでも「40000-40030」を空けています。
その他は20、21などです。



> おやじのところにFTP関連の情報やテストがありますので、参考にされては?

参考にさせていただきます。
ありがとうございます。


No.5469 投稿時間:2005年12月22日(Thu) 23:00 投稿者名:おやじ URL:
タイトル:デフォルトに戻せば動くと思います。

> > PORTコマンドに残ったクライアントのアドレスがクラスAということからの想像ですが、クライアントの場所は会社とか学校からテストしたのではないですか?
>
> 普通の一般家庭です。

一般家庭でクラスAですか? ルータは何を使用しているのですか?
普通のBBRならクラスC、チョット変わったBBRでクラスBだと思うのですが、敢えて変更されたのですか?しかもかなり変わったアドレスですよね。

> > もしそうなら、これが失敗するのはサーバ側の問題ではなくクライアント側のファイヤウォールでサーバからのデータコネクションの接続が弾かれている可能性が高いです。Activeモードのデータコネクションは、クライアント側からみると外部からの侵入になるので、学校や会社ではまず接続できないと思ったほうが早いです。
>
> 弾いているであろう事は想定していました。

クライアント側のルータが家庭向けを想定したルータなら、普通はActiveモードのデータコネクションは通過させるようになっているはずです。アドレスの件も含めて、業務用ルータを使われているのですか?

> そのため、PASVでも接続を可能にしたいと思いました。
>
>
>
> > おやじのFTPテストをしてうまくいけば、一般家庭(普通のBBR経由)からならつながるはずですので心配いりません。できないことをやろうとしているだけですから。
>
> PORTモードではLISTの取得までうまくいきますが、
> PASVモードでは成功するのはログインまでです。
> エラー999が発生しました。

データコネクションのポート番号は想定外、つまりサーバで設定したポート番号以外になっていましたか? なっていれば、ルータが変更しているのでルータ設定変更(フィルタ等)を何もしていなければつながるはずです。ただ、ルータのフィルタを触っているとつながらない可能性は大です。NEC製のルータの多くは、フィルタはスルーでポートマッピングしなければ大丈夫という発想のフィルタなので、下手に触ると予期せぬ動きになるのでデフォルトで使うことを薦めます。NECのフィルタは厄介ですよ。データコネクションのポート番号が変化しているなら、フィルタはデフォルトままでFTPなら21番だけポートマッピングすればまず間違いなくうまくいきます。
因みにポートマッピングやフィルタで意識しなければならないのはFTPなら21番だけでいいですよ。20番は不要。20番はFTPサーバがクライアントにつなぎにいくデータコネクションポートのソースポート番号なので、通信の方向を考えれば、ポートマッピングしたりフィルタを開ける意味がないことはわかると思います。本件は鷹の巣さんのところで松元さんも指摘してますよね。おやじのルータ設定はかなりガードしているので20番ポートに関する設定がありますが、それはFTPサーバテスト用に外部のFTPサーバの20番ポートからのみアクセスを許容するという設定なので、自分のサーバ用ではありません。

> > データコネクションのポートが変わるのはNEC製ルータを使用しているからです。Coregaやマイクロ総研、NEC製のルータの多くは、FTPサーバ構築時のPASVモード問題(NAT配下では何らかの対策をしないとデータコネクションがつながらない問題。おやじのHPを見てください。)に対応しており、ルータが勝手にクライアントに通知するサーバのアドレスとポート番号を書き換えてしまいます。従って、サーバ側でPASV対応の設定は何もしなくてもPASV通信ができてしまいます。データコネクションポートのポートフォワードも不要で、勝手に通してくれます。というか、ルータがポートを勝手に変えてしまうので設定できません。
>
> つまり、この場合ルータ側で「40000-40030」を開放しても
> 意味がないと言うことでしょうか。

ルータが勝手にポート番号を変えているので、クライアントがつなぎにくるのは「40000-40030」ではないのでフィルタは書きようがないということです。仮に「40000-40030」を開けて、「40000-40030」をポートフォワードしても、少なくともFTPではアクセスしてくることはなく、余計なポートが開いているということです。

>
> > 60108がうまくいかない理由はいまいちわかりませんが、FC4のファイヤウォールで止まっている可能性があるのではないですか?ルータでフィルタをガチガチにかけていない限りルータの問題ではないと思います。設計思想の問題なのでなんともいえませんが、ルータによっては、このFTPの変換動作のほうがフィルタより優先しているものもあると思います。
>
> FC4のFWでも「40000-40030」を空けています。
> その他は20、21などです。

うまくいっていない状況なら、止めてテストしなければわからないのでは? NATルータ(WD701CV)があるので、よほどの理由と使いこなせる自信がなければFC4のフィルタは邪魔になるだけで、リスクの低下はほとんどないので止めたほうが無難です。
おやじはかなり細かくフィルタしていますが、新しいことをやるときいつも忘れていて繋がらない騒ぎをしています。止めてもいいのですが、勉強のつもりで入れているだけです。
ルータをデフォルトにして21番をポートマッピングだけして、FC4のファヤウォールを止めれば動くはずです。



掲示板▲頁先頭