-.- <daylong.bbs@bbs.ee.ncu.edu.tw> wrote in message
news:3bk6Vj$H5L@bbs.ee.ncu.edu.tw...
> >==>發信人: livan.bbs@bbs.im.tku.edu.tw (衝刺知識!), 信區: Linux
> >請問
> > 用ipchains -A forward -j MASQ
> >用telnet和www都可以
> >but ftp卻不行出現了
> > Guest login ok, access restrictions apply.
> >> ls
> > Illegal PORT Command
> > Can't build data connection: Connection refused.
> >  的訊息
> >如果想用cicq 那應該如何設定,或要加架什麼?
> >謝謝
> >
> ftp 1. Active mode 2.Passive mode
> Ftp傳輸有兩種mode 一種是Active mode(一般ftp 用的)
> 二是Passive mode(web browser在用的)

不是這樣的。要了解這兩個模式的不同﹐先得了解 FTP 的連線是怎樣建立的﹕

1)
在正常模式下﹕
1﹐FTP client 開啟一個隨機選擇的高於 1024 的 port 呼叫 FTP server 的 port 21
建立連線﹐這是命令通道的建立。
2﹐client 用一個 port 命令告訴 server 另一個高於 1024 的 port 做數據通道。
3﹐然後 server 用 port 20 和剛才 client 所告知的 port 建立數據連線。請注意﹐
這是從 server 到 client 的連線﹐TCP 封包會有一個 SYN 標籤。
4﹐client 會確認數據通道連接﹐這個封包會有一個 ACK 標籤。
5﹐開始數據傳送。

2)
在 passive 模式下﹕
1﹐FTP client 開啟一個隨機選擇的高於 1024 的 port 呼叫 FTP server 的 port 21
建立連線﹐這是命令通道的建立。
2﹐client 送一個 PASV 命令給 server﹐要求建立 passive 模式。
3﹐server 然後像上面所述的正常模式第 2 步驟那樣﹐挑一個高於 1024 的 port 告
訴 client 做數據通道。
4﹐然後 client 用另一個高於 1024 的 port 呼叫剛才 server 告知的 port 來建立
數據通道。此時封包帶 SYN 標籤。
5﹐server 確認後回應一個 ACK 封包。
6﹐開始數據傳送。


> 1是會在遠端重連一tcp/ip連接送檔案或dir
> 而2是都由遠端連,所以在firewall的要用2

嗯﹖﹖ 什麼什麼啦﹖﹖

> 如果沒用2則
> ftp>dir
> 500 Illegal Port Command
> ftp>passive
> 這樣才可以連

是否如此﹐弟有所保留。

> 而leapFtp可在選項->喜好設定->PROXY->在使用PASV前打勾
>
> 所以我想你的ICQ在裝的時候可能就會問你是不是在防火牆後
> 不然FTP傳檔都要用PASSIVE MODE
>

好﹐那就再談談 FW 吧。
通常 FW 的保護對象是內部網路的 client 主機。而 server 一般會放到 DMZ 去﹐而
DMZ 和 inernet 之間是可以直接路由的。
 (唉﹐恐怕我這樣說﹐那些用我的 fw script 的朋友會搞亂了。不過我這裡不願再多
解釋﹐只要注意﹕我的 fw script 裡面指的 DMZ 並非利用 routing 而是用
ipmasquerading 和 ineternet 連接﹐和真實的 DMZ 不同哦﹗﹗)
FW 為了擋掉一些來自外面的危險動作﹐通常會限制那些來自外面的主動連線﹐也就是
帶 SYN 標籤的封包。
在這樣的情況下﹐ FTP 在正常模式下(第 3 步)﹐來自 server 的數據通道建立請求就
被擋下來了。數據通道也就無從建立。
Okay﹖那就再看 FTP 的動作﹕
FTP 的 ls 是一個命令﹐因為命令通道的建立並沒問題﹐所以 server 可以收到命令。
但 ls 的結果是數據﹐然而數據通道卻未建立。所以 server 在傳送失敗後﹐再用命令
通道告訴您﹕
 “Can't build data connection: Connection refused.”

明白了﹖

好了﹐為什麼 Passive 模式又可以呢﹖﹖
看看正常模式的第 3 步和 Passive 模式的第 4  步﹐然後檢查它們進出 FW 的方向﹐
以及 FW 如何處理 SYN 封包就知道了。
我不想直接把答案告訴您。自己要懂得思考﹐才會有進步﹗不是嗎﹖


但是﹐我必須再指出﹕上面談的是基於一個 routing 健全的情形下。如果用
ipmasquerading 的話﹐封包的地址將會有所改變。
具體情形我又再買關子。您可以參考下面網頁﹕
http://www.ncu.edu.tw/~center5/livecd/ipnat/

Tips: 無論用正常模式或 Passive 模式﹐server 都看不到 client 的地址﹐server
只看到 NAT 的地址而已。故此﹐您還要執行下面命令﹐讓 NAT 可以順利傳遞 FTP 的
封包﹕

modprobe ip_masq_ftp