Порядок прохождения трафика через файрвол в linux зависит о типа трафика.
Для транзитного трафика он выглядит так:
![](https://wp.ipnets.ru/wp-content/uploads/2022/05/iptables-basics-1-0051.png)
Самое важное, что следует понять из этой схемы, что транзитный трафик никогда не попадает в цепочки INPUT и OUTPUT, а преобразование адреса назначения (DNAT) выполняется перед фильтрацией.
Для локальных пакетов стандартный порядок будет следующим:
![](https://wp.ipnets.ru/wp-content/uploads/2022/05/iptables-basics-1-0061.png)
Прежде всего следует запомнить, что локальный трафик никогда не попадает в цепочки FORWARD. Также, в отличии от транзитного трафика, локальный представлен двумя видами пакетов: входящими и исходящими. Путь входящего пакета ограничивается цепочками PREROUTING и INPUT, а исходящего OUTPUT и POSTROUTING, т.е. если нам нужно выполнить преобразование адреса назначения (DNAT) для локального пакета, то мы должны сделать это в цепочке OUTPUT, потому что в PREROUTING такой пакет никогда не попадет.
Список доступных цепочек в таблицах iptables:
![](https://wp.ipnets.ru/wp-content/uploads/2022/05/iptables-basics-1-0011-1024x263.png)
Маршрутизация трафика DNAT и SNAT выглядит следующим образом:
![](https://wp.ipnets.ru/wp-content/uploads/2022/05/iptables1.png)