Напред Назад Съдържание

6. Как пакетите преминават през филтрите

Първоначално в ядрото има три списъка от правила във `filter' таблицата; тези списъци се наричат вериги с правила за филтриране (firewall chains) или просто вериги (chains). Тези три вериги се наричат INPUT (вход), OUTPUT (изход) и FORWARD (препращане).

За феновете на ASCII арта, веригите са подредени ето така: (Забележка: подреждането е доста по различно от това при ядра весрии 2.0 и 2.2 !)

                          _____
входящи                  /     \         изходящи
       -->[рутинг ]---> |FORWARD|------->
          [решение]      \_____/        ^
               |                        |
               v                       ____
              ___                     /    \
             /   \                   |OUTPUT|
            |INPUT|                   \____/
             \___/                      ^
               |                        |
                ----> локален процес ----

Трите кръга представляват веригите за които се спомена по-горе. Когато един пакет достигне до някой от кръговете на диаграмата се проверяват правилата в тази верига и се решава съдбата на пакета. Ако веригата каже пакета да бъде отхвърлен (DROP), то той бива заличен веднага, но ако решението е той да бъде приет (ACCEPT) пакета продължава пътя си по диаграмата.

Веригата е списък от правила. Всяко правило гласи `ако заглавната част на пакета изглежда така, то направи с този пакет ето това'. Ако пакетът не отговаря на изискванията в това правило, то се преминава към следващото във веригата. И накрая, ако няма повече правила с които да се сравни пакета ядрото решава съдбата му съгласно политиката (policy) на веригата. Обикновено, ако в една система се държи на сигурността, то политиката казва на ядрото да откаже пакета.

  1. Когато се получи пакет (примерно от мрежовата карта) ядрото първо поглежда за къде е адресиран той: това се нарича `рутиране'.
  2. Ако е адресиран за тази машина, то пакетът преминава надолу по диаграмата към INPUT веригата. Ако премине през нея процеса чакащ този пакет ще го получи.
  3. В противен случай, ако в ядрото не е активирано прехвърлянето на пакети (forwarding), или пък то не знае в каква посока да го пренасочи, пакета ще бъде отказан. Ако пък прехвърлянето е включено и пакетът е насочен към друг мрежов интерфейс (ако имате такъв), тогава той отива надясно в диаграмата, към FORWARD веригата. Ако премине успешно през нея ще бъде изпратен по другия интерфейс.
  4. И накрая, програма работеща на машината може да изпраща пакети. Те минават директно към OUTPUT веригата: ако тя каже, че пакета може да премине той продължава към който интерфейс е бил насочен.


Напред Назад Съдържание