Top過去ログ目次掲示板

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

No.4958 FTPのPASVで外部から接続できない


No.4958 投稿時間:2005年07月23日(Sat) 17:24 投稿者名:farot URL:
タイトル:FTPのPASVで外部から接続できない

先日WindowsXP+RaidenFTPd+Ba8000Proでサーバーを立てました。

PASVのデータポートを1401〜1410がRaidenFTPdの初期値でしたので,

BA8000Proにて
 (1)NAPTの設定 NAPT:有効,FTP制御ポート:21
 (2)静的マスカレード tcp * * WAN-IP 21 LOCAL-IP 21
 (3)静的フィルタ(WAN->LAN1)
     pass tcp [e]syn * * LOCAL-IP 21
     pass tcp [e]syn * 1401-1410 * 1401-1410
     discard tcp [e]syn * * LOCAL-IP *
  ※ WAN側のクライアントは FC3 + gFTP 2.0.18

このようにした場合,接続できません。

そこで,(3)を

     pass tcp [e]syn * * LOCAL-IP *

こうすると接続できました。
サーバー機の方へはファイアウォールを入れているとはいえ,これで
公開するのは非常に不安です。

また,LAN0->LAN1の場合,

     pass tcp [e]syn * 1401-1410 * 1401-1410

この部分を

     pass tcp [e]syn * 1401-1999 * 1401-1999

のように広く取ってやると接続できました。
  ※ LAN0側のクライアントは Windows2000 + FFFTP

どうしてこのような現象が起こるのか分かりません。


なお,LAN0>LAN1で,1401-1410のみ開けていた時に FFFTPでは,

>ダウンロードのためにホスト 192.168.?.? (1401) に接続しています.
というメッセージで止まりタイムアウトしてしまいます。

何か開けるポートを制限するいい方法はありませんでしょうか?


No.4960 投稿時間:2005年07月23日(Sat) 23:09 投稿者名:shimadan URL:
タイトル:Re: FTPのPASVで外部から接続できない

>      pass tcp [e]syn * * LOCAL-IP 21
>      pass tcp [e]syn * 1401-1410 * 1401-1410

2行目も1行目と同じ記述にすれば良いのじゃないのでは?
  pass tcp [e]syn * * LOCAL-IP 1401-1410


No.4969 投稿時間:2005年07月24日(Sun) 22:40 投稿者名:farot URL:
タイトル:Re^2: FTPのPASVで外部から接続できない

返信ありがとうございます。

pass tcp [e]syn * * LOCAL-IP 1401-1410

これでもだめでした。

現在は pass tcp [e]syn. * * * *  このようにしていますが、
ポートが全開でないとつながらないというのではセキュリティも
あったものではないので頭を悩ませています。

internet
   |
[NTT光回線終端装置]
   |
  BA8000Pro-----------LAN0 192.168.1.???
      +---------------LAN1 192.168.2.??? (RaidenFTPd)

サーバーソフトが nekosogiFTPd でも同様でした。
できればポートを必要最低限開くだけにしたいのですが

 (1)NAPTの設定 NAPT:有効,FTP制御ポート:21
 (2)静的マスカレード tcp * * WAN-IP 21 LOCAL-IP 21

これ以外の設定が必要なのでしょうか?


No.4971 投稿時間:2005年07月25日(Mon) 17:36 投稿者名:おやじ URL:
タイトル:設定漏れが1件と設定ミス(shimadanさんが指摘済み)が1件あります。

> 先日WindowsXP+RaidenFTPd+Ba8000Proでサーバーを立てました。
>
> PASVのデータポートを1401〜1410がRaidenFTPdの初期値でしたので,
>
> BA8000Proにて
>  (1)NAPTの設定 NAPT:有効,FTP制御ポート:21
>  (2)静的マスカレード tcp * * WAN-IP 21 LOCAL-IP 21
>  (3)静的フィルタ(WAN->LAN1)
>      pass tcp [e]syn * * LOCAL-IP 21
>      pass tcp [e]syn * 1401-1410 * 1401-1410
>      discard tcp [e]syn * * LOCAL-IP *
>   ※ WAN側のクライアントは FC3 + gFTP 2.0.18
>
> このようにした場合,接続できません。

下記は見ましたか? 上記は、設定漏れが1件と設定ミス(shimadanさんが指摘済み)が1件あります。

http://www.aconus.com/~oyaji/router/ba8000_conf.htm

1. 設定漏れ
PASVのデータコネクションポートは、21番ポートと同様にサーバから通知されたポートにクライアント側から接続してくるので、ポートマッピング(静的マスカレード)してあげなければ繋がりません。
1401〜1410がRaidenFTPdの初期値なら、(2)に下記を追加してください。

  tcp * * WAN-IP 1401-1410 LOCAL-IP 1401-1410

