Netfilter - Netfilter

Netfilter
Stabil udgivelse
5.14.7  Rediger dette på Wikidata / 22. september 2021 ; 0 dage siden ( 22. september 2021 )
Udgivelsesversion
5.15-rc2  Rediger dette på Wikidata / 19. september 2021 ; 3 dage siden ( 19. september 2021 )
Skrevet i C
Operativ system Linux
Type
Licens GNU GPL
Internet side netfilter .org

Netfilter er en ramme leveret af Linux -kernen, der gør det muligt at implementere forskellige netværksrelaterede operationer i form af tilpassede håndterere. Netfilter tilbyder forskellige funktioner og funktioner til pakkefiltrering , netværksadresseoversættelse og portoversættelse , som giver den funktionalitet, der kræves til at dirigere pakker gennem et netværk og forbyde pakker at nå følsomme steder i et netværk.

Netfilter repræsenterer et sæt kroge inde i Linux -kernen, hvilket gør det muligt for bestemte kernemoduler at registrere tilbagekaldsfunktioner med kernelens netværksstak. Disse funktioner, der normalt anvendes på trafikken i form af filtrerings- og modifikationsregler, kaldes til hver pakke, der krydser den respektive krog i netværksstakken.

Historie

Forholdet mellem (nogle af) de forskellige Netfilter -komponenter

Rusty Russell startede netfilter/iptables -projektet i 1998; han havde også forfattet projektets forgænger, ipchains . Efterhånden som projektet voksede, grundlagde han Netfilter Core Team (eller simpelthen coreteam ) i 1999. Softwaren, de producerede (kaldet netfilter herefter) anvender GNU General Public License (GPL) -licensen, og i marts 2000 blev det fusioneret til version 2.4. x af Linux -kerne -hovedlinjen .

I august 2003 blev Harald Welte formand for coreteamet. I april 2004, efter et nedslag fra projektet på dem, der distribuerede projektets software indlejret i routere uden at overholde GPL, gav en tysk domstol Welte et historisk forbud mod Sitecom Tyskland, som nægtede at følge GPL's vilkår (se GPL- relaterede tvister ). I september 2007 blev Patrick McHardy, der ledede udviklingen i de sidste år, valgt som ny formand for coreteamet.

Forud for iptables var de dominerende softwarepakker til oprettelse af Linux -firewalls ipchains i Linux -kerne 2.2.x og ipfwadm i Linux -kerne 2.0.x, som igen var baseret på BSD 's ipfw . Både ipchains og ipfwadm ændrer netværkskoden, så de kan manipulere pakker, da Linux -kernen manglede en generel pakke -kontrolramme indtil Netfilter blev introduceret.

Mens ipchains og ipfwadm kombinerer pakkefiltrering og NAT (især tre specifikke former for NAT , kaldet maskering , portvideresendelse og omdirigering ), adskiller Netfilter pakkeoperationer i flere dele, beskrevet nedenfor. Hver opretter forbindelse til Netfilter -kroge på forskellige punkter for at få adgang til pakker. Forbindelsessporing og NAT -delsystemer er mere generelle og mere kraftfulde end de rudimentære versioner inden for ipchains og ipfwadm.

I 2017 blev IPv4 og IPv6 flow -offload -infrastruktur tilføjet, hvilket muliggjorde en hurtigere fremførsel af softwarestrømtabeller og support til hardware -offload.

Brugerrumsprogrammer

Flow af netværkspakker gennem Netfilter med ældre iptables -pakkefiltrering

iptables

Kernemodulernes navngivne ip_tables, ip6_tables, arp_tables(understregningen er en del af navnet), og ebtablesomfatter arven pakke filtrering del af Netfilter krog system. De giver et tabelbaseret system til at definere firewallregler, der kan filtrere eller transformere pakker. Tabellerne kan administreres via bruger-space værktøjer iptables, ip6tables, arptables, og ebtables. Bemærk, at selvom både kernemodulerne og brugerpladsværktøjer har lignende navne, er hver af dem en anden enhed med forskellige funktioner.

Hvert bord er faktisk sin egen krog, og hvert bord blev introduceret for at tjene et specifikt formål. Hvad Netfilter angår, kører det et bestemt bord i en bestemt rækkefølge med hensyn til andre tabeller. Enhver tabel kan kalde sig selv, og den kan også eksekvere sine egne regler, hvilket muliggør yderligere behandling og iteration.

