Netfilter
| Netfilter | |
|---|---|
| Grundläggande information
| |
| Underhållare | Netfilter-projekt |
| operativ system | Linux |
| programmeringsspråk | C. |
| kategori |
Linux-kärnmodul : paketfilter NAT- brandvägg |
| Licens | GNU General Public License |
| http://www.netfilter.org/ | |
Netfilter är ett mjukvaruprojekt som tillhandahåller paketfilter , nätverksadressöversättning och andra brandväggsrelevanta verktyg för Linux-kärnan . Dessutom beskriver Netfilter mjukvarulagret i Linux-kärnan som anropas när nätverkspaket tas emot och skickas. Detta initierar bara körningen av ytterligare moduler som paketfilter. Dessa moduler kan sedan fånga upp och manipulera paket.
historia
Den Netfilter / iptables projekt startades 1998 av Rusty Russell , som också var författare till föregångaren ipchains . När projektet växte grundade han Netfilter core team (eller helt enkelt core team ; huvudutvecklingsteam) 1999 . Den programvara som produceras där - kallad Netfilter härifrån - är licensierad under GNU General Public License (GPL) och integrerades i Linux-kärnan, version 2.3, i mars 2000. I augusti 2003 blev Harald Welte ordförande i kärnteamet. I april 2004 - efter en intensiv sökning på del av Netfilter-projektet i kommersiella produkter som säljs programvaran utan ansluter sig till tillståndsvillkor - Welte i Tyskland fick en historisk domstol order mot Sitecom Tyskland. I september 2007 blev Patrick McHardy, som varit ansvarig för utvecklingen de senaste åren, ny styrelseordförande. Pablo Neira Ayuso har varit ordförande för kärnteamet sedan 2013. I juni 2016 utvisades Patrick McHardy från kärnteamet på grund av kontroversiella rättegångar mot brott mot GPL.
iptables föregicks av de då dominerande brandväggspaketen ipchains i Linux 2.2 och ipfwadm i Linux 2.0, som hade likheter med BSDs ipfw . Både ipchains och ipfwadm ingrep direkt i nätverkskoden för att manipulera paket, eftersom det hittills inte fanns något generiskt gränssnitt som Netfilter.
Medan ipchains och ipfwadm kombinerade paketfiltrering och NAT (i synnerhet tre vissa typer av NAT, maskering , vidarebefordran av port och omdirigering ), delas paketoperationer i nätfilter upp i mindre moduler - se mer om detta nedan. Med Netfilter är varje operation kopplad till en annan position för att bearbeta paket. Anslutningsspårningen och NAT-delsystemen på Netfilter är mer generella och kraftfullare än de trunkerade versionerna på ipchains och ipfwadm.
iptables
Kärnan moduler ip_tables , ip6_tables , arp_tables (streck är en del av namnet) och ebtables representerar en huvudkomponent och sålunda ”användare” av Netfilter kroksystemet. De representerar en tabell baserat system för att definiera brandväggsregler som möjliggör filtrering eller manipulation. Tabellerna kan administreras med användarutrymme- programmen iptables , ip6tables , arptables eller ebtables .
Varje bord är faktiskt en egen krok och naturligtvis introducerades var och en för ett specifikt syfte. Detta påverkar Netfilter i den mån tabeller behandlas i en viss ordning. Annars skickas alla tabeller vidare till samma underfunktion, som sedan körs över och kör varje regel.
Kedjor i detta avseende motsvarar varifrån nätfilterstacken anropades, t.ex. B. Paketkvitto (PREROUTING), lokalt levererat (INGÅNG), vidarebefordrat (FRAMÅT), lokalt utfärdat (UTGÅNG) och paketutskick (POSTROUTING). Netfilter-moduler som inte innehåller tabeller (se nedan) kan inspektera ursprunget för att bestämma vilka operationer som ska utföras.
Moduler:
- iptable_raw
- registreras en krok som anropas före någon annan nätfilterkrok när den är laddad. Det visar också en tabell som kallas rå där paket kan filtreras innan de når mer minnesintensiva operationer som anslutningsspårning.
- iptable_mangle
- registrerar en krok och en tabell som kallas mangel , som körs igenom efter anslutningsspårning (men före ytterligare tabeller) så att paket kan manipuleras som kan påverka senare beslut som NAT eller paketfiltret.
- iptable_nat
- registrerar två krokar: DNAT-baserade transformationer bearbetas före filterkroken, SNAT-baserade transformationer efteråt. Den nat tabellen som kommer att bli tillgängliga under detta är bara en ”konfigurationsdatabas NAT kartläggning, inte för paketfiltrering.
- iptable_filter
- registrerar filtertabellen som används för allmän paketfiltrering.
Paketdefragmentering
Den nf_defrag_ipv4 modul används för att defragmenteringsåtgärden IPv4 paket innan Connection Tracking (i nf_conntrack_ipv4 modulen) tar emot dem. Detta steg är nödvändigt för anslutningsspårnings- och NAT “hjälpar” -moduler (så att säga “mini- ALG ”) i kärnan, som inte inspekterar dataströmmen över fragment och därför tenderar att arbeta med fragmentfria paket.
Defragmentering av IPv6-paket är inte en extra modul utan är integrerad i nf_conntrack_ipv6 .
Anslutningsspårning
En av de viktiga funktionerna baserade på Netfilter är anslutningsspårning (lit. “anslutningsspårning”, “anslutningsövervakning”). Anslutningsspårning gör det möjligt för kärnan att hålla reda på alla logiska nätverksanslutningar eller sessioner och därmed relatera alla paket som utgör en anslutning till varandra. NAT förlitar sig på denna information för att transformera alla relaterade paket på samma sätt. Iptables kan också använda denna information för att tillhandahålla Stateful Packet Inspection (SPI).
Statusen för en “(Netfilter) -anslutning” är dock oberoende av status för ett potentiellt transportprotokoll, såsom TCP eller SCTP . En anledning till detta är att om paket bara vidarebefordras, dvs ingen lokal leverans, behöver den faktiska TCP-bearbetningsprocessen inte ens komma i spel. Även anslutningsfria protokoll som UDP , IPsec (AH / ESP), GRE och andra tunnelprotokoll har anslutningsstatus, om än "pseudo". En tidsbaserad timeout för inaktivitet används vanligtvis som en heuristik för sådana protokoll, varefter en Netfilter-anslutning raderas och därmed "glömmas bort".
Varje Netfilter-anslutning identifieras unikt med en (lager 3-protokoll, källadress, destinationsadress, lager 4-protokoll, lager 4-tangent) tuple. Lagertangenten 4 beror på vilket transportprotokoll som används; för TCP / UDP är det portnumren, för tunnlar kan det vara deras tunnel-ID, men annars är det bara noll, som om det inte vore en del av tupeln. För att kunna läsa upp TCP-porten i alla fall är paket oundvikligen defragmenterade.
Netfilteranslutningar kan manipuleras med Connector för användarutrymme .
Med hjälp av anslutningsspårning kan iptables visa anslutningsparametrar som tillstånd, statusar etc. för att göra paketfilterreglerna starkare och lättare att använda. De viktigaste staterna är:
- NY
- en ny anslutning börjar med paketet
- ETABLERADE
- paketet tillhör en befintlig anslutning
- RELATERAD
- detta tillstånd tilldelas ett paket som skulle starta en ny anslutning, men anslutningen var redan "förväntad". Ovan nämnda mini-ALG sätter dessa förväntningar på, t.ex. B. om nf_conntrack_ftp- modulen hittar kommandot “PASV” i en FTP- anslutning.
- OGILTIG
- Paketet befanns vara ogiltigt. B. om den inte följer övergångsdiagrammet för TCP-tillstånd .
- Ospårad
- är ett speciellt tillstånd som kan tilldelas av administratören för att kringgå anslutningsspårning för ett visst paket (se ovan: rå tabell)
Ett exempel kan vara att anslutningsspårningen klassificerar det första paketet som ”nytt”. Ett efterföljande svarspaket skulle sedan "etableras" och ett ICMP- felpaket skulle "relateras". Men om ett ICMP-felpaket inte kunde tilldelas en anslutning, skulle det klassificeras som "ogiltigt".
”Helper” -moduler
Med hjälp av ytterligare plugins kan anslutningsspårning utökas i en sådan utsträckning att den får kunskap om applikationslagrets protokoll och därmed förstår att två eller flera anslutningar är "relaterade". Ta till exempel FTP, som initialt öppnar en kontrollanslutning, men en separat för varje dataöverföring. Om nf_conntrack_ftp- modulen laddas klassificeras det första paketet med en FTP-dataförbindelse som ”relaterad” istället för ”ny” eftersom det är en logisk del av en redan existerande anslutning.
Hjälpmodulerna inspekterar bara ett paket åt gången. Om viktig information som är relevant för anslutningsspårning delas in i flera paket, antingen genom IP-fragmentering eller TCP-segmentering, kan modulerna inte fullgöra sin uppgift. IP-fragmentering är emot tvungen defragmentering, men TCP-segmentering är ännu inte täckt. I fallet med FTP antogs att segmentering av "nära" kommandon som PASV med normala segmentstorlekar normalt inte skulle förekomma, och därför beaktas inte heller segmentering i Netfilter.
Nätverksadressöversättning
Varje anslutning har "ursprungliga adresser" (källa, destination) och "svaradresser", som är desamma i början. NAT inom Netfilter implementeras genom omskrivning av svarsadressen och vid behov portar därefter. Om paket tas emot jämförs deras tuples också med svaradresser (och portar). NAT förväntar sig att paket är tillgängliga utan fragment. (Om nödvändigt och möjligt uppdateras IPv4-paket när de matas ut från (icke-filter) IPv4-stacken.)
NAT-hjälpmoduler
I likhet med hjälpmodulerna för anslutningsspårning finns det NAT-hjälpmoduler som förutom paketinspektion också manipulerar originaladresser till svaradresser i dataströmmen.
nftables
nftables är en ytterligare eller ny utveckling av filteralternativen i Linux-kärnan som startades av Netfilter-utvecklarna 2009. Liksom iptables, ip6tables, arptables och ebtables, är nftables baserade på Netfilter-mjukvarulagret i kärnan. Huvudskälet till att starta projektet var och är att standardisera flera koder som skapats av de separata verktygen för IPv4, IPv6, arp-protokoll och brofiltrering. Det nya filterverktyget hette NFTables , kommandoradsverktyget för det hette nft . För att uppnå dessa mål utformades nftables från början för att ersätta iptables. På grund av framgången med iptables och de otaliga verktygen och brandväggarna som baseras på den, hittade projektet inte den användning det ville på länge. Därför beslutade utvecklarna att införa ett kompatibilitetsskikt till iptables. Filtermotorn implementerades som en typ av "virtuell maskin" som kan bearbeta filterreglerna i en bytekod. I princip tillåter Netfilter fler bearbetningsalternativ än de gamla projekten, men fram till 2016 hade ännu inte uppnått hela funktionsområdet för att ersätta de gamla projekten, så att båda projekten för närvarande samexisterar i kärnan. NFtables inkluderades i standard Linux-kärnan med version 3.13 och delvis tillbaka till äldre kärnor för Linux-distributioner ( Red Hat Enterprise Linux 7 - Kernel 3.10).
För användaren har nftables fördelen med en standardiserad syntax för IP-, arp- och eb-regler och det faktum att regler för IPv4 och IPv6 ofta kan standardiseras.
Andra Netfilter-projekt
Även om följande inte är kärnmoduler som bygger direkt på Netfilter-kodinfrastrukturen, stöds vissa andra programvarupaket av Netfilter-projektet.
ulogd
ulogd är ett användarutrymme-program som används för att ta emot och arkivera paket (eller deras egenskaper) och händelsemeddelanden från delsystemet Netfilter. iptables kan vidarebefordra paket till användarutrymmet med hjälp av "användarutrymme-kö" -mekanismen och anslutningsspårning kan interagera med ulogd för att få ytterligare information (t.ex. anslutningsstatus) om paket eller händelser (t.ex. anslutning stängd, anslutning var NAT).
ipset
Userpace-programmet ipset används för att ställa in, visa och på annat sätt hantera så kallade "IP-uppsättningar" inom Linux-kärnan . En IP-set är vanligtvis en uppsättning av IP-adresser , men det kan också innehålla uppsättningar siffror nätverks eller portar , beroende på vilken typ av set.
Sådana uppsättningar är mycket effektivare att söka igenom än om vanliga iptables-regler kontrollerades och bearbetades bit för bit, men associerat med uppsättningar kan det naturligtvis finnas ett högre minneskrav. Olika lagringsmodeller finns i IP Set , så att användaren kan välja en optimal lösning för sig själv.
Till skillnad från de flesta av Netfilter-tilläggen som Connection Tracking , är IP Set mer sannolikt associerat med iptables. Den använder inga nätfilterkrokar, men tillhandahåller en iptables-modul för medlemskapstest och minimala ändringar (inställning / radering) av IP-set-innehåll.
webb-länkar
Hemsidor:
- Netfilter / iptables-projektets hemsida (engelska)
- conntrack-tools Hemsida (engelska)
- ipset hemsida (engelska)
- ulogd hemsida (engelska)
Verkstaden:
- Hem för Netfilter Workshop-webbplatser (engelska / franska)
- Workshop CV / blogg (engelska / franska)
Teknisk dokumentation:
- "Skrivande nätfiltermoduler" e-bok (2009; PDF; 655 kB)
Individuella bevis
- ↑ http://lxr.linux.no/linux+*/net/netfilter/core.c#L157
- ↑ a b netfilter / iptables-projektets hemsida - Om netfilter / iptables-projektet. I: netfilter.org. Åtkomst 7 mars 2018 .
- ↑ Netfilters Connection Tracking System, av Pablo Neira Ayuso, 14 juni 2006: people.netfilter.org (PDF; 185 kB)
- ↑ Adoption nftables-Wiki, nås den 15 maj 2019.
- ↑ https://www.heise.de/select/ix/2018/1/1514658860742410
- ↑ IP-uppsättningar (engelska) - officiell projektsida på netfilter.org ; Från och med den 30 mars 2011