2. 設定ミス
shimadanさんが指摘済みですが、データコネクションの送信元のIPやポート番号は特定できないので、全て(*)を対象にし、1項でポートマッピングしたサーバに向かうポート番号(今回は、1401-1410)のみを通過させてあげるようにすればいいので、(3)の2行目を下記を変更してください。因みに、LOCAL-IPとはサーバのプライベートアドレスのことですよね。

 pass tcp [e]syn * * LOCAL-IP 1401-1410


No.4972 投稿時間:2005年07月25日(Mon) 21:36 投稿者名:farot URL:
タイトル:Re: 設定漏れが1件と設定ミス(shimadanさんが指摘済み)が1件あります。

アドバイス有難うございます。

> 1. 設定漏れ
> PASVのデータコネクションポートは、21番ポートと同様にサーバから通知されたポートにクライアント側から接続してくるので、ポートマッピング(静的マスカレード)してあげなければ繋がりません。
> 1401〜1410がRaidenFTPdの初期値なら、(2)に下記を追加してください。
> 
>   tcp * * WAN-IP 1401-1410 LOCAL-IP 1401-1410
この設定を追加し,


静的フィルタ
>  pass tcp [e]syn * * LOCAL-IP 1401-1410
このように変更しました。

しかしながら,外部(gFTP)から接続してみると

 (サーバーのURL):21 の試行中

というのが繰り返されるだけで接続できませんでした。

そこで,静的フィルタを

pass tcp [e]syn * * LOCAL-IP *

このように変更するとすぐに接続できました。

>因みに、LOCAL-IPとはサーバのプライベートアドレスのことですよね。
はい,そうです。分かりにくい表現ですみません。 

以下が現在の WAN>LAN1 の静的フィルタの設定です。

01 discard *           10.0.0.0/8     *       *          * 
02 discard *           172.16.0.0/12  *       *          * 
03 discard *           192.168.0.0/16 *       *          * 
04 discard udp&tcp     *              135,445 *          * 
05 discard udp&tcp     *              *       *          135,445 
06 discard udp&tcp     *              137-139 *          * 
07 discard udp&tcp     *              *       *          137-139 
10 pass    udp         *              53,123  *          * 
18 discard udp         *              *       *          * 
20 pass    tcp [e]syn. *              *       (LOCAL-IP) 1401-1410 
21 pass    tcp [e]syn. *              *       (LOCAL-IP) 21 
22 pass    tcp [e]syn. *              *       (LOCAL-IP) 25 
23 discard tcp [e]syn. *              *       (LOCAL-IP) 80 
25 discard tcp [e]syn. *              *       (LOCAL-IP) 12500-12501 
63 discard tcp [e]syn. *              *       (LOCAL-IP) * 
64 pass    tcp         *              *       (LOCAL-IP) * 


No.4973 投稿時間:2005年07月26日(Tue) 03:47 投稿者名:farot URL:
タイトル:解決かな?

あれから色々設定を変更してやってみたところ何とかデータポートを
1401-1410 だけ開けるだけで接続することに成功しました。


実験(1) 結果:(サーバーのアドレス):21 でストップ
 (1)-a
 20 pass tcp [e]syn. * * 192.168.2.150 1401-1410 
 21 pass tcp [e]syn. * * 162.168.2.150 21 
 --------------------------------------------------
 (1)-b
 20 pass tcp [e]syn. * * 192.168.2.150 22-1410 
 21 pass tcp [e]syn. * * 162.168.2.150 21 


実験(2) 結果:正常に接続
 20 pass tcp [e]syn. * * 192.168.2.150 21-1410 
 21 pass tcp [e]syn. * * 162.168.2.150 21 


実験(3) 結果:Entering Passive Mode (WAN-IP,5,121)でストップ
 (3)-a
 20 pass tcp [e]syn. * * 192.168.2.150 21 
 21 pass tcp [e]syn. * * 162.168.2.150 1401-1410 
 ---------------------------------------------------
 (3)-b
 20 pass tcp [e]syn. * * 192.168.2.150 21 
 21 pass tcp [e]syn. * * 162.168.2.150 21-1410 
 ---------------------------------------------------
 (3)-c
 20 pass tcp [e]syn. * * 192.168.2.150 21 
 21 pass tcp [e]syn. * * 162.168.2.150 22-1410 


実験(4) 結果:正常に接続
 (4)-a
 20 pass tcp [e]syn. * * 192.168.2.150 21 
 25 pass tcp [e]syn. * * 192.168.2.150 1401-1410 
 ---------------------------------------------------
 (4)-b
 20 pass tcp [e]syn. * * 192.168.2.150 1401-1410 
 25 pass tcp [e]syn. * * 192.168.2.150 21 