Regler er organiseret i kæder, eller med andre ord, "kæder af regler". Disse kæder er navngivet med foruddefinerede titler, herunder INPUT, OUTPUTog FORWARD. Disse kædetitler hjælper med at beskrive oprindelsen i Netfilter -stakken. Pakkemodtagelse falder for eksempel ind i PREROUTING, mens de INPUTrepræsenterer lokalt leverede data, og videresendt trafik falder ind i FORWARDkæden. Lokalt genereret output passerer gennem OUTPUTkæden, og pakker, der skal sendes ud, er i POSTROUTINGkæde.

Netfilter -moduler, der ikke er organiseret i tabeller (se nedenfor), kan kontrollere, om oprindelsen vælger deres funktionsmåde.

iptable_raw modul
Når den er indlæst, registrerer den en krog, der vil blive kaldt før enhver anden Netfilter -krog. Det giver en tabel kaldet rå, der kan bruges til at filtrere pakker, før de når mere hukommelseskrævende operationer, f.eks. Forbindelsessporing.
iptable_mangle modul
Registrerer en hook and mangle -tabel til at køre efter Connection Tracking (se nedenfor) (men stadig før enhver anden tabel), så der kan foretages ændringer i pakken. Dette muliggør yderligere ændringer af de følgende regler, f.eks. NAT eller yderligere filtrering.
iptable_nat modul
Registrerer to kroge: Destinationsnetværksadresse Oversættelsesbaserede transformationer ("DNAT") påføres før filterkrogen, kilde netværkets adresse Oversættelsesbaserede transformationer ("SNAT") påføres bagefter. Den Network Address Translation tabel (eller "NAT"), der stilles til rådighed for iptables er blot en "konfigurationsdatabase" for NAT mappings kun vejledende, og ikke beregnet til filtrering af nogen art.
iptable_filter modul
Registrerer filtertabellen , der bruges til generel filtrering (firewall).
security_filter modul
Bruges til obligatoriske netværksregler (MAC), f.eks. Dem, der aktiveres af SECMARKog CONNSECMARK-målene. (Disse såkaldte "mål" refererer til sikkerhedsforbedrede Linux-markører.) Obligatorisk adgangskontrol implementeres af Linux-sikkerhedsmoduler, f.eks. SELinux. Sikkerhedstabellen kaldes efter kaldet i filtertabellen, så enhver diskretionær adgangskontrol (DAC) -regel i filtertabellen kan træde i kraft før eventuelle MAC -regler. Denne tabel indeholder følgende indbyggede kæder: INPUT(til pakker, der kommer ind i selve computeren), OUTPUT(til ændring af lokalt genererede pakker før routing) og FORWARD(til ændring af pakker, der dirigeres gennem computeren).

nftables

nftables er den nye pakkefiltrerende del af Netfilter. nfter den nye userspace hjælpeprogram, der erstatter iptables, ip6tables, arptablesog ebtables.

nftables kernemotor tilføjer en simpel virtuel maskine til Linux -kernen, som er i stand til at eksekvere bytecode for at inspicere en netværkspakke og træffe beslutninger om, hvordan den pakke skal håndteres. Operationer implementeret af denne virtuelle maskine er bevidst gjort grundlæggende: den kan hente data fra selve pakken, se på de tilhørende metadata (f.eks. Indgående grænseflade) og administrere forbindelsessporingsdata. Aritmetiske, bitvise og sammenligningsoperatorer kan bruges til at træffe beslutninger baseret på disse data. Den virtuelle maskine er også i stand til at manipulere datasæt (typisk IP -adresser), så flere sammenligningsoperationer kan erstattes med et enkelt sætopslag.

Dette er i modsætning til den ældre Xtables -kode (iptables osv.), Som har protokolbevidsthed så dybt indbygget i koden, at den har været nødt til at blive replikeret fire gange‍ - ‌for IPv4, IPv6, ARP og Ethernet -bro‍‍‌ som firewall motorer er for protokolspecifikke til at kunne bruges på en generisk måde. De største fordele i forhold til iptableser forenkling af Linux -kernen ABI , reduktion af kodeduplikation , forbedret fejlrapportering og mere effektiv udførelse, lagring og inkrementelle, atomare ændringer af filtreringsregler.

Defragmentering af pakker

Det nf_defrag_ipv4modul vil defragmentere IPv4-pakker, før de når Netfilter tilslutning sporing ( nf_conntrack_ipv4modul). Dette er nødvendigt for forbindelsessporing i kernen og NAT-hjælpermoduler (som er en form for "mini- ALG "), der kun fungerer pålideligt på hele pakker, ikke nødvendigvis på fragmenter.

IPv6 defragmenter er ikke et modul i sig selv, men er integreret i nf_conntrack_ipv6modulet.

Forbindelsessporing

