GNU/Linux >> Znalost Linux >  >> Linux

Kdy modul conntrack iptable sleduje stavy paketů?

Řešení 1:

Úvodní prezentace Netfilter a conntrack

Nejprve povinné schéma o toku paketů v Netfilter a General Networking:

Netfilter je rámec pro filtrování paketů, který se vkládá přes zbytek síťového zásobníku (reprezentovaný „rozhodnutím o směrování“ a dalšími bílými částmi s kulatými hranami). Netfilter poskytuje háčky a API pro další subsystémy a "klienty". Mezi tyto části patří conntrack (sledovač připojení) a iptables (nebo nftables ). Oddělení mezi Netfilter a conntrack je docela rozmazaný. Můžete jen zvážit conntrack jako integrovaná součást Netfilter.

Ve schématu popisujícím různé kroky, kterými paket prochází, můžete vidět, že v určitém okamžiku (mezi raw/PREROUTING a mangle/PREROUTING nebo mezi raw/OUTPUT a mangle/OUTPUT) paket prochází conntrack .

V tomto okamžiku conntrack bude hledat ve svých vlastních vyhledávacích tabulkách (minimální vyhledávací databáze uložená v paměti jádra):

  • pokud nejsou vlastnosti tohoto paketu nalezeny (a pokud nejsou deklarovány jako UNTRACKED v nezpracované tabulce), nová conntrack obousměrná n-tice záznam (protokol, poté specifické informace o rodině a protokolu:počáteční zdroj a port, počáteční cíl a port, zdroj a port odpovědi, cíl odpovědi a port (poslední dva jsou obvykle obrácené, pokud se nejedná o NAT nebo nějaké podivné protokoly, jako je echo odpověď odpovídající echo požadavek pro ICMP)) popisující tok je vytvořen se stavem NEW.
  • pokud se shoduje (v libovolném směru) s předchozí položkou a je kompatibilní se stavem tohoto toku, může být stav toku změněn (např.:změna z NEW na ESTABLISHED, pokud tomu tak dříve nebylo).
  • jestliže se paket z nějakého konkrétního důvodu nemůže shodovat s existujícím tokem, přestože má své vlastnosti (např.:pozdní TCP paket přijatý poté, co byl již úspěšně zahájen opakovaný přenos, takže je mimo okno s ohledem na sekvenci a SACK hodnoty) bude paket označen jako NEPLATNÝ.
  • Existuje několik dalších případů, jako je RELATED:jedná se o pakety, které nejsou součástí samotného toku, ale souvisí s novým tokem, který může být spojen s jiným existujícím tokem (tj. v databázi). Dva příklady jsou chyba ICMP vytvořená přijetím paketu (např.:UDP port nedostupný) nebo když speciální pomocník protokolu jako modul jádra nf_conntrack_ftp , což je plugin pro conntrack subsystému, zjistí, že paket je součástí samostatného datového toku spojeného s FTP příkazy PASV/EPSV nebo PORT/EPRT provedenými na příkazovém toku (na portu 21).

Řešení otázky

