Какие таблицы существуют в iptables
Что проверяют
Понимаете ли вы, как пакет проходит через netfilter, а не просто помните названия таблиц. Следом обычно спрашивают, в какой таблице и цепочке делать проброс порта и почему правило в filter INPUT не действует на контейнеры Docker.
Как отвечать
Таблица группирует правила по назначению, цепочка задаёт точку на пути пакета. Таблиц пять:
filter: таблица по умолчанию, если не указан-t. ЦепочкиINPUT,FORWARD,OUTPUT, действияACCEPT,DROP,REJECT;nat: трансляция адресов.DNATи проброс портов вPREROUTINGиOUTPUT,SNATиMASQUERADEвPOSTROUTING, есть иINPUT. Через неё проходит только первый пакет соединения, остальные обрабатываются по записи в conntrack;mangle: изменение полей заголовка и метки (MARK,TTL,TOS), все пять цепочек. Метки потом используют для маршрутизации по политикам и шейпинга;raw:PREROUTINGиOUTPUT, срабатывает до conntrack. Главное применение: исключить трафик из отслеживания через-j CT --notrack, например для нагруженного DNS;security: метки SELinux для мандатного контроля доступа, отрабатывает послеfilter.
Упрощённый порядок для транзитного пакета: raw, conntrack, mangle, nat PREROUTING, решение о маршрутизации, filter FORWARD, security, nat POSTROUTING.
Добавьте современный контекст: в актуальных дистрибутивах команда iptables чаще работает поверх nftables (iptables -V покажет nf_tables или legacy), а новые конфигурации пишут сразу на nft.
Где спотыкаются
Путают таблицы и цепочки и говорят «таблица INPUT».
Пишут ограничение для контейнера в filter INPUT. Трафик к опубликованному порту Docker после DNAT идёт через FORWARD, поэтому свои правила кладут в цепочку DOCKER-USER.
Забывают, что правила живут в памяти только до перезагрузки: их сохраняют через iptables-save и netfilter-persistent или аналог в вашем дистрибутиве. А ещё меняют политику на DROP по SSH, не разрешив сначала собственное соединение.