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