Když už bylo řečeno, zde jsou odpovědi na vaše dvě odrážky:

  • v hlavním síťovém jmenném prostoru conntrack začne sledovat připojení, jakmile jsou načteny jeho moduly (včetně případných příslušných podmodulů specifických pro protokol). Pro neiniciální síťové jmenné prostory (kontejnery...) to také vyžaduje, aby na ně odkazoval nějaký další subsystém (jako jsou iptables OP 's conntrack modulem nebo jednorázovým použitím příkazu conntrack popsáno později). Toto je výchozí nastavení a paket musí být konkrétně označen jako NETRAKOVANÝ před conntrack subsystém vidí, že tento paket nemůže být sledován. Na Linuxu existuje jen několik případů, kdy by nebylo potřeba sledování, ale pak už samozřejmě nebude k dispozici stavový firewall a stavový/dynamický NAT (beztelesný NAT, který může vyžadovat použití UNTRACKED jako první, stále může být hotovo, ale ne pomocí iptables . tc nebo nftables umět). Chcete-li se vyhnout conntrack zpracování některých paketů, tento druh iptables lze použít pravidlo (např.:port 80/tcp):

    iptables -t raw -A PREROUTING -p tcp --dport 80 -j CT --notrack
    iptables -t raw -A OUTPUT -p tcp --sport 80 -j CT --notrack
    
  • Když paket projde filtrem/INPUT a dosáhne tohoto pravidla:

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

    iptables specifický modul jádra xt_conntrack dotazuje conntrack subsystém (obsluhován různými relevantními moduly jádra nf_conntrack* ) a zeptá se na stav tohoto paketu v jeho vyhledávací databázi. Pokud je odpověď RELATED nebo ESTABLISHED paket se shoduje a pokračuje k verdiktu PŘIJMOUT. Výsledek je ve skutečnosti již uložen do mezipaměti v paketu při prvním vyhledávání (obvykle pomocí conntrack ), takže jde o levné "hledání". Jedná se tedy o obecné pravidlo pro zpracování již dříve přijatých toků. Tyto toky mohou být zpočátku přijaty v pravidlech výslovně zmiňujících -m conntrack --ctstate NEW nebo jednoduše pravidla, která jej neuvádějí, ale jsou umístěna po toto obecné pravidlo (ale mějte na paměti stav NEPLATNÝ, který by měl být obvykle před tím ZRUŠEN).

  • přidání odrážky:zpracování příchozích a odchozích paketů je poměrně symetrické mezi PREROUTING a OUTPUT (i když ty nevypadají symetricky):conntrack rozhraní v PREROUTING i ve OUTPUT (a na několika dalších místech, s ohledem na NAT pracuje s conntrack , kromě jeho prvního paketu ve stavu NEW procházejícího iptables 's nat table). To se může mírně lišit od popisu, který jste napsali o IPFW. Pokud server, na kterém běží aplikace, také omezuje odchozí toky, pak s největší pravděpodobností potřebuje stejné obecné iptables pravidlo jak ve filtru/VÝSTUPU, tak ve filtru/VSTUPU, aby se umožnil průchod odchozích paketů s odpovědí již přijatého příchozího provozu.

Další informace

Pro interakci s conntrack existují speciální nástroje vyhledávací tabulky subsystému z conntrack-tools.

  • conntrack :dotazování, mazání nebo aktualizace obsahu vyhledávacích tabulek, které zpracovává conntrack .

    Několik příkladů.

    Všechny sledované položky (které mohou být velké bez dalšího filtru) můžete vypsat pomocí:

    conntrack -L
    

    Pokud váš systém provádí NAT (např. router před privátní LAN nebo běží virtuální počítače a kontejnery), můžete použít --any-nat , --src-nat nebo --dst-nat pouze zobrazit resp. všechny NAT, všechny zdrojové NAT (masquerade) nebo všechny cílové NAT (obvykle pro přesměrované porty):

    Monitorování conntrack v reálném čase události:

    conntrack -E
    
  • conntrackd :démon, jehož dva hlavní účely jsou (conntrack) účtování a statistika toku nebo vysoce dostupná stavová synchronizace stavu clusteru firewallu.

Řešení 2:

Sledování připojení je samostatnou funkcí Netfilter a není konfigurováno pomocí IPTables.

Na obrázku jsou dvě conntrack kroky v cestě INPUT a jeden v cestě OUTPUT. Tyto kroky přidruží jednotlivé pakety k existujícím připojením sledovaným v tabulce sledování připojení nebo v tabulce vytvoří nové položky sledování připojení.

Funkce Conntrack je modul jádra Linuxu a často je součástí jádra ve výchozí konfiguraci.

Provoz Conntrack lze vyladit úpravou net.netfilter.nf_conntrack hodnoty sysctl.

Vaše druhá alternativa je to, co se stane. Informace o stavu zaznamená funkce Conntrack a pravidlo IPTables jednoduše vyhledá informace v tabulce Conntrack.


No
Linux
  1. změny parametrů modulu jádra (pomocí /sys/module)

  2. Modul nebyl nalezen, když dělám modprobe

  3. Kam jdou metadata, když uložíte soubor?

  1. Proč OpenStack hlásí typ Hypervisoru jako QEMU, když libvirt_type je KVM?

  2. Kdy systém odešle SIGTERM procesu?

  3. Kdy běží `cron.daily`?

  1. Linux – automatické výzvy Ano při instalaci balíčku na Alpine Linux?

  2. Linux – Jak změřit čas, kdy dorazí paket?

  3. Provádí se při běhu na úroveň běhu předchozí úrovně běhu?