前のページ 次のページ 目次

3. 何が行われるのか

カーネルの中で何が行われるのか見てみましょう。正確な説明はIPCHAINS-HOWTOを御覧ください。

3.1 chainとはなんぞや

ところでなぜchainという名が使われてるのでしょうか。これは、ルールの適用が鎖の様に連なっていっているからではないかと思います。例えばこんな感じです。

input
rule0: → (nothing but counting packets)
rule1: → ppp-in
           rule0: → DENY
           rule1: → RETURN
           rule2: → ACCEPT
rule2: → REJECT

packetが入ってくるとまずinputという選別規則鎖(chain)から見ます。例ではrule(例えばある特定のマシン行きであるかどうか、などの規則)が3つあり、上から順に適用(matching)されていきます。ruleに適合(match)すると、なんらかの指示(target)があるのですが、rule0にmatchすると何もしないで、ただmatchするようなpacketがどれだけ来たかを数えるために使われます。rule1にmatchするとppp-inという新たな鎖へと移り、またruleの適用が始まります。またruleをみて行き全部みおわったら、もとの鎖にもどりinputのrule2から見始めるわけです。同様にpacketがでていく時にはoutput chainから、転送される時にはforward chainからmatchingが始まります。

DENY、REJECT、ACCEPTといったtargetは最終的なpacketの扱いを決めるもので、全部で6種類あります。

DENY

あたかもpacketを受けとらなかったのように振舞います。

REJECT

DENYに似ていますが、sourceにICMPを使ってdestinationに到達できなかった旨を知らせます。

ACCEPT

packetを受けとります

RETURN

そのchainの最後にいったことと同じことをします。

MASQ

packetをmasqueradeします。今の所これ以上の説明はできません。

REDIRECT

packetをlocal portに転送します。今の所これ以上の説明はできません。

RETURNの解説をしましょう。例で、inputのrule1にmatchするとppp-inのrule0からmatchingをはじめますが、rule1にmatchすると、rule2を調べずに、inputのrule2のmatchingにとびます。ppp-inがsubroutineのようだ、というとプログラミングに慣れてる方にはわかりやすいかもしれません。

では、どこにもmatchしなかったpacketはどうなるのでしょう。そういったpacketに対するデフォルトを指定するものとしてポリシーの指定があります。ポリシーには、ACCEPT、DENY、REJECT、MASQ(forward chainのみ)が指定できます。

…なんともあやしげな解説ですね。HOWTOはipchainsのパッケージにもテキストで附属してきてますので、是非目を通してみてください。


前のページ 次のページ 目次