このチャプターでは、マッチについて掘り下げる。僕はマッチを 5 つのサブカテゴリーに分類することにした。最初に扱うのが 汎用的なマッチ (generic matches) で、これはあらゆるルールに使用できる。次は、 TCP パケットにだけ用いる TCPマッチ。 UDP パケットにだけ用いる UDPマッチ 、それに、 ICMP パケットにだけ使用できる ICMPマッチ。そして最後に、 state, owner, limit マッチなどの特殊なマッチを扱う。最後のグループに含まれるマッチは、必ずしも互いに区別されるべきものではないのだが、さらに数個のサブカテゴリーに細分化することにした。これが理にかなった分類であり、皆さんの理解の助けになることを願うばかりだ。
前のチャプターを読んだ人ならもうお分かりだと思うが、マッチとは、パケット内に見られる真 (あるいは偽) であるべき某かの条件を指定するものだ。ひとつのルールは複数のマッチを持つことができる。例を示そう。実際にありそうなケースとして、身内のローカルエリアネットワーク内の特定のホストの出したパケットで、なお且つ、そのホスト上の特定のポートから発したパケットをマッチさせたい場合を考える。この場合、特定の送信元アドレスを持ち、 LAN とつながっているインターフェイスを通じて届き、なお且つ、指定したポート群のうちのいずれかに一致するパケットだった時にだけ、ターゲット (つまりジャンプ定義) を適用せよ、という指示を行うマッチを使用する。もしも、このルールの中のマッチがひとつでも一致し損なえば (例えば、他の全ての条件は満たしているが送信元アドレスだけが違っていた場合)、このルールそのものが不一致ということになり、パケットは次のルールの試験へ引き渡される。かたや、マッチが全て満たさされる場合には、ルール中で指定したターゲットが適用される。