У цьому розділі ми розглянемо порядок проходження таблиць і ланцюжків у кожній таблиці. Ця інформація буде, дуже важлива пізніше, як почнете будувати свої набори правил, особливо коли у набори правил включатимуть такі дії як DNAT, SNAT і звісно ж TOS.

Коли пакет приходять на брендмаудер, він спочатку потрапляє на мережевий пристрій, перехоплюється відповідним драйвером і передається в ядро. Далі пакет проходить ряд таблиць і передається або локальній програмі, або перенаправляється до іншої машини. Порядок слідування пакета детально розглядається нижче в цьому розділі.

Детальна інформація по використанню також є в відповідній сторінці підручника: ?iptables(8). Правила прийнято додавати з командного рядка, чи за допомогою скриптів, можна і графічними засобами. netfilter/iptables складається з наступних трьох таблиць: nat, mangle та filter.

nat

Таблицю головним чином використовують для трансляції мережевих адрес та портів - Network Address Translation. NAT-товані пакети змінюють адреси відправника/отримувача згідно вказаних правил. Потік пакетів проходить цю таблицю тільки один раз. Якщо перший пакет потоку дозволений всі наступні проходять автоматично і з ними проведеться таж дія NAT-ом чи Masquerad-ом, як і з першим пакетом. Тому не використовуйте цю таблицю для фільтрації пакетів! Ланцюжок правил PREROUTING використовується для зустрічі пакетів які тільки прибули з мережі. Ланцюг OUTPUT використовують для перевірки локально зґенерованих пакетів перед проходженням ними маршрутизації. Ланцюжок POSTROUTING використовується для пакетів, що пройшли маршрутизацію перед самою відправкою в мережу.

mangle

Ця таблиця в основному використовується для зміни ІР пакетів, фільтрації пакетів на основі приналежності до сеансу зв'язку. Серед інших речей можна змінювати поля заголовку пакету, наприклад: TTL, TOS чи MARK. Хоча MARK не змінює реально пакет, а всього лиш змінну mark встановлену для пакета ядром. Інші правила чи програми можуть використовувати цю мітку для фільтрації чи складної маршрутизації, наприклад: tc. Таблиця складається аж з п'ятьох ланцюжків PREROUTING, POSTROUTING, OUTPUT, INPUT та FORWARD. PREROUTING використовують для пакетів, які щойно ввійшли на комп'ютер, ще перед маршрутизацією. POSTROUTING використовують для пакетів вже після маршрутизації, що покидають комп'ютер. OUTPUT використовується для локально згенерованих пакетів перед маршрутизацією. INPUT використовується для пакетів після маршрутизації, що призначені на локальний комп'ютер, але перед користувацькими програмами. FORWARD використовується для зміни пакетів що пройшли перше рішення маршрутизації. Таблиця mangle не використовується для NAT чи Masquerading, nat таблиця робить цей вид операцій.

filter

Таблиця filter повинна використовуватись виключно для фільтрації пакетів, для прикладу можна DROP, LOG, ACCEPT чи REJECT без проблем, як в інших таблицях. В цій таблиці є три ланцюжка. FORWARD використовується для не локально згенерованих пакетів призначених не для локального компа, тобто екран між двома мережами (firewall). INPUT використовують для пакетів, що призначені для локального комп'ютера (локальний firewall). І на кінець ланцюг OUTPUT використовують для фільтрації всіх локально згенерованих пакетів.

Порядок слідування пакетів призначених локально

Крок Таблиця Ланцюг Коментарі
1 | Пакети в середовищі передачі даних (Internet)
2 | Попали в інтерфейс (eth0)
3 mangle PREROUTING Відбувається зміна пакета, наприклад, зміна TOS ітд. Також тут здійснюється слідкування за приналежністю пакетів до сеансу зв'язку, стану.
4 nat PREROUTING Використовують в основному для DNAT.
5 | Прийняття рішення маршрутизації ядром, тобто призначення локальному процесу чи пересилка іншому вузлу. Попередні два правила можуть впливати на це рішення.
6 mangle INPUT Тут пакет проходить правила таблиці mangle ланцюжка INPUT. Ланцюг використовують для зміни пакетів після маршрутизації, але перед передачею їх локальному процесу.
7 filter INPUT Тепер настав час фільтрації для всіх вхідних пакетів для локального комп'ютера. Всі пакети призначені локальним процесам проходять крізь це правило.
8 | Локальні процеси, програми (server/client)