En af de vigtige funktioner, der er bygget oven på Netfilter -rammerne, er forbindelsessporing. Forbindelsessporing giver kernen mulighed for at holde styr på alle logiske netværksforbindelser eller sessioner og derved relatere alle de pakker, der kan udgøre denne forbindelse. NAT er afhængig af disse oplysninger for at oversætte alle relaterede pakker på samme måde og iptableskan bruge disse oplysninger til at fungere som en stateful firewall.

Forbindelsestilstanden er imidlertid fuldstændig uafhængig af enhver tilstand på øverste niveau, f.eks. TCP'er eller SCTP's tilstand. En del af årsagen til dette er, at TCP -motoren muligvis ikke nødvendigvis skal påberåbes overhovedet, når man kun videresender pakker, dvs. ingen lokal levering. Selv transmitteringer uden forbindelse, f.eks. UDP , IPsec (AH/ESP), GRE og andre tunnelprotokoller har i det mindste en pseudo-forbindelsestilstand. Heuristikken for sådanne protokoller er ofte baseret på en forudindstillet timeout -værdi for inaktivitet, efter hvis udløb en Netfilter -forbindelse afbrydes.

Hver Netfilter-forbindelse identificeres entydigt med en (lag-3-protokol, kildeadresse, destinationsadresse, lag-4-protokol, lag-4-nøgle) tuple. Lag-4-nøglen afhænger af transportprotokollen; for TCP/UDP er det portnumre, for tunneler kan det være deres tunnel -id, men ellers er det bare nul, som om det ikke var en del af tuplen. For at kunne inspicere TCP -porten i alle tilfælde defragmenteres pakker obligatorisk.

Netfilterforbindelser kan manipuleres med brugerrumværktøjet conntrack.

iptableskan gøre brug af at kontrollere forbindelsens oplysninger såsom tilstande, statuser og mere for at gøre pakkefiltreringsregler mere effektive og lettere at administrere. De mest almindelige stater er:

NEW
forsøger at oprette en ny forbindelse
ESTABLISHED
del af en allerede eksisterende forbindelse
RELATED
tildelt en pakke, der starter en ny forbindelse, og som har været "forventet"; de førnævnte mini-ALG'er opstiller disse forventninger, for eksempel når nf_conntrack_ftpmodulet ser en FTP " PASV" kommando
INVALID
pakken viste sig at være ugyldig , f.eks det ville ikke klæbe til TCP staten diagram
UNTRACKED
en særlig tilstand, der kan tildeles af administratoren til at omgå forbindelsessporing for en bestemt pakke (se rå tabel ovenfor).

Et normalt eksempel ville være, at den første pakke, konverteringsundersystemet ser, vil blive klassificeret "ny", svaret ville blive klassificeret "etableret", og en ICMP -fejl ville være "relateret". En ICMP -fejlpakke, der ikke matchede nogen kendt forbindelse, ville være "ugyldig".

Hjælpere til forbindelsessporing

Ved hjælp af plugin-moduler kan forbindelsessporing få kendskab til applikationslagsprotokoller og dermed forstå, at to eller flere adskilte forbindelser er "relaterede". Overvej f.eks. FTP -protokollen. Der oprettes en kontrolforbindelse, men når data overføres, etableres en separat forbindelse for at overføre dem. Når nf_conntrack_ftpmodulet er indlæst, vil den første pakke i en FTP -dataforbindelse blive klassificeret som "relateret" i stedet for "ny", da den logisk er en del af en eksisterende forbindelse.

Hjælperne inspicerer kun en pakke ad gangen, så hvis vigtig information til forbindelsessporing er delt på to pakker, enten på grund af IP -fragmentering eller TCP -segmentering, vil hjælperen ikke nødvendigvis genkende mønstre og derfor ikke udføre sin operation. IP -fragmentering behandles med delsystemet til forbindelsessporing, der kræver defragmentering, selvom TCP -segmentering ikke håndteres. I tilfælde af FTP anses segmentering ikke for at ske "nær" en kommando som PASVmed standard segmentstørrelser, så den behandles heller ikke i Netfilter.

Oversættelse af netværksadresse

Hver forbindelse har et sæt originale adresser og svaradresser , som i første omgang starter det samme. NAT i Netfilter implementeres ved blot at ændre svaradressen og, hvor det ønskes, port. Når pakker modtages, vil deres forbindelsestupel også blive sammenlignet med svaradresseparret (og porte). At være fragmentfrit er også et krav for NAT. (Hvis det er nødvendigt, kan IPv4-pakker omfragmenteres af den normale IPv4-stak, der ikke er Netfilter.)

NAT -hjælpere

