Next Previous Contents

6. 封包如何穿越(traverse)过滤

核心从 'filter' 表格的三个列表(lists) 开始﹔这三个列表叫做 firewall chains(防火墙链) 或就叫 chains(链)。 这三个链分别为INPUTOUTPUT ﹑和 FORWARD

这跟 2.0 和 2.2 核心有很大差别哦﹗

对于 ASCII 艺术迷来说﹐各链(chains)的布置如下﹕

                          _____
Incoming                 /     \         Outgoing
       -->[Routing ]--->|FORWARD|------->
          [Decision]     \_____/        ^
               |                        |
               v                      ____
              ___                    /    \
             /   \                  |OUTPUT|
            |INPUT|                  \____/
             \___/                      ^
               |                        |
                ----> Local Process ----

其中三个圈代表著前述的三个链﹐当一个封包抵达上图中的其中一个圈﹐相应的链就会接受检验(examined)﹐以决定那个封包的命运。如果链说 DROP 掉这个封包﹐那么它就会就地正法﹐但如果链说 ACCEPT 这个封包﹐那么它就继续在图示中穿越。

一个链(chain)其实就是众多规则(rules)中的一个检查清单(checklist)。每一条规则都会说“如果封包表头看起来像这样﹐就如此这般处置这个封包”。如果规则的设定和封包并不符合(match)﹐那么就交由链中的下一个规则继续处理。而最终﹐如果再没有规则可以参考﹐那么核心就会看链的policy(原则) 以决定怎么做。在一个安全至上的系统里﹐原则(policy)通常都会告诉核心 DROP 掉该封包。

  1. 当一个封包进入的时候(假设﹐通过 Ethernet 网路卡)﹐核心首先看看封包的目的地(destination)﹕这称之为 ' rouging (路由)'。
  2. 如果目的地址为本机﹐这个封包就按图示下行至 INPUT 链。如果它能够通过﹐那么等待这个封包的行程(processes)就将之接管下来。
  3. 否则﹐如果核心并没启动转递功能(forwarding)﹐或是它不知道如何转递这个封包﹐那么这个封包就会被丢弃(dropped)。如果转递功能已经启动﹐同时封包指向另一个网路界面(如果您还有另外一张)﹐然后这个封包就按图示右行至 FORWARD 链。如果它被接受(ACCEPT)﹐那么它就会被送出去。
  4. 最后一种情形﹐一个在本机运行的程序会送出网路封包。封包就直接交给 OUTPUT 链﹕如果是 ACCEPT﹐然后这个封包会继续送出至它所指向的界面。


Next Previous Contents