Netfilter

Netfilter
VývojářNetfilter Core Team
Aktuální verze3.19.3 (26. 3. 2015)
Připravovaná verze4.0-rc5 (22. 3. 2015)
Operační systémLinux
Vyvíjeno vC
Typ softwaruModul jádra Linux, Firewall
LicenceGNU GPLv2
Webhttp://www.netfilter.org/
Některá data mohou pocházet z datové položky.

Netfilter je framework obsažený v jádře Linuxu od verze 2.4.x, který nabízí mnoho možností při filtrování paketů, překladu síťových adres (NAT) a nebo překladu síťových portů (PAT). Netfilter nahrazuje zastaralý modul ipchains v Linuxovém jádře verze 2.2.

Netfilter představuje sadu hooků v jádře Linuxu, které povolují ostatním modulům jádra registrovat callbacky na network stack. Registrovaný callback je pak zavolán pro každý paket, který projde příslušným hookem v TCP/IP stacku.[1]

Historie

Vztahy jednotlivých komponent Netfilteru

Rusty Russel odstartoval projekt netfilter/iptables v roce 1998. Postupem času projekt rostl a v roce 1999 založil Netfilter Core Team (zkráceně coreteam). Software, který vytvořili (později nazvaný jako netfilter) užíval GNU GPL a v březnu 2000 byl včleněn do hlavní vývojové větve jádra Linuxu verze 2.3.x.

V srpnu 2003 se stal vedoucím coreteamu Harald Welte. V dubnu 2004 proběhl zásah proti distributorům softwaru Netfilteru použitého v routerech, kteří nedodržovali podmínky GPL licence. Německý soud následně vydal soudní příkaz proti společnosti Sitecom Germany, která odmítala dodržovat podmínky GPL licence.[2] V září 2007 se stal vedoucím coreteamu Patrick McHardy, který v posledních letech vedl vývoj Netfilteru.

V roce 2013, během workshopu Netfilteru v Copenhagenu v Dánsku, převzal vedení coreteamu Pablo Neira Ayuso.

User space nástroje

Tok datových paketů přes Netfilter

iptables

Podrobnější informace naleznete v článku iptables.

Moduly jádra ip_tables, ip6_tables, arp_tables a ebtables jsou významné součásti hook systému Netfilteru. Tyto moduly poskytují tabulkový systém pro definování pravidel firewallu pro filtrování, nebo transformování paketů. Tabulky lze obsluhovat pomocí nástrojů iptables, ip6tables, arptables a ebtables. Pravidla jsou organizovány do řetězů a slouží k ovlivňování paketů při průchodu TCP/IP stackem.

nftables

Podrobnější informace naleznete v článku nftables.

nftables je user space část nového klasifikačního enginu pro průchod paketů jádrem systému, který by měl být nástupcem iptables. Tento engine přidává jednoduchý virtuální stroj, který je schopný spouštět bajtkód, aby zkontroloval síťový paket a následně učinil rozhodnutí, jak má být s paketem dále zacházeno. Virtuální stroj může získat data z paketu, podívat se na přidružená metadata a spravovat data o sledování připojení. Dále je schopen virtuální stroj manipulovat se sady dat (typicky IP adresy), což umožňuje nahradit více porovnávacích operací pouze jedním vyhledáním v sadě dat.

Výhody oproti iptables

  • zjednodušení ABI Linuxového jádra
  • redukce duplikovaného kódu
  • vylepšené hlášení chyb
  • efektivnější spouštění, ukládání a inkrementální změny filtrovacích pravidel

Defragmentace paketů

Podrobnější informace naleznete v článku Fragmentace IP datagramů.

Modul nf_defrag_ipv4 defragmentuje IPv4 pakety, než dosáhnou modulu pro sledování připojení nf_conntrack_ipv4. To je nezbytné pro spolehlivé fungování tohoto modulu a pro pomocné moduly pro NAT, které spolehlivě pracují pouze na celých paketech.

Pro defragmentaci IPv6 paketů neexistuje žádný samostatný modul, ale je přímo implementována v modulu nf_conntrack_ipv6.

Sledování připojení

Podrobnější informace naleznete v článku Stavový firewall.

Jedna z nejdůležitějších funkcí Netfilteru je sledování připojení. [3] Sledování připojení umožňuje jádru sledovat všechna síťová připojení a tím udržovat přehled o tom, jaké pakety patří ke kterému připojení. Na této informaci závisí fungování NATu, aby mohl všechny pakety směrovat stejným směrem, nebo nástroje iptables, který se díky těmto informacím může chovat jako stavový firewall.

Každé připojení Netfilteru je unikátně identifikováno n-ticí obsahující protokol síťové vrstvy, zdrojovou adresu, cílovou adresu, protokol transportní vrstvy a klíč transportní vrstvy. Klíč transportní vrstvy je závsilý na protokolu transportní vrstvy. Pro TCP/UDP protokol se jedná o číslo portu, pro síťový tunel se jedná o ID tunelu, v ostatních případech je klíč nulový. Kvůli zjištění TCP portu, musí být pakety povinně defragmentovány.

S připojeními Netfilteru může být manipulováno pomocí nástroje conntrack.

Každé připojení může nabývat následujících stavů:

  • NEW: začínající připojení
  • ESTABLISHED: již navázané připojení
  • EXPECTED: očekávané připojení, které je přiřazeno k začínajícímu připojení
  • INVALID: paket byl zjištěn jako neplatný

NAT

Podrobnější informace naleznete v článku Network address translation.

Každému připojení náleží originální adresa a adresa odpovědi. NAT v Netfilteru je implementován jednoduchou změnou adresy odpovědi a pokud je to vyžadováno, tak i port. Pokud jsou přijímány pakety, jejich identifikační n-tice jsou porovnány s jejich adresami odpovědi (popřípadě i porty). Pro příchozí pakety je nutné, aby také nebyly fragmentované.

Reference

V tomto článku byl použit překlad textu z článku Netfilter na anglické Wikipedii.

  1. Netfilter/iptables project homepage [online]. netfilter.org [cit. 2015-03-28]. Dostupné online. 
  2. Netfilter project was granted a preliminary injunction against Sitecom GmbH [online]. netfilter.org, 2004-04-15 [cit. 2015-03-28]. Dostupné v archivu pořízeném dne 2015-04-02. 
  3. PABLO, Neira Ayuso. Netfilter’s connection tracking system [online]. netfilter.org, 2006-06-14 [cit. 2015-03-28]. Dostupné online. 

Externí odkazy

Média použitá na této stránce

Netfilter-components.svg
Autor: Jan Engelhardt, Licence: CC BY-SA 3.0
Relation of the different Netfilter components to another
Netfilter-packet-flow.svg
Autor: Jan Engelhardt, Licence: CC BY-SA 3.0
Schematic for the packet flow paths through Linux networking and Xtables