Я не претендую на звание эксперта по iptables
правилам, но первая команда использует расширение отслеживания соединений ( conntrack
), а вторая использует state
расширение.
Точка данных № 1
Согласно этому документуconntrack
расширение вытеснены state
.
Obsolete extensions:
• -m state: replaced by -m conntrack
Точка данных № 2
Тем не менее, я нашел этот SF Q & A под названием: Вопросы брандмауэра о состоянии и политике? где ФП заявил, что задал этот вопрос на IRC в # iptables @ freenode. Обсудив это, он пришел к выводу, что:
Технически соответствие conntrack заменяет - и, следовательно, устаревшее - соответствие состояния. Но практически государственный матч никак не устарел.
Точка данных № 3
Наконец, я нашел этот SF Q & A под названием: Iptables, в чем разница между -m state и -m conntrack? , Ответ на этот вопрос, вероятно, является лучшим доказательством и советом о том, как рассматривать использование conntrack
и state
.
выдержка
Оба используют одинаковые внутренние компоненты ядра (подсистема отслеживания соединений).
Заголовок файла xt_conntrack.c:
xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)
Поэтому я бы сказал - модуль состояний проще (и, возможно, менее подвержен ошибкам). Это также больше в ядре. Conntrack с другой стороны имеет больше опций и возможностей [1] .
Мой призыв - использовать conntrack, если вам нужны его функции, в противном случае придерживайтесь модуля состояния.
[1] Очень полезно, например, "-m conntrack --ctstate DNAT -j MASQUERADE"
исправление маршрутизации / DNAT ;-)
Точка данных № 4
Я нашел эту ветку в обсуждениях netfilter@vger.kernel.org netfilte / iptables под названием: сопоставление состояний устарело в версии 1.4.17 , которая говорит, что state
это просто псевдоним, conntrack
поэтому не имеет значения, какой вы используете, в оба обстоятельства вы используете conntrack
.
выдержка
На самом деле, я должен согласиться. Почему мы не сохраняем «состояние» как псевдоним и не принимаем старый синтаксис в «conntrack»?
состояние в настоящее время является псевдонимом и преобразуется в conntrack в iptables, если оно есть в ядре. Сценарии не сломаны.
Если псевдонимы сделаны в пользовательском пространстве, часть ядра может быть удалена - возможно, когда-нибудь.
Псевдоним уже сделан в пользовательском пространстве. Один из них вводит «state», и он преобразуется в «conntrack», а затем отправляется ядру. (Итак, насколько я вижу, если псевдонимы модулей ipt_state и т. Д. Были добавлены в модуль conntrack, даже модуль ядра состояния может быть удален.)
Рекомендации