← Back to notes

Цепочки (Chains) и
таблицы в iptables


iptables — userspace-фронтенд к netfilter в ядре Linux. Структура: таблицы → цепочки → правила. Цепочка привязана к одному из netfilter-хуков: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.

С 2014 года рекомендуемая замена — nftables (nft). iptables всё ещё широко используется, но в дистрибутивах часто реализован через iptables-nft shim поверх nftables.


Таблицы и встроенные цепочки

nat применяется только к первому пакету соединения (NEW); последующие обрабатываются через conntrack автоматически.


filter

Основная таблица. Используется по умолчанию, если не указан -t.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP

nat

# SNAT через MASQUERADE (выходной интерфейс)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# DNAT (port forwarding)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 \
  -j DNAT --to-destination 192.168.1.10:80

mangle

Изменение полей заголовка и связанных метаданных:

  • TOS/DSCP (RFC 2474) — приоритет QoS;
  • TTL (с осторожностью);
  • MARK / CONNMARK — метка для policy routing (ip rule fwmark).
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1

raw

Применяется до conntrack. Используется для исключения трафика из tracking:

iptables -t raw -A PREROUTING -p tcp --dport 22 -j NOTRACK

Снижает нагрузку CPU/память conntrack-таблицы, но ломает stateful-правила и NAT для этого потока.


security

SECMARK — метки для SELinux/MAC. Применяется после filter.

iptables -t security -A INPUT -p tcp --dport 22 \
  -j SECMARK --selctx system_u:object_r:ssh_port_t:s0

Порядок прохождения пакета

Входящий:
  PREROUTING (raw  mangle  nat)
      
  routing decision
      ├─ для нас   INPUT  (mangle  filter  security)  local process
      └─ транзит  FORWARD (mangle  filter  security)  POSTROUTING (mangle  nat)

Исходящий (local):
  local process  OUTPUT (raw  mangle  nat  filter  security)
                 POSTROUTING (mangle  nat)

Более полная схема — в Netfilter packet flow.


Источники

Цепочки (Chains) и таблицы в iptables | Aleksandr Suprun