Was ist der Unterschied zwischen -m conntrack --ctstate und -m state --state?

85

Ich lese dieses Howto und es gibt so etwas wie dieses:

Wir können etablierten Sitzungen erlauben, Datenverkehr zu empfangen:

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

Die obige Regel enthält keine Leerzeichen auf beiden Seiten des Kommas in ESTABLISHED, RELATED

Wenn die obige Zeile nicht funktioniert, befinden Sie sich möglicherweise in einem kastrierten VPS, dessen Anbieter die Erweiterung nicht zur Verfügung gestellt hat. In diesem Fall kann eine minderwertige Version als letzter Ausweg verwendet werden:

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

Gibt es einen signifikanten Unterschied in der Arbeit zwischen -m conntrack --ctstateund -m state --state? Sie sagen, dass man vielleicht nicht arbeitet, aber sie sagen nicht warum. Warum sollte ich eins dem anderen vorziehen?

Mikhail Morfikov
quelle
1
Mögliche Dup von serverfault.com/questions/358996/…
John1024
Ich sehe es, sollte ich diese Frage entfernen?
Mikhail Morfikov
1
@ John1024 - Duplikate befinden sich nur innerhalb einer einzigen SE-Site. Es ist völlig in Ordnung, ähnliche Fragen auf mehreren SE-Sites zu stellen, solange die Qs den Regeln für eine bestimmte SE-Site entsprechen!
slm
1
@MikhailMorfikov - Ihre Frage, obwohl ähnlich wie bei anderen Qs auf anderen SE-Sites, ist hier vollkommen in Ordnung!
slm
1
@Totor - wenn du meinen "Datenpunkt # 4" in meiner Antwort siehst, stateist das eigentlich ein Alias ​​für conntrack. Also ist es egal. Ich nehme an, irgendwann in der Zukunft werden sie möglicherweise stateganz entfernt, aber im Moment spielt es keine Rolle, ob Sie es verwenden.
SLM

Antworten:

99

Ich behaupte nicht, ein Experte mit iptablesRegeln zu sein, aber der erste Befehl verwendet die Connection Tracking-Erweiterung ( conntrack), während der zweite die stateErweiterung verwendet.

Datenpunkt # 1

Nach diesem Dokument hat die conntrackErweiterung abgelöst state.

 Obsolete extensions:
  • -m state: replaced by -m conntrack

Datenpunkt # 2

Trotzdem fand ich diese SF- Fragen und Antworten mit dem Titel: Firewall-Fragen zu Status und Richtlinien? wo das OP behauptete, diese Frage im IRC in # iptables @ freenode gestellt zu haben. Nachdem er es dort besprochen hatte, kam er zu dem Schluss, dass:

Technisch gesehen ersetzt das Conntrack-Match das State-Match - und ist damit überholt. Aber praktisch ist das Staatsmatch in keiner Weise überholt.

Datenpunkt # 3

Zuletzt fand ich diese SF Q & A mit dem Titel: Iptables, was ist der Unterschied zwischen -m state und -m conntrack? . Die Antwort auf diese Frage ist wahrscheinlich der beste Beweis und Rat, wie die Verwendung von conntrackund angezeigt werden kann state.

Auszug

Beide verwenden die gleichen Kernel-Interna (Connection Tracking Subsystem).

Header von xt_conntrack.c:

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

Also würde ich sagen - Zustandsmodul ist einfacher (und vielleicht weniger fehleranfällig). Es ist auch länger im Kernel. Conntrack auf der anderen Seite bietet mehr Optionen und Funktionen [1] .

Mein Aufruf ist, conntrack zu verwenden, wenn Sie dessen Funktionen benötigen, ansonsten bleiben Sie beim Zustandsmodul.

[1]"-m conntrack --ctstate DNAT -j MASQUERADE" Sehr nützlich wie Routing / DNAT-Fixup ;-)

Datenpunkt # 4

Ich fand diesen Thread aus dem [email protected] netfilte / iptables Diskussionen, mit dem Titel: Zustand Spiel ist veraltet 1.4.17 , was ziemlich viel sagt , dass stateist nur ein Alias , conntrackdamit es nicht wirklich wichtig , die Sie verwenden, in beide Umstände verwenden Sie conntrack.

Auszug

Eigentlich muss ich zustimmen. Warum behalten wir nicht "state" als Alias ​​bei und akzeptieren die alte Syntax in "conntrack"?

state ist derzeit aliasiert und wird in iptables in conntrack übersetzt, wenn der Kernel es hat. Es sind keine Skripte fehlerhaft.

Wenn das Aliasing im Userspace erfolgt, kann der Kernel-Teil entfernt werden - vielleicht eines Tages.

Das Aliasing erfolgt bereits im Userspace. Man gibt "state" ein und es wird in "conntrack" umgewandelt und das wird dann an den Kernel gesendet. (Soweit ich sehe, ob die Aliase des Moduls ipt_state, etc zum Modul conntrack hinzugefügt wurden, konnte sogar das Modul state kernel entfernt werden.)

Verweise

slm
quelle
3

Ich bin kein Netfilter-Experte, aber ich habe in der Manpage zu iptables-extension nachgesehen und bin überrascht, dass es so ist

The "state" extension is a subset of the "conntrack" module.

State ist also ein Teil von conntrack und nur eine einfachere Version davon, wenn Sie wirklich nur den Status und keine der ausgefalleneren Funktionen von conntrack benötigen

白 白 マ セ セ
quelle