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 ACCEPTa
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTKterý 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
conntrackpokud 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á:
conntrackmatch je rozšířená verzestatematch, 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 jestatezá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ář:
stateje 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.