- PR -

FTP で Entering Passive Mode

投稿者投稿内容
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-09-12 14:33
こんにちは、藤井です。

引用:

hawkmoonさんの書き込み (2002-09-12 13:58) より:

ここでの問題は、なぜ、listコマンドが実行できないかということですよね?
はたしてipchainやip masqなどが問題となるのでしょうか?
ちなみにftpの制御用コネクションにはtelnetプロトコルが使われています。
ということはtelnetが正常につながるかどうかが問題解決の糸口にはなり
ませんかね?



$ less /etc/services

ftp-data 20/tcp #File Transfer [Default Data]
ftp-data 20/udp #File Transfer [Default Data]
ftp 21/tcp #File Transfer [Control]
ftp 21/udp #File Transfer [Control]

telnet 23/tcp
telnet 23/udp
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-09-12 16:21
山本さま。おそらくあなたのおっしゃる方向だと思います。
[gateway]マシンのフィルタで仮にオールパスにしてみましたところ

===============================================================
ftp> pwd
257 "/home/okumura" is current directory.
ftp> ls
227 Entering Passive Mode (211,0,108,84,232,204)
150 Opening ASCII mode data connection for directory listing.
total 8
-rw-r--r-- 1 root root 9 Sep 12 09:10 test.txt
226 Transfer complete.
===============================================================

となり、リストが表示されました。
当然オールパスにしておくわけにはいきませんので、従来から通しているtcpポートの20番と21番に加えて、telnetで使用するtcpポート23番をオープンしました。

当然これで
#telnet webserver
は成功しましたが、ftp接続では依然、

===============================================================
ftp> ls -al
227 Entering Passive Mode (211,0,108,84,95,246)
===============================================================

で止まったままです。
フルオープンで見えたということは、他に何かを開かないといけないことになりますが、これ以外に開く必要のあるポートのお心当たりはございますでしょうか。
hawkmoon
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 80
投稿日時: 2002-09-12 16:46
ふじい様

ご返答ありがとうございます。
ちょっと私の表現方法がまずかったようですね。
ごめんなさい。

ftpとtelnetでは使用するポートも違いますし全く別のサービス
です。当然、ftpの制御用コネクションでは21番ポートを
使用し、telnetコネクションでは23番ポートを使用します。
ftpコネクションには、様々な他のプロトコルに見られる原理
が実装されているわけで、制御用のコネクションには、telnet
プロトコルが使われているのです。なのでtelnetでうまく通信
コネクションが確立できたならば今回のlistコマンドがなぜ実行
できないかという問題に対して原因の切り分けにならんでしょうか?
という意味で申し上げた次第であります。


[ メッセージ編集済み 編集者: hawkmoon 編集日時 2002-09-12 21:01 ]
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-09-12 17:27
こんにちは、藤井です。

僕が思うに、1024番以上のポートを閉じてるからです。

これ以上ここで議論する前に確認したいのですが、FTPのことについてお調べになられているのでしょうか?

たとえば、googleで、「ftp passive」というキーワードで調べたら、僕はここが最初に出ました。
http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/ftp-passive-mode.html

ここをみると、アクティブモードとパッシブモードの通信のやり方の違いがわかると思います。本当はこれ以外にsyn、ackなどのパケットの種類を考えないといけないのですが、

http://www.jp.freebsd.org/QandA/HTML/2073.html
この辺が分かりやすいでしょうか。

その上でまた接続できないのなら、gateway上でtcpdumpなどでパケットをのぞいた結果を載せていただけませんか?


僕がいいたいのは、人に聞かなくても検索すればすむことだと思う、ということです。
あぁ、また言葉がきついですかね。すみません。(泣)

[ メッセージ編集済み 編集者: ふじい 編集日時 2002-09-12 17:28 ]

[ メッセージ編集済み 編集者: ふじい 編集日時 2002-09-12 17:30 ]
hawkmoon
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 80
投稿日時: 2002-09-12 17:43
okumura様

山本です。
ええっとですね。listコマンドが実行できない原因がわかりました。
(おそらくですが・・・^^:)
原因は、制御用コネクションではなくて、データ転送用のコネクション
にありました。クライアントパッシブモードでは必ずしもデータ転送用に
サーバ側の20番ポートを使用しません。実際に確かめてみました。
でなんでpwdコマンドは実行できてlistコマンドは実行できないかと
いうと、listコマンドが実行されると同時にデータ転送用のコネクション
を確立するからです。簡単にいうとデータ転送用のコネクションが確立
できないことが原因です。
これを回避する方法としては、PORTコマンドでデータコネクションに
使用するIPアドレス、ポート番号を指定してみるとうまくいくかもしれ
ませんね。
それでは、がんばってください。

ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-09-12 18:16
こんにちは、藤井です。

引用:

hawkmoonさんの書き込み (2002-09-12 17:43) より:

これを回避する方法としては、PORTコマンドでデータコネクションに
使用するIPアドレス、ポート番号を指定してみるとうまくいくかもしれ
ませんね。



ええ、その通りなのですが、パッシブモードの場合、そのポートは毎回変わります。これは仕様なのでしょうがないです。なので、それを回避するようなパケットのフィルタリングをしなければいけません。



僕は人にものを教えるときに(といっては偉そうですが)、その答えを教えるよりも、答えの導き方を教えるほうがいいなと思っています。

もし今回の件がパケットのフィルタリングが原因なら、
http://www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO-5.html#ss5.2

ここら辺を読んでください。そのままのってます。

フィルタリングやNATは、ネットワークの知識や各デーモンの通信の仕方など、たくさんの知識と理解が必要です。

なので、okumuraさん、これくらいは検索して探せるようじゃないと、この先はきついですよ。
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-09-17 17:19
こんにちは、藤井です。

前回、「探せるようじゃないと・・・」と書きましたが、やはりネット上での情報はあるようでなさそうで、ある意味大変ですね。その後いかがでしょうか?


僕は以下のようにした方がいいと思います。

・カーネルはなるべくレッドハットのソースの方から再構築する、なければkernel.orgから取ってくる。
・できればiptablesの方を覚える。
・カーネルにiptablesを組み込む

僕もipchainsから移行したときは、各チェインの考え方が大きく変わり、戸惑いましたが、今となってはiptablesの方がすっきりしていいかな?と思います。

NATも統一的に扱えますし、FTPの問題もモジュールを組み込めば特に問題は起きません。

カーネルも再構築するのは必須です。なぜかというと、この前はexperimentalだったものが、そうじゃなくなるのも当たり前なくらいスピードが速いです。そういう意味で、カーネルが新しく出たら、かかさずChange logをチェックするくらいがちょうどいいと思います。

おそらくそのマシンはゲートウェイとしての機能だけが必要になり、その他の機能はあまり必要ではないでしょう。
また、カーネルに直接組み込むか、モジュールとして後で読み込むかでは速度にも違いが出ますし。

スキルアップ/キャリアアップ(JOB@IT)