Hlavní odpověď:
Conntrack
nahrazuje state
,ale v moderních jádrech mezi nimi nyní není žádný rozdíl.State
je aktuálně alias a přeložen do conntrack
v iptables, pokud to jádro má, tak syntaxi -m state --state
je ve skutečnosti přeloženo do -m conntrack --ctstate
a zpracovávány stejným modulem.
Na některých starých jádrech však musí být contrack výslovně povolen.
Možné vysvětlení:
Zdá se mi, jako by pravidla, která jste citovali, obsahovala duplikáty, které vyhovují starším i novějším jádrům.
Nebo je to možná jen případ programování kultu Cargo.
Na ServerFault z roku 2012 je tato otázka:
Jaký je praktický rozdíl mezi:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
a
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Který z nich je nejlepší použít?
Přijatá odpověď je:
Oba používají stejné vnitřní jádro jádra (subsystém sledování připojení).
Záhlaví
xt_conntrack.c
:xt_conntrack - Netfilter module to match connection tracking information. (Superset of Rusty's minimalistic state match.)
Řekl bych tedy -- stavový modul je jednodušší (a možná méně náchylný k chybám). V jádře je také delší. Conntrack na druhé straně má více možností a funkcí[1].
Moje výzva je použít
conntrack
pokud potřebujete jeho funkce, jinak stickwith stavový modul.Podobná otázka na netfiltermaillist.
[1] Docela užitečné jako
-m conntrack --ctstate DNAT -j MASQUERADE" routing/DNAT fixup
;-)
Jedna z dalších odpovědí vede k tomuto dokumentu o iptables
. Říká:
conntrack
match je rozšířená verzestate
match, což umožňuje přiřazovat pakety mnohem podrobnějším způsobem. Umožňuje vám podívat se na informace přímo dostupné v systému sledování připojení, bez jakýchkoli „frontendových“ systémů, jako jestate
zápas.
Takže si myslím, že je to pravda (z další odpovědi):
Ve výsledku těchto dvou pravidel není žádný rozdíl.
Všimněte si, že pod otázkou je také zajímavý komentář:
state
je zastaralé ve prospěchconntrack
, a může nebo nemusí být zkompilován v závislosti na tom, jak bylo vaše jádro sestaveno.