- ベストアンサー
ルータでのftpに関するフィルタリング設定について
YamahaRT54iというブロードバンドルータを利用しております。 このルータのパケットフィルタリング設定項目に、 インターネットからローカルネットワークへの、送信元ポートが20番のものについては、通過を許可するという設定があります。 これはつまりftpの設定で、ftpでパッシブモードではなくアクティブモードで通信する場合、ファイル転送用の通信路としてftpサーバーの20番ポートからクライアントであるこちら側へ経路が張られるから、これを許可しないと暗黙のdenyによってはじかれてしまいftp通信がうまくいかなくなることへの回避策なのですが、 これがオンにされることでどうしてftp通信がうまくいくのか理解できません。 というのもローカルネットワークはルータのNATによって隠蔽されているはずで、たとえローカルネットワークへのftpdata通信を許可したところで、送信先のローカルアドレスがわからないはずであり、したがって通信が成立するはずがないのですが、しかし実際にはうまくいきます。 例えばローカルネットワーク内でWebサーバーを運用した場合、ルータにてルータの80番ポートへのアクセスをWebサーバー機に転送するポートフォワーディングを設定しなければ通信がうまくいきません。しかしftpに関してそのような設定は一切行っておりません。にもかかわらず通信がうまくいくのはどうしてなのでしょうか? 説明が下手でわかりにくいでしょうが、よろしくお願いします。 長々と失礼しました。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
試してみました。確かにポート20からの通過を許可する静的フィルタ設定のみでNATを通過しますね。本来そのようなことは発生しないはずですので、ファームウェアがftpを知っていてftpdataポートを特別扱いしているものと解する他はないかと思います。 Release note for YAMAHA NetVolante RTA54i http://www.rtpro.yamaha.co.jp/RT/docs/relnote/RTA54i/ のリビジョンRev.4.05.14(最新)のリリースノートの中に 「[12] NAT/IPマスカレードで、FTPとして認識するポート番号を設定できるようにした。」(nat descriptor ftp port DESC PORT [PORT...]) というものがあります。この設定のデフォルト値は21と書いてあるのですが、試しに nat descriptor ftp port 200 22 (注:ディスクリプタ番号200は、RT54iのWANポート側のデフォルトディスクリプタ番号) と設定するとコマンド設定一覧にnat descriptor ftp port 200 22が表示され、ftpでftpdataを使った転送(dirコマンドの実行等)ができなくなります。 nat descriptor ftp port 200 21 を実行するとコマンド設定一覧にnat descriptor ftp portが表示されなくなり、再度ftpdataを使った転送ができるようになります。 ですので、この機能は標準でオンになっており、NATはポート21の通信(特にPORTコマンド)を、言わば勝手に監視し、動的フィルタと同じ動作をしているものと考えられます。
その他の回答 (3)
- yyamagu
- ベストアンサー率40% (21/52)
> この機能はルータなら大概はもっているものなのでしょうか? 具体的な製品知識はありませんが、NATルータならば大概持っていると思います。少なくともRT54i特有というような機能ではありません。 NATとFTPの相性の悪さは昔から有名な問題です。 > 何か名称はついていないのでしょうか? 知りません。多分一般的に通じる名称はないと思います。 より深く勉強したいということであれば、LinuxのIPマスカレードや、そのFTPについての拡張である"ip_masq_ftp"について調べるのが良いと思います。
お礼
追加情報ありがとうございます。 "ip_masq_ftp"なるものの存在を初めて知りました。次の休みのときにでもいろいろといじってみようと思います。
- yyamagu
- ベストアンサー率40% (21/52)
アクティブモードの場合は、クライアントからサーバに対して、必ずPORTというコマンドが送られます。 PORTコマンドにはデータ接続で使うためのポート番号の情報が含まれます。 ルータはこれを解釈して、そこに書いてあるポートを一時的に開けます。このPORTコマンドには当然コマンドを発行したクライアントのアドレス(この場合ローカルアドレス)も記述されてます。 ですから、ルータは誰のために一時的にポートを開けたのか知っているわけです。
お礼
なるほど!ありがとうございます。疑問が解けました。 すみません。ちょっと質問なのですが、この機能はルータなら大概はもっているものなのでしょうか?また、何か名称はついていないのでしょうか?
- seiiiichi
- ベストアンサー率41% (79/190)
内容がよくわからない部分もあるのですが、 FTPサーバはインターネット側にあるんですよね。 (「インターネットからローカルネットワークへの、 送信元ポートが20番のものについては...」からも そう思いますし。) そして、例で出されたWebサーバはLAN側にあるんですよね。 であれば、FTPがうまくいくのは、LAN内からインターネット上の Webサーバにアクセスが可能であることと同じ理屈では ないでしょうか? もし、インターネットからローカルネットワークへの、 送信元ポート80番を「拒否」したら、インターネット上の Webサーバにはアクセスできないです。 NATしててもインターネット上のサーバへのアクセスが 可能なのは、NATしているルータが、送信元のIPとポート番号、NAT後のIPアドレスとポート番号などを覚えていて リプライが来たら再度送信元に変換するので問題ないです。
お礼
早速のご回答ありがとうございます。 自分で読み返しても理解しがたいひどい質問文でした。お詫びします。 ご存知かと思いますが整理のために書きます。ftpのアクティブモードでの通信は、まずNATの内側のPCクライアントから、NATの外側つまりネット上のftpサーバーの21番ポートへ向けてコネクションが張られます。しかしこのコネクションは制御用で、実際にデータの送受信に使われるのはこのコネクションではなく、最初のコネクションが張られたあとに今度はftpサーバー側の20番ポートからクライアント側へコネクションが張られ、これがデータ送受信に使われます。これは通常のNATの内側から外側への通信とは決定的な違いあって、通常の通信であればコネクションが内側から外側へ張られ、以降の通信はそれのみを使って行うのですが、ftpの場合はそうではなく、内側から外側へ張られたコネクションとは別に、外側から内側へ張られるコネクションがあります。 seiiiichiさんがおっしゃるように、通常の通信であれば、NATの内側のあるPCをAとすると、Aの1024番ポートからgoogleの80番ポートへ通信パケットが発生し、このパケットがルータに到達した時点でルータはパケットの送信元アドレスをグローバルIPに、送信元ポートをランダムなものに書き換えます。そして書き換える前のパケットの送信元アドレス・ポート、書き換え後のポート、送信先のアドレス・ポートを記録します。そしてパケットがgoogleに届き、googleからのリプライが返ってきたとき、送信元アドレス・ポートが元パケットの送信先アドレス・ポートと一致し、送信先ポートが上記で書き換えたランダムなものと一致すれば、そのパケットの送信先アドレスをAのアドレスに、送信先ポートを1024に書き換えてNATの内側へ流します。これなら通信がうまくいくことは納得できます。しかしftpサーバーの20番ポートからAへのコネクションについては、発生元が外部からですから、ルータは記録を行っていないのです。つまり、サーバーの20番ポートからクライアントのランダムなポート番号へコネクションを張ろうとしてもルータにはその記録はないので、このパケットは破棄されるはずです。ということはftpに関して特例的な機能があるはずなのですが、説明書その他を調べてもそういった記述はないのです。ですから、疑問に思い質問した次第でした。
お礼
疑問が解けました。ありがとうございます。 このftpとして監視するポートを指定する機能、最新のリビジョンで搭載されたそうですが、それ以前からftpに関しては前述のフィルタリング設定をオンにすることで何も問題はありませんでした。 ということはこのftpポートを監視するという機能自体は、最新のリビジョンで新たに搭載されたものではなくて、もとからあったものなのですね。それで、最新のリビジョンではそのポートを指定できるようになった、ということなのですね。