実験(1)と実験(3)ではどちらもストップするものの停止する位置が異なっており,
実験(2)では接続に成功するものの開けるポートがまだ広すぎました。

そこで,実験(4)のように設定番号を少し間隔を空けてみたところ
ちゃんと意図した通りになりました。こんなことってあるのですね。
マニュアルには一通り目を通したつもりだったのですが,設定番号の
間隔をあけるようにしないといけないというのは書いていなかったような
気がします。

なにはともあれ,必要なポートのみ開けることができましたので
ご報告いたします。

有難うございました。


No.4978 投稿時間:2005年07月26日(Tue) 17:53 投稿者名:おやじ URL:
タイトル:おやじの環境では特に問題ありませんが?

> あれから色々設定を変更してやってみたところ何とかデータポートを
> 1401-1410 だけ開けるだけで接続することに成功しました。
> 
> 
> 実験(1) 結果:(サーバーのアドレス):21 でストップ
>  (1)-a
>  20 pass tcp [e]syn. * * 192.168.2.150 1401-1410 
>  21 pass tcp [e]syn. * * 162.168.2.150 21 
>  --------------------------------------------------
>  (1)-b
>  20 pass tcp [e]syn. * * 192.168.2.150 22-1410 
>  21 pass tcp [e]syn. * * 162.168.2.150 21 
> 
> 
> 実験(2) 結果:正常に接続
>  20 pass tcp [e]syn. * * 192.168.2.150 21-1410 
>  21 pass tcp [e]syn. * * 162.168.2.150 21 
> 
> 
> 実験(3) 結果:Entering Passive Mode (WAN-IP,5,121)でストップ
>  (3)-a
>  20 pass tcp [e]syn. * * 192.168.2.150 21 
>  21 pass tcp [e]syn. * * 162.168.2.150 1401-1410 
>  ---------------------------------------------------
>  (3)-b
>  20 pass tcp [e]syn. * * 192.168.2.150 21 
>  21 pass tcp [e]syn. * * 162.168.2.150 21-1410 
>  ---------------------------------------------------
>  (3)-c
>  20 pass tcp [e]syn. * * 192.168.2.150 21 
>  21 pass tcp [e]syn. * * 162.168.2.150 22-1410 
> 
> 
> 実験(4) 結果:正常に接続
>  (4)-a
>  20 pass tcp [e]syn. * * 192.168.2.150 21 
>  25 pass tcp [e]syn. * * 192.168.2.150 1401-1410 
>  ---------------------------------------------------
>  (4)-b
>  20 pass tcp [e]syn. * * 192.168.2.150 1401-1410 
>  25 pass tcp [e]syn. * * 192.168.2.150 21 
> 
> 
> 実験(1)と実験(3)ではどちらもストップするものの停止する位置が異なっており,
> 実験(2)では接続に成功するものの開けるポートがまだ広すぎました。
> 
> そこで,実験(4)のように設定番号を少し間隔を空けてみたところ
> ちゃんと意図した通りになりました。こんなことってあるのですね。
> マニュアルには一通り目を通したつもりだったのですが,設定番号の
> 間隔をあけるようにしないといけないというのは書いていなかったような
> 気がします。

ここだけみると有り得ない動きですね。外部からサーバに接続する場合のBA8000の
概略の動作は、以下のようになってます。

1. 静的マスカレードで対象のパケットを通過させるかチェック。
 おやじの例のように、任意のリモートアドレス・ポートからWAN側IPの21番ポート
に来たパケットは、内部のサーバのIPアドレスの21番ポートにマスカレードすると
いう設定があれば、外部からのFTPサーバ(21番)への接続はサーバに中継される。
 データコネクションも同様でサーバ宛に1401-1410がマスカレードされていれば、
LIST等でデータコネクションでやり取りされるセッションも接続できる。

2. 上記で通過させるとしたパケットはフィルタで評価される。
 デフォルトの64番だけなら、1項の設定でサーバとの通信はできる。なぜなら
64番は無条件に全て通過させる設定だから。farotさんの64番はデフォルトでは
ないですよね。これはおかしいと思いますが。ここの(LOCAL-IP)がサーバの
アドレスだと、ルータのDDNS設定機能やサーバ機以外のクライアントの
webアクセス等ができないはず?(BA8000のフィルタは暗黙のdeny、つまりフィルタ
に最後までマッチしなかったら廃棄する設定だったはずなので。)従って、ここは
全てのアドレスの「*」にすべきです。
同じことが、63番にも言えます。これだと、静的マスカレードされていないので
基本的に問題ありませんが、サーバ以外のアドレスに繋がろうとするパケットは
通過してしまいます。ここの意味は、上位の番号で許可したsynのみ付パケット
以外は全て廃棄して、外部から接続させないためのものなので、ここも全ての
アドレスの「*」にすべきです。
従って、23番、25番は盲腸で、64番で処理されるのでなくても問題ありません。

