[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:91025] IPマスカレードとiptalesのstatefulinspection


伊藤と申します。

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>

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: