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.
Vývojář | Netfilter Core Team |
---|---|
Aktuální verze | 3.19.3 (26. 3. 2015) |
Připravovaná verze | 4.0-rc5 (22. 3. 2015) |
Operační systém | Linux |
Vyvíjeno v | C |
Typ softwaru | Modul jádra Linux, Firewall |
Licence | GNU GPLv2 |
Web | http://www.netfilter.org/ |
Některá data mohou pocházet z datové položky. |
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
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í.
[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
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/iptables project homepage [online]. netfilter.org [cit. 2015-03-28]. Dostupné online.
- 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.
- PABLO, Neira Ayuso. Netfilter’s connection tracking system [online]. netfilter.org, 2006-06-14 [cit. 2015-03-28]. Dostupné online.
Externí odkazy
- Obrázky, zvuky či videa k tématu Netfilter na Wikimedia Commons