--------------No.4972より------------------------

20 pass    tcp [e]syn. *              *       (LOCAL-IP) 1401-1410 
21 pass    tcp [e]syn. *              *       (LOCAL-IP) 21 
22 pass    tcp [e]syn. *              *       (LOCAL-IP) 25 
23 discard tcp [e]syn. *              *       (LOCAL-IP) 80 
25 discard tcp [e]syn. *              *       (LOCAL-IP) 12500-12501 
63 discard tcp [e]syn. *              *       (LOCAL-IP) * 
64 pass    tcp         *              *       (LOCAL-IP) * 

--------------ここまで---------------------------

フィルタは若い番号から処理されますので、異なる性質のフィルタは記述する順番
に注意が必要ですが、同じ性質のものは順番は関係ありません。
従って、farotさんの実験結果は有り得ないことです。久々にBA8000に電源を
いれたら、バージョンもあがっていたので入れなおして、テストしましたが、連番
でも全く問題なく動作してます。このあたりの動作がこの理論に会わなければ
ルータとして機能しませんので、何か見落としていることがあるはずです。
試験方法がおかしいのかもしれません。


No.4985 投稿時間:2005年07月27日(Wed) 09:46 投稿者名:farot URL:
タイトル:Re: おやじの環境では特に問題ありませんが?

返信有難うございます。

クライアントはLAN1〜LAN3へ接続し,サーバーはFTPサーバーのみで
LAN4へ接続しています。

また,BA8000ProのVLAN機能を有効にしてLAN1〜LAN3をグループAに,
LAN4のみグループBにしています。

(ここで言うLAN1,LAN2...LAN4はルーターの背面のLANポートの番号です)

この設定は何か影響してきますでしょうか?

このようにグループを分けた段階で,静的フィルタの設定項目に
  WAN>LAN1, LAN1>WAN, LAN0>LAN1, LAN1>LAN0
が新しく追加されていました。それまでは WAN>LAN0, LAN0>WANのみでした。
(このあたりはちょっと面くらいましたが,ここで言うLAN0,LAN1は
VLAN設定のグループA,グループBに該当するものと思っています)

だから,クライアントへのフィルタは WAN>LAN0で行っておりまして,
  01 discard *           10.0.0.0/8     *        *              * 
  03 discard *           172.16.0.0/12  *        *              * 
  05 discard *           192.168.0.0/16 *        *              * 
  07 discard udp&tcp     *              135,445  *              * 
  09 discard udp&tcp     *              *        *              135,445 
  11 discard udp&tcp     *              137-139  *              * 
  13 discard udp&tcp     *              *        *              137-139 
  15 pass    udp         *              53       192.168.1.0/24 * 
  17 pass    udp         *              123      192.168.1.0/24 * 
  19 discard udp         *              *        *              * 
  21 discard icmp        *              *        *              * 
  60 discard tcp [e]syn. *              *        *              * 
  64 pass    *           *              *        192.168.1.0/24 * 

このようにしております。

グループを分けているためグループ毎にフィルタがかかっていると理解
していたのですが間違っていましたでしょうか?

> アドレスだと、ルータのDDNS設定機能やサーバ機以外のクライアントの
> webアクセス等ができないはず?(BA8000のフィルタは暗黙のdeny、つまりフィルタ
> に最後までマッチしなかったら廃棄する設定だったはずなので。)従って、ここは
> 全てのアドレスの「*」にすべきです。
上記のようにクライアントは別グループ(A)で,LAN1(グループB)には
FTPサーバーのみ接続していますので,サーバー機のLOCAL-IPをセット
しています。


> 同じことが、63番にも言えます。これだと、静的マスカレードされていないので
> 基本的に問題ありませんが、サーバ以外のアドレスに繋がろうとするパケットは
> 通過してしまいます。ここの意味は、上位の番号で許可したsynのみ付パケット
> 以外は全て廃棄して、外部から接続させないためのものなので、ここも全ての
> アドレスの「*」にすべきです。
言われてみればその通りですので,他のPCは繋いでいないとは言っても
通過の場合はLOCAL-IP限定で,破棄の場合は全てのIPに対して行うように
します。

これも先ほどのと重複しますが,グループ分けしていても,通過の場合は
全てのIPを対象とすべく,「*」にした方がいいのでしょうか?

> 従って、23番、25番は盲腸で、64番で処理されるのでなくても問題ありません。
すみません,これは過去の遺物(昔いろいろいじっていた時の名残)です
ので早速削除しておきます。

> 従って、farotさんの実験結果は有り得ないことです。
ありえないと仰られても,実際にこうなっているのですが,

> 何か見落としていることがあるはずです。
やはり VLAN が関係しているのでしょうか?

NECにメールを送ってみます。



掲示板▲頁先頭