Важливо пам'ятати, що у цьому випадку пакети йдуть через ланцюжок INPUT, а чи не через FORWARD.

Порядок слідування власних пакетів

Крок Таблиця Ланцюг Коментарі
1 | Локальні процеси, програми (server/client)
2 | Рішення маршрутизації. Які локальні адреси використовувати, який вихідний інтерфейс, та іншу необхідну інформацію.
3 mangle OUTPUT Тут змінюються пакети, не бажано тут проводити фільтрацію. Також визначається приналежність пакетів до сеансів зв'язку, стану.
4 nat OUTPUT Для трансляції адрес вихідних пакетів.
5 | Прийняття рішення маршрутизатором. Так, що попередні ланцюжки mangle та nat впливають на це рішення.
6 filter OUTPUT Тут фільтруються пакети, що слідують з локального комп'ютера.
7 mangle POSTROUTING Ланцюг POSTROUTING таблиці mangle використовується для зміни пакетів що залишають комп'ютер після маршрутизації. Крізь ланцюг проходять пакети згенеровані локально та ті, що просуваються з інших мереж.
8 nat POSTROUTING Тут проводиться SNAT. Не використовуйте для фільтрації.
9 | Пакет передається інтерфейсу (eth0)
10 | В середовищі передачі даних (Internet)

Порядок слідування пакетів, що просуваються

Крок Таблиця Ланцюг Коментарі
1 | Пакети в середовищі передачі даних (Internet)
2 | Попали в інтерфейс (eth0)
3 mangle PREROUTING Відбувається зміна пакета, наприклад, зміна TOS ітд. Також тут здійснюється слідкування за приналежністю пакетів до сеансу зв'язку, стану.
4 nat PREROUTING Використовують в основному для DNAT.
5 | Прийняття рішення маршрутизації ядром, тобто призначення локальному процесу чи пересилка іншому вузлу.
6 mangle FORWARD Тут пакети проходять правила таблиці mangle ланцюгу FORWARD. Ланцюг використовують в спеціальних випадках для зміни пакетів після початкової маршрутизації, але перед остаточною.
7 filter FORWARD Проходять пакети, що маршрутизуються в ланцюг FORWARD. Тільки пакети , що просуваються проходять цей ланцюг і саме тут потрібно робити їх фільтрацію. Пакети що просуваються йдуть через цей ланцюг в обох напрямках, так, що над правилами варто подумати.
8 mangle POSTROUTING Ланцюг POSTROUTING таблиці mangle використовується для зміни пакетів що залишають комп'ютер після всіх маршрутизацій. Крізь ланцюг проходять пакети згенеровані локально та просуваючихся з інших мереж.
9 nat POSTROUTING Тут проводяться SNAT та Masquerading. Не використовуйте для фільтрації.
10 | Пакет передається інтерфейсу (eth1)
11 | В середовищі передачі даних (intranet)

Як можна бачити, пакет проходить кілька етапів, перш ніж буде передано далі. На кожному з цих етапів пакет можливо зупинити, це може бути ланцюжок iptables або ще щось, але нас переважно зараз цікавить iptables. Зауважте, що немає жодних ланцюжків, специфічних для окремих інтерфейсів чи чогось подібного. Ланцюжок FORWARD проходять ВСІ пакети, які рухаються через наш маршрутизатор/екран. Не використовуйте ланцюжок INPUT для фільтрації транзитних пакетів, вони туди просто не потрапляють! Через цей ланцюжок рухаються тільки ті пакети, які призначені локальному хосту.

Тепер ми знаємо, що є три різні варіанти проходження пакетів. Малюнок в наступному параграфі наочніше демонструє описані процеси проходження екрану мережевими пакетами.

Схема слідування пакетів через маршрутизатор

Цей малюнок дає досить чітке уявлення про порядок проходження пакетів через різні ланцюжки та таблиці екрану. У першій ухвалення рішення про маршрутизацію (routing decision) всі пакети, призначені даному хосту направляються у ланцюжок INPUT, інші - в ланцюжок FORWARD.

Зверніть увагу на те що, що пакети, з адресою призначення брендмаудер, зазнають зміни мережної адреси призначення (DNAT) в ланцюжку PREROUTING таблиці nat і подальшу маршрутизація у першій точці виконуватиметься залежно від зроблених змін. Запам'ятайте -- всі пакети проходять через таблиці і ланцюжки по тому чи іншому маршруту. Навіть якщо виконується DNAT в ту ж мережу, звідки пакет прийшов, він однаково продовжить рух по всім ланцюжкам.