Netfilter
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.

Historie 

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. 
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

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 

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ů 

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í 

Jedna z nejdůležitějších funkcí Netfilteru je sledování připojení.

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 

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

Externí odkazy 
 

Firewally
Jádro Linuxu
Linux