Есть вопрос на 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
и может или не может быть скомпилировано в зависимости от того, как было построено ваше ядро.