7

Я видел этот фрагмент iptables в другом ответе суперпользователя:

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Суть в том, чтобы всегда разрешать пакеты, которые отправляются как часть установленного соединения. Часть, о которой я задаюсь вопросом, это две верхние строчки.

Для цепочки INPUT , какой смысл писать -m conntrack --ctstate RELATED,ESTABLISHED и -m state --state RELATED,ESTABLISHED . Вроде бы оба должны делать одно и то же?

Объяснение разницы между этими двумя было бы здорово.

2 ответа2

3

Основной ответ:

Conntrack заменяет state , но в современных ядрах нет никакой разницы между ними. State в настоящее время имеет псевдоним и транслируется в conntrack в iptables, если ядро его имеет, поэтому синтаксис -m state --state фактически транслируется в -m conntrack --ctstate и обрабатывается тем же модулем.

Однако на некоторых старых ядрах Contrack должен быть специально включен.

Возможное объяснение:

Мне кажется, что в приведенные вами правила включены дубликаты, рассчитанные как на старые, так и на новые ядра.

Или, может быть, это всего лишь случай программирования культа Cargo.

1

Есть вопрос на ServerFault 2012 года:

В чем практическая разница между:

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

а также

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Какой из них лучше всего использовать?

Принятый ответ :

Оба используют одни и те же внутренние компоненты ядра (подсистема отслеживания соединений).

Заголовок xt_conntrack.c:

xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)

Поэтому я бы сказал - модуль состояний проще (и, возможно, менее подвержен ошибкам). Это также больше в ядре. Conntrack на другой стороне имеет больше опций и возможностей [1].

Мой призыв - использовать conntrack если вам нужны его возможности, в противном случае придерживайтесь модуля состояния.

Подобный вопрос на netfilter maillist.

[1] Очень полезно, например, -m conntrack --ctstate DNAT -j MASQUERADE" routing/DNAT fixup ;-)

Один из других ответов приводит к этому документу о iptables. Это говорит:

conntrack - это расширенная версия сопоставления state , которая позволяет сопоставлять пакеты гораздо более детально. Это позволяет вам просматривать информацию, непосредственно доступную в системе отслеживания соединений, без каких-либо "внешних" систем, например, в state соответствия.

Так что я думаю, что это правда (из еще одного ответа там):

Нет разницы в результатах этих двух правил.

Обратите внимание, что под вопросом также есть интересный комментарий:

state устарело в пользу conntrack и может или не может быть скомпилировано в зависимости от того, как было построено ваше ядро.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .