伊藤と申します。 iptablesでIPマスカレードやフィルタを設定していて疑問に思った点です。 iptablesはipchainsからの変更点として 『ローカルを通過するパケットの流れを完全に区別して取り扱うようになりました。 外から入って来るパケットをフィルタするには、ローカルへのフィルタリング設定と、 内部 LAN へのフィルタリング設定と、両方指定する必要があります。』 (http://search.luky.org/linux-users.8/msg07480.html) というものが挙げられるようで、『Linuxネットワーク管理 第2版(オライリー)』 にも同様の事が記述されています。 ところで、iptablesにはstateful inspectionなる機能が備わっていて、(INPUTや FORWARDに対するデフォルトポリシーが -j DROP であることを前提に) # /sbin/iptables -A INPUT -i ppp+ -m state --state ESTABLISHED,RELATED -j ACCEPT とすれば、内部から発生した接続に関連するパケットのみをACCEPTする事ができる ようですが、前述のipchainsからの変更点のことを加味すると、IPマスカレードで Windows(192.168.1.2) --eth0-- Linux --eth1-- ADSLモデム -- インターネット のようにして通信する場合、上記設定は、INPUTを指定しているためローカルホスト(Linux)に 入ってくるパケットに対してのみ適用されるはずで、Windowsで発生した接続に関連する パケットをLinuxが中継するためには別途 # /sbin/iptables -A FORWARD -i ppp+ -m state --state ESTABLISHED,RELATED -j ACCEPT としなければいけないように感じました。 ところが、実際に試してみると INPUT に対する stateful inspection の1行があれば 中継も可能になり内部のホストがそれを受け取る事ができており、FORWARDの1行は必要 ありませんでした。(当然、Linuxホストが自分自身で発したインターネット向けのパケットに 対する応答パケットも受け取る事ができます。) これは、「LinuxホストがIPマスカレードによって通信を代理すると考えると、応答パケットを 受け取るのはLinuxホストであるから、(FORWARDではなく)INPUTに対するルールがあれば良い」の だと解釈していたのですが、逆に INPUT に対するルールを排除して FORWARD のルールのみ適用、 つまり、 # /sbin/iptables -A FORWARD -i ppp+ -m state --state ESTABLISHED,RELATED -j ACCEPT のみを定義したところ、Linuxホストは自分から出したパケットに対する応答パケットは 受け取れないが、Windowsはしっかり、外部からの応答パケットを受信する事ができて しまいました。 僕の解釈からすると、「IPマスカレードによってLinuxホストが通信を代理するわけだから、 Windowsから受け取ったパケットに対する応答パケットは、そのまま中継するのではなく 一度Linuxホストが取り込むのでINPUTに stateful inspection の一文を書けば良い」 というものだったのですが、FORWARDのみの定義で(IPマスカレードを行っている Linuxホストを除いた)内部のホストのみが通信できてしまったとなると、IPマスカレードに よって入ってくる応答パケットはやはり、FORWARDルールで別途定義する必要がある、 の方が正しい気がしました。しかし、INPUTに対する一文だけで、(FORWARDが無くても) IPマスカレードを行っているホスト自身も、内部のホストも、応答パケットを受け取ること ができてしまいます。 この原理についてどう解釈するべきなのか、混乱してしまいました。どなたかポインタでも 結構ですので知恵を貸していただけないでしょうか? -- Naoya Ito <naoya _at_ phys.aoyama.ac.jp>
Follow-Ups:
- [linux-users:91028] Re: IPマスカレードとiptalesのstateful inspectionMunesato -NAK- Nakada
- [linux-users:91031] Re: IPマスカレードとiptalesのstatefulinspectionMATSUDA Yoh-ichi / 松田陽一
- Prev by Subject: [linux-users:91024] Re: 安全な通信方法
- Next by Subject: [linux-users:91026] Re: 外字の扱い
- Previous by thread: [linux-users:91018] Re: 引数リストが長すぎます
- Next by thread: [linux-users:91028] Re: IPマスカレードとiptalesのstateful inspection
- Indexes:[Main][Thread]