På samme måde som hjælpere til forbindelsessporing vil NAT -hjælpere foretage en pakkeinspektion og erstatte originale adresser med svaradresser i nyttelasten.

Yderligere Netfilter -projekter

Selvom det ikke er kernemoduler, der gør brug af Netfilter -kode direkte, er Netfilter -projektet vært for et par mere bemærkelsesværdige software.

contrack-værktøjer

conntrack-toolser et sæt brugerrumsværktøjer til Linux, der tillader systemadministratorer at interagere med forbindelsessporingsposter og tabeller. Pakken indeholder conntrackddæmonen og kommandolinjegrænsefladen conntrack. User space-dæmonen conntrackdkan bruges til at aktivere klynge-baserede stateful-firewalls med høj tilgængelighed og indsamle statistik over brug af stateful-firewall. Kommandolinjegrænsefladen conntrackgiver en mere fleksibel grænseflade til forbindelsessporingssystemet end det forældede /proc/net/nf_conntrack .

ipset

I modsætning til andre udvidelser, såsom Connection Tracking, ipseter det mere relateret til, iptablesend det er til kernefilterkoden. ipsetgør f.eks. ikke brug af Netfilter -kroge, men giver faktisk et iptablesmodul til at matche og foretage minimale ændringer (sæt/ryd) til IP -sæt.

Det kaldte brugerrumsværktøj ipsetbruges til at opsætte, vedligeholde og inspicere såkaldte "IP-sæt" i Linux-kernen. Et IP -sæt indeholder normalt et sæt IP -adresser , men kan også indeholde sæt af andre netværksnumre afhængigt af dets "type". Disse sæt er meget mere opslagseffektive end bare iptablesregler, men kan naturligvis komme med et større hukommelsesaftryk. Der findes forskellige lagringsalgoritmer (for datastrukturer i hukommelsen), så ipsetbrugeren kan vælge en optimal løsning.

Enhver post i et sæt kan bindes til et andet sæt, hvilket giver mulighed for sofistikerede matchningsoperationer. Et sæt kan kun fjernes (ødelægges), hvis der ikke er iptablesregler eller andre sæt, der henviser til det.

SYN proxy

SYNPROXYmål gør det muligt at håndtere store SYN -oversvømmelser uden de store ydelsesstraffe, som forbindelsessporingen pålægger i sådanne tilfælde. Ved at omdirigere de første SYNanmodninger til SYNPROXYmålet registreres forbindelser ikke inden for forbindelsessporingen, før de når en valideret endelig ACKtilstand, hvilket frigør forbindelsessporing fra regnskabsmæssigt stort antal potentielt ugyldige forbindelser. På denne måde kan enorme SYNoversvømmelser håndteres på en effektiv måde.

Den 3. november 2013 blev SYNproxy -funktionalitet fusioneret til Netfilter med udgivelsen af ​​version 3.12 af Linux -kernens hovedlinje.

ulogd

ulogder en brugerplads-dæmon til at modtage og logge pakker og hændelsesmeddelelser fra Netfilter-undersystemerne. ip_tableskan levere pakker via brugerens kø -mekanisme til den, og forbindelsessporing kan interagere med ulogdat udveksle yderligere oplysninger om pakker eller begivenheder (f.eks. nedbrydning af forbindelser, NAT -opsætning).

Brugerrumsbiblioteker

Netfilter indeholder også et sæt biblioteker, der har libnetfilteret præfiks for deres navne, og som kan bruges til at udføre forskellige opgaver fra brugerområdet. Disse biblioteker udgives under GNU GPL version 2. Specifikt er de følgende:

libnetfilter_queue
gør det muligt at udføre userpace -pakkekø i forbindelse med iptables; baseret pålibnfnetlink
libnetfilter_conntrack
tillader manipulation af forbindelsessporingsposter fra brugerområdet; baseret pålibnfnetlink
libnetfilter_log
tillader indsamling af logbeskeder genereret af iptables; baseret pålibnfnetlink
libnl-3-netfilter
tillader operationer på køer, forbindelsessporing og logfiler; del af libnlprojektet
libiptc
tillader ændringer at blive udført i iptables firewall -regelsæt; det er ikke baseret på noget netlinkbibliotek, og dets API bruges internt af iptableshjælpeprogrammerne
libipset
tillader operationer på IP -sæt; baseret på libmnl.

Netfilter workshops

Netfilter -projektet afholder et årligt møde for udviklere, som bruges til at diskutere igangværende forsknings- og udviklingsindsatser. 2018 Netfilter -workshoppen fandt sted i Berlin, Tyskland, i juni 2018.

Se også

Referencer

eksterne links