カーネルの中で何が行われるのか見てみましょう。正確な説明はIPCHAINS-HOWTOを御覧ください。
ところでなぜ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種類あります。
あたかもpacketを受けとらなかったのように振舞います。
DENYに似ていますが、sourceにICMPを使ってdestinationに到達できなかった旨を知らせます。
packetを受けとります
そのchainの最後にいったことと同じことをします。
packetをmasqueradeします。今の所これ以上の説明はできません。
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のパッケージにもテキストで附属してきてますので、是非目を通してみてください。