🔥 Цепочки (Chains) в iptables
iptables — это система фильтрации пакетов в Linux, основанная на подсистеме netfilter ядра.
Она состоит из таблиц (tables), каждая из которых содержит цепочки (chains).
Цепочки представляют собой упорядоченные списки правил, применяемых к сетевым пакетам в зависимости от их направления и стадии обработки.
🧩 Основные таблицы и цепочки
| Таблица | Назначение | Основные цепочки |
|---|---|---|
| filter | Фильтрация пакетов (принимать/отклонять) | INPUT, OUTPUT, FORWARD |
| nat | Трансляция адресов (маскарадинг, переадресация портов) | PREROUTING, POSTROUTING, OUTPUT |
| mangle | Изменение (модификация) пакетов | PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD |
| raw | Исключение пакетов из отслеживания соединений (conntrack) | PREROUTING, OUTPUT |
| security | Дополнительные политики безопасности (SELinux, AppArmor) | INPUT, OUTPUT, FORWARD |
🧱 1. Таблица filter — основная для firewall
Это основная таблица, отвечающая за приём и блокировку пакетов.
Если таблица не указана явно (iptables -A INPUT ...), используется именно filter.
| Цепочка | Назначение |
|---|---|
| INPUT | Обрабатывает пакеты, направленные *в сервер* |
| OUTPUT | Обрабатывает пакеты, исходящие *из сервера* |
| FORWARD | Обрабатывает пакеты, проходящие *через сервер* (маршрутизируемые) |
📘 Пример:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
🌐 2. Таблица nat — трансляция адресов
Таблица nat (Network Address Translation) отвечает за изменение адресов в пакетах:
- подмена исходного адреса при выходе в интернет (MASQUERADE, SNAT);
- перенаправление портов (DNAT, портфорвардинг).
| Цепочка | Назначение |
|---|---|
| PREROUTING | Изменяет адрес назначения до маршрутизации |
| POSTROUTING | Меняет адрес источника после маршрутизации |
| OUTPUT | Применяется к локально исходящим пакетам |
🔹 Примеры:
- Маскарадинг (исходящий NAT):
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- Проброс порта (DNAT):
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80
🧬 3. Таблица mangle — «тюнинг» пакетов
Таблица mangle используется для изменения полей заголовков пакетов — например:
- установка TOS/DSCP (приоритет трафика),
- изменение TTL (time-to-live),
- маркировка пакетов (для QoS или маршрутизации).
| Цепочка | Назначение |
|---|---|
| PREROUTING | Изменяет пакеты до маршрутизации |
| POSTROUTING | Изменяет пакеты после маршрутизации |
| INPUT | Для пакетов, адресованных серверу |
| OUTPUT | Для пакетов, отправляемых сервером |
| FORWARD | Для пакетов, проходящих через сервер |
🔹 Пример — маркировка пакетов:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
⚡ 4. Таблица raw — обход conntrack
Таблица raw используется до системы отслеживания соединений (conntrack).
Позволяет исключать пакеты из state tracking — это снижает нагрузку, но требует осторожности.
| Цепочка | Назначение |
|---|---|
| PREROUTING | Для входящих пакетов (до conntrack) |
| OUTPUT | Для исходящих пакетов (до conntrack) |
🔹 Пример:
iptables -t raw -A PREROUTING -p tcp --dport 22 -j NOTRACK
🛡️ 5. Таблица security — политика SELinux / AppArmor
Таблица security применяется для реализации MAC-политик (Mandatory Access Control), таких как SELinux или AppArmor.
Используется в основном в корпоративных и критически безопасных системах.
| Цепочка | Назначение |
|---|---|
| INPUT | Безопасность входящих пакетов |
| OUTPUT | Безопасность исходящих пакетов |
| FORWARD | Контроль пересылаемых пакетов |
🔹 Пример:
iptables -t security -A INPUT -p tcp --dport 22 -j SECMARK --selctx system_u:object_r:ssh_port_t:s0
🧠 Общая схема прохождения пакета
Входящий пакет:
PREROUTING (raw → mangle → nat)
↓
Маршрутизация (решаем: в сервер или через сервер)
↓
если в сервер → INPUT → локальный процесс
если через сервер → FORWARD → POSTROUTING (mangle → nat)
Исходящий пакет:
Локальный процесс → OUTPUT (raw → mangle → nat → filter)
↓
POSTROUTING (mangle → nat)
📘 Итоговая таблица всех цепочек
| Таблица | Цепочки | Назначение |
|---|---|---|
| filter | INPUT, OUTPUT, FORWARD | Основная фильтрация пакетов |
| nat | PREROUTING, POSTROUTING, OUTPUT | Трансляция IP (NAT, DNAT, SNAT) |
| mangle | PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD | Модификация заголовков, маркировка |
| raw | PREROUTING, OUTPUT | Управление conntrack (NOTRACK) |
| security | INPUT, OUTPUT, FORWARD | Метки SELinux / MAC-политика |
🔗 Полезные ссылки: