完全理解TCP/IPの質問

P268図5-6(C)に質問があります。

(1)-P input deny
(2)-A input -p tcp -d 10.1.1.0/255.255.255.0 80 -y -j DENY
(3)-A input -p tcp -s 10.1.1.0/255.255.255.0 80 -y -j ACCEPT
(4)-A input -p tcp -b -d 0.0.0.0/0 80 -j ACCEPT

とありますが、(4)は(2)の前の前に書くべきような気がしますが・・・
このままだと(2)でDENYしたのに(4)で解除されるのではないかと思うんですが
間違ってますか?

名前: 
aki
日時: 
01/09/05 02:20

コメント

ipchainsコマンドで指定したフィルタ条件は,上から順に条件を評価し,条件に合致する行が見つかった時点でその行に書いてある動作を実行し,そこで実行を終わります。その下の条件判定は行わない点に注意してください。

P268図5-6(C)の例だと,(2)の条件に合致したパケットは,そこでDENYを実行,つまり,パケットは廃棄され,その下の条件判定は行いません。そして,(2)の条件に合致しないパケットが(3)と(4)の条件判定を行うことになります。そのため,(4)までたどり着くパケットは,(2)と(3)のいずれの条件にも合致しないものだけとなります。つまり,宛先アドレスが10.1.1.0/255.255.255.0で宛先ポート番号が80のものは,(2)の条件に合致するのでDENYされ,それ以外のパケットが(4)の条件に合致してACCEPTされます。(2)でDENYしたものが(4)でACCEPTされることはありません。
また,(4)はポート番号80のパケットが全部合致するので,それを(2)の前に書くと,(2)の条件が実質的に無効になります。(2)でDENYするつもりだったパケットが,(2)にたどり着く前に(4)でACCEPTされてしまうからです。

どうでしょう,この説明でわかります?

早速教えていただきありがとうございます。
先生の本はわかりやすく詳しいので感動してます。
ところで、もう1点質問があるのは

>上から順に条件を評価し,条件に合致する行が見つかった時点でその行に書いてある動作を実行し,そこで実行を終わります。

という点ですが、1行目の
(1)-P input deny
のみ見て終了にはならないのですか?
-Pの場合は次の条件(-A)を見るが-Aの場合は条件に合致したら終了するという考えで良いのでしょうか?

>という点ですが、1行目の
>(1)-P input deny
>のみ見て終了にはならないのですか?

-Pはデフォルト動作を設定するものなので,例外だと考えればいいでしょう。
デフォルト動作ですから,-Aで設定した条件のどれにも合致しない場合に,
-Pで設定した動作が実行されます。
だから,条件の最後にある,と考えてもいいかもしれません