Netfilter - Netfilter
Stabil udgivelse | |
---|---|
Udgivelsesversion | |
Skrevet i | C |
Operativ system | Linux |
Type | |
Licens | GNU GPL |
Internet side | netfilter |
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
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
iptables
Kernemodulernes navngivne ip_tables
, ip6_tables
, arp_tables
(understregningen er en del af navnet), og ebtables
omfatter 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
, OUTPUT
og FORWARD
. Disse kædetitler hjælper med at beskrive oprindelsen i Netfilter -stakken. Pakkemodtagelse falder for eksempel ind i PREROUTING
, mens de INPUT
repræsenterer lokalt leverede data, og videresendt trafik falder ind i FORWARD
kæden. Lokalt genereret output passerer gennem OUTPUT
kæden, og pakker, der skal sendes ud, er i POSTROUTING
kæ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
SECMARK
ogCONNSECMARK
-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) ogFORWARD
(til ændring af pakker, der dirigeres gennem computeren).
nftables
nftables er den nye pakkefiltrerende del af Netfilter. nft
er den nye userspace hjælpeprogram, der erstatter iptables
, ip6tables
, arptables
og 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 iptables
er 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_ipv4
modul vil defragmentere IPv4-pakker, før de når Netfilter tilslutning sporing ( nf_conntrack_ipv4
modul). 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_ipv6
modulet.
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 iptables
kan 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
.
iptables
kan 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_ftp
modulet 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_ftp
modulet 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 PASV
med 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-tools
er et sæt brugerrumsværktøjer til Linux, der tillader systemadministratorer at interagere med forbindelsessporingsposter og tabeller. Pakken indeholder conntrackd
dæmonen og kommandolinjegrænsefladen conntrack
. User space-dæmonen conntrackd
kan bruges til at aktivere klynge-baserede stateful-firewalls med høj tilgængelighed og indsamle statistik over brug af stateful-firewall. Kommandolinjegrænsefladen conntrack
giver 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, ipset
er det mere relateret til, iptables
end det er til kernefilterkoden. ipset
gør f.eks. ikke brug af Netfilter -kroge, men giver faktisk et iptables
modul til at matche og foretage minimale ændringer (sæt/ryd) til IP -sæt.
Det kaldte brugerrumsværktøj ipset
bruges 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 iptables
regler, men kan naturligvis komme med et større hukommelsesaftryk. Der findes forskellige lagringsalgoritmer (for datastrukturer i hukommelsen), så ipset
brugeren 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 iptables
regler eller andre sæt, der henviser til det.
SYN proxy
SYNPROXY
må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 SYN
anmodninger til SYNPROXY
målet registreres forbindelser ikke inden for forbindelsessporingen, før de når en valideret endelig ACK
tilstand, hvilket frigør forbindelsessporing fra regnskabsmæssigt stort antal potentielt ugyldige forbindelser. På denne måde kan enorme SYN
oversvømmelser håndteres på en effektiv måde.
Den 3. november 2013 blev SYN
proxy -funktionalitet fusioneret til Netfilter med udgivelsen af version 3.12 af Linux -kernens hovedlinje.
ulogd
ulogd
er en brugerplads-dæmon til at modtage og logge pakker og hændelsesmeddelelser fra Netfilter-undersystemerne. ip_tables
kan levere pakker via brugerens kø -mekanisme til den, og forbindelsessporing kan interagere med ulogd
at 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 libnetfilter
et 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
libnl
projektet libiptc
- tillader ændringer at blive udført i iptables firewall -regelsæt; det er ikke baseret på noget
netlink
bibliotek, og dets API bruges internt afiptables
hjæ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å
- Berkeley pakkefilter
- IP Virtual Server (IPVS, en del af LVS)
- ipchains , forgængeren til iptables
- ipfw
- Linux Virtual Server (LVS)
- Netlink , en API, der bruges af Netfilter -udvidelser
- Netværksplanlægger , en anden komponent på lavt niveau i netværksstakken
- NPF (firewall)
- PF (firewall)
- Ukompliceret firewall