Netfilter - Netfilter
| Stabiele vrijlating | |
|---|---|
| Preview-release | |
| Geschreven in | C |
| Besturingssysteem | Linux |
| Type | |
| Vergunning | GNU GPL |
| Website | netfilter |
Netfilter is een raamwerk dat wordt geleverd door de Linux-kernel waarmee verschillende netwerkgerelateerde bewerkingen kunnen worden geïmplementeerd in de vorm van aangepaste handlers. Netfilter biedt verschillende functies en bewerkingen voor pakketfiltering , netwerkadresvertaling en poortvertaling , die de functionaliteit bieden die nodig is om pakketten door een netwerk te leiden en te voorkomen dat pakketten gevoelige locaties binnen een netwerk bereiken.
Netfilter vertegenwoordigt een set hooks in de Linux-kernel, waardoor specifieke kernelmodules callback- functies kunnen registreren bij de netwerkstack van de kernel. Die functies, die gewoonlijk op het verkeer worden toegepast in de vorm van filter- en wijzigingsregels, worden aangeroepen voor elk pakket dat de respectieve hook binnen de netwerkstack passeert.
Geschiedenis
Rusty Russell startte het netfilter/iptables-project in 1998; hij was ook auteur van de voorganger van het project, ipchains . Naarmate het project groeide, richtte hij in 1999 het Netfilter Core Team (of gewoon coreteam ) op. De software die ze produceerden ( hierna netfilter genoemd ) maakt gebruik van de GNU General Public License (GPL)-licentie en in maart 2000 werd deze samengevoegd tot versie 2.4. x van de Linux-kernel mainline .
In augustus 2003 werd Harald Welte voorzitter van het kernteam. In april 2004, na hardhandig optreden door het project tegen degenen die de software van het project die in routers was ingebouwd distribueerden zonder te voldoen aan de GPL, verleende een Duitse rechtbank Welte een historisch bevel tegen Sitecom Duitsland, dat weigerde de voorwaarden van de GPL te volgen (zie GPL- aanverwante geschillen ). In september 2007 werd Patrick McHardy, die de afgelopen jaren de ontwikkeling leidde, verkozen tot nieuwe voorzitter van het kernteam.
Vóór iptables waren de overheersende softwarepakketten voor het maken van Linux-firewalls ipchains in Linux-kernel 2.2.x en ipfwadm in Linux-kernel 2.0.x, die op zijn beurt was gebaseerd op BSD 's ipfw . Zowel ipchains als ipfwadm wijzigen de netwerkcode zodat ze pakketten kunnen manipuleren, aangezien de Linux-kernel tot de introductie van Netfilter geen algemeen raamwerk voor pakketbeheer had.
Terwijl ipchains en ipfwadm pakketfiltering en NAT combineren (met name drie specifieke soorten NAT , masquerading , port forwarding en omleiding genoemd ), scheidt Netfilter pakketbewerkingen in meerdere delen, zoals hieronder beschreven. Elk maakt verbinding met de Netfilter-haken op verschillende punten om toegang te krijgen tot pakketten. De subsystemen voor het volgen van verbindingen en NAT zijn algemener en krachtiger dan de rudimentaire versies binnen ipchains en ipfwadm.
In 2017 werd IPv4- en IPv6- flow-offload-infrastructuur toegevoegd, waardoor het doorsturen van softwareflow-tabellen en hardware-offload-ondersteuning werd versneld.
Hulpprogramma's voor gebruikersruimte
iptables
De kernelmodules met de naam ip_tables, ip6_tables, arp_tables(het onderstrepingsteken maakt deel uit van de naam), en ebtablesvormen het legacy-pakketfiltergedeelte van het Netfilter-hooksysteem. Ze bieden een op tabellen gebaseerd systeem voor het definiëren van firewallregels die pakketten kunnen filteren of transformeren. De tabellen kunnen worden beheerd via de tools voor gebruikersruimten iptables, ip6tables, arptables, en ebtables. Merk op dat hoewel zowel de kernelmodules als de gebruikersruimtehulpprogramma's vergelijkbare namen hebben, elk van hen een andere entiteit is met verschillende functionaliteit.
Elke tafel is eigenlijk zijn eigen haak en elke tafel is geïntroduceerd om een specifiek doel te dienen. Wat Netfilter betreft, voert het een bepaalde tabel uit in een specifieke volgorde ten opzichte van andere tabellen. Elke tabel kan zichzelf aanroepen en kan ook zijn eigen regels uitvoeren, wat mogelijkheden biedt voor extra verwerking en iteratie.
Regels zijn georganiseerd in ketens, of met andere woorden, "ketens van regels". Deze ketens worden benoemd met vooraf gedefinieerde titels, waaronder INPUT, OUTPUTen FORWARD. Deze ketentitels helpen de oorsprong in de Netfilter-stack te beschrijven. Pakketontvangst valt bijvoorbeeld in PREROUTING, terwijl de INPUTlokaal geleverde gegevens vertegenwoordigt, en doorgestuurd verkeer valt in de FORWARDketen. Lokaal gegenereerde uitvoer gaat door de OUTPUTketen en de te verzenden pakketten bevinden zich in een POSTROUTINGketen.
Netfilter-modules die niet in tabellen zijn georganiseerd (zie hieronder) kunnen de oorsprong controleren om hun werkingsmodus te selecteren.
-
iptable_rawmodule - Wanneer geladen, registreert het een hook die zal worden aangeroepen voor elke andere Netfilter hook. Het biedt een tabel met de naam raw die kan worden gebruikt om pakketten te filteren voordat ze meer geheugenvereisende bewerkingen bereiken, zoals het volgen van verbindingen.
-
iptable_manglemodule - Registreert een hook and mangle- tabel die moet worden uitgevoerd na Connection Tracking (zie hieronder) (maar nog steeds vóór elke andere tabel), zodat wijzigingen aan het pakket kunnen worden aangebracht. Dit maakt aanvullende wijzigingen mogelijk door regels die volgen, zoals NAT of verdere filtering.
-
iptable_natmodule - Registreert twee hooks: op Destination Network Address Translation gebaseerde transformaties ("DNAT") worden toegepast voordat de filter hook wordt toegepast, en op Source Network Address Translation gebaseerde transformaties ("SNAT") worden daarna toegepast. De netwerkadresvertaaltabel (of "nat") die beschikbaar wordt gesteld aan iptables is slechts een "configuratiedatabase" voor alleen NAT- toewijzingen, en niet bedoeld voor enige vorm van filtering.
-
iptable_filtermodule - Registreert de filtertabel die wordt gebruikt voor algemene filtering (firewalling).
-
security_filtermodule - Gebruikt voor Mandatory Access Control (MAC) netwerkregels, zoals die zijn ingeschakeld door de
SECMARKenCONNSECMARKdoelen. (Deze zogenaamde "doelen" verwijzen naar Linux-markeringen met verbeterde beveiliging.) Verplichte toegangscontrole wordt geïmplementeerd door Linux-beveiligingsmodules zoals SELinux. De beveiligingstabel wordt aangeroepen na de aanroep van de filtertabel, waardoor alle Discretionary Access Control (DAC)-regels in de filtertabel van kracht kunnen worden vóór eventuele MAC-regels. Deze tabel biedt de volgende ingebouwde ketens:INPUT(voor pakketten die de computer zelf binnenkomen),OUTPUT(voor het wijzigen van lokaal gegenereerde pakketten voordat zeFORWARDworden gerouteerd ) en (voor het wijzigen van pakketten die via de computer worden gerouteerd).
nftables
nftables is het nieuwe pakketfiltergedeelte van Netfilter. nftis het nieuwe hulpprogramma voor gebruikersruimte dat iptables, ip6tables, arptablesen vervangt ebtables.
nftables-kernelengine voegt een eenvoudige virtuele machine toe aan de Linux-kernel, die in staat is om bytecode uit te voeren om een netwerkpakket te inspecteren en beslissingen te nemen over hoe dat pakket moet worden behandeld. De bewerkingen die door deze virtuele machine worden uitgevoerd, zijn opzettelijk eenvoudig gemaakt: het kan gegevens uit het pakket zelf halen, de bijbehorende metagegevens bekijken (bijvoorbeeld inkomende interface) en verbindingstrackinggegevens beheren. Rekenkundige, bitsgewijze en vergelijkingsoperatoren kunnen worden gebruikt om beslissingen te nemen op basis van die gegevens. De virtuele machine is ook in staat om datasets (meestal IP-adressen) te manipuleren, waardoor meerdere vergelijkingsbewerkingen kunnen worden vervangen door een enkele set-lookup.
Dit in tegenstelling tot de oude Xtables-code (iptables, enz.), waarbij het protocolbewustzijn zo diep in de code is ingebouwd dat het vier keer moest worden gerepliceerd - voor IPv4, IPv6, ARP en Ethernet-bridging - als de firewall engines zijn te protocolspecifiek om op een generieke manier te worden gebruikt. De belangrijkste voordelen iptableszijn vereenvoudiging van de Linux-kernel ABI , vermindering van codeduplicatie , verbeterde foutrapportage en efficiëntere uitvoering, opslag en incrementele, atomaire wijzigingen van filterregels.
Pakketdefragmentatie
De nf_defrag_ipv4module zal IPv4-pakketten defragmenteren voordat ze de verbindingstracering ( nf_conntrack_ipv4module) van Netfilter bereiken . Dit is nodig voor het volgen van verbindingen in de kernel en NAT-helpermodules (die een vorm van "mini- ALG's " zijn) die alleen betrouwbaar werken op hele pakketten, niet noodzakelijk op fragmenten.
De IPv6-defragmentatie is geen module op zich, maar is geïntegreerd in de nf_conntrack_ipv6module.
Verbinding volgen
Een van de belangrijke functies die bovenop het Netfilter-framework zijn gebouwd, is het volgen van verbindingen. Het volgen van verbindingen stelt de kernel in staat om alle logische netwerkverbindingen of sessies bij te houden , en daarbij alle pakketten te relateren waaruit die verbinding kan bestaan. NAT vertrouwt op deze informatie om alle gerelateerde pakketten op dezelfde manier te vertalen en iptableskan deze informatie gebruiken als een stateful firewall.
De verbindingsstatus is echter volledig onafhankelijk van een status op het hoogste niveau, zoals de status van TCP of SCTP. Een deel van de reden hiervoor is dat wanneer alleen pakketten worden doorgestuurd, dwz geen lokale bezorging, de TCP-engine niet noodzakelijkerwijs helemaal hoeft te worden aangeroepen. Zelfs transmissies zonder verbinding zoals UDP , IPsec (AH/ESP), GRE en andere tunnelingprotocollen hebben op zijn minst een pseudo-verbindingsstatus. De heuristiek voor dergelijke protocollen is vaak gebaseerd op een vooraf ingestelde time-outwaarde voor inactiviteit, waarna een Netfilter-verbinding wordt verbroken.
Elke Netfilter-verbinding wordt uniek geïdentificeerd door een (laag-3-protocol, bronadres, bestemmingsadres, laag-4-protocol, laag-4-sleutel) tupel. De laag-4-sleutel is afhankelijk van het transportprotocol; voor TCP/UDP zijn het de poortnummers, voor tunnels kan het hun tunnel-ID zijn, maar verder is het gewoon nul, alsof het geen deel uitmaakt van de tuple. Om in alle gevallen de TCP-poort te kunnen inspecteren, worden pakketten verplicht gedefragmenteerd.
Netfilter-verbindingen kunnen worden gemanipuleerd met de tool voor gebruikersruimte conntrack.
iptableskan gebruikmaken van het controleren van de informatie van de verbinding, zoals statussen, statussen en meer, om de regels voor pakketfiltering krachtiger en gemakkelijker te beheren te maken. De meest voorkomende toestanden zijn:
NEW- proberen een nieuwe verbinding tot stand te brengen
ESTABLISHED- onderdeel van een reeds bestaande verbinding
RELATED- toegewezen aan een pakket dat een nieuwe verbinding tot stand brengt en dat is "verwacht"; de bovengenoemde mini-ALG's wekken deze verwachtingen op, bijvoorbeeld wanneer de
nf_conntrack_ftpmodule een FTP "PASV"-commando ziet INVALID- het pakket bleek ongeldig te zijn , het zou bijvoorbeeld niet voldoen aan het TCP- statusdiagram
UNTRACKED- een speciale status die door de beheerder kan worden toegewezen om het volgen van verbindingen voor een bepaald pakket te omzeilen (zie onbewerkte tabel hierboven).
Een normaal voorbeeld zou zijn dat het eerste pakket dat het conntrack-subsysteem ziet als "nieuw" wordt geclassificeerd, het antwoord als "vastgesteld" wordt geclassificeerd en een ICMP- fout "gerelateerd" is. Een ICMP-foutpakket dat niet overeenkomt met een bekende verbinding zou "ongeldig" zijn.
Helpers voor het volgen van verbindingen
Door het gebruik van plug-inmodules kan het volgen van verbindingen kennis worden gegeven van applicatielaagprotocollen en zo begrijpen dat twee of meer verschillende verbindingen "gerelateerd" zijn. Denk bijvoorbeeld aan het FTP- protocol. Er wordt een besturingsverbinding tot stand gebracht, maar telkens wanneer gegevens worden overgedragen, wordt een afzonderlijke verbinding tot stand gebracht om deze over te dragen. Wanneer de nf_conntrack_ftpmodule is geladen, wordt het eerste pakket van een FTP-gegevensverbinding geclassificeerd als "gerelateerd" in plaats van "nieuw", omdat het logischerwijs deel uitmaakt van een bestaande verbinding.
De helpers inspecteren slechts één pakket tegelijk, dus als vitale informatie voor het volgen van verbindingen over twee pakketten wordt verdeeld, hetzij als gevolg van IP-fragmentatie of TCP-segmentatie, zal de helper niet noodzakelijk patronen herkennen en daarom zijn bewerking niet uitvoeren. IP-fragmentatie wordt behandeld met het subsysteem voor het volgen van verbindingen dat defragmentatie vereist, hoewel TCP-segmentatie niet wordt afgehandeld. In het geval van FTP wordt segmentatie geacht niet "in de buurt van" een commando te gebeuren zoals PASVbij standaard segmentgroottes, en wordt dus ook niet behandeld in Netfilter.
Netwerkadres vertaling
Elke verbinding heeft een set originele adressen en antwoordadressen , die aanvankelijk hetzelfde beginnen. NAT in Netfilter wordt geïmplementeerd door simpelweg het antwoordadres en, indien gewenst, de poort te wijzigen. Wanneer pakketten worden ontvangen, wordt hun verbindingstupel ook vergeleken met het antwoordadrespaar (en poorten). Fragmentvrij zijn is ook een vereiste voor NAT. (Indien nodig kunnen IPv4-pakketten opnieuw worden gefragmenteerd door de normale, niet-Netfilter, IPv4-stack.)
NAT-helpers
Net als bij het volgen van verbindingen, zullen NAT-helpers een pakketinspectie uitvoeren en originele adressen vervangen door antwoordadressen in de payload.
Verdere Netfilter-projecten
Hoewel het geen kernelmodules zijn die rechtstreeks gebruik maken van Netfilter-code, bevat het Netfilter-project nog een paar opmerkelijke software.
conntrack-tools
conntrack-toolsis een set gebruikersruimtehulpmiddelen voor Linux waarmee systeembeheerders kunnen communiceren met de vermeldingen en tabellen voor het bijhouden van verbindingen. Het pakket bevat de conntrackddaemon en de opdrachtregelinterface conntrack. De gebruikersruimte-daemon conntrackdkan worden gebruikt om op clusters gebaseerde stateful firewalls met hoge beschikbaarheid in te schakelen en statistieken te verzamelen over het gebruik van stateful firewalls. De opdrachtregelinterface conntrackbiedt een flexibelere interface voor het systeem voor het volgen van verbindingen dan het verouderde /proc/net/nf_conntrack .
ipset
In tegenstelling tot andere extensies, zoals Connection Tracking, ipsetis het meer gerelateerd aan iptablesdan aan de kern Netfilter-code. ipsetmaakt bijvoorbeeld geen gebruik van Netfilter hooks, maar levert eigenlijk een iptablesmodule om IP-sets te matchen en minimale wijzigingen (set/clear) aan te brengen.
De user-space tool genaamd ipsetwordt gebruikt voor het opzetten, onderhouden en inspecteren van zogenaamde "IP-sets" in de Linux-kernel. Een IP-set bevat meestal een set IP-adressen , maar kan ook sets van andere netwerknummers bevatten, afhankelijk van het "type". Deze sets zijn veel efficiënter dan gewone iptablesregels, maar kunnen natuurlijk een grotere geheugenvoetafdruk hebben. Er zijn verschillende opslagalgoritmen (voor de datastructuren in het geheugen) voorzien ipsetzodat de gebruiker een optimale oplossing kan selecteren.
Elke vermelding in een set kan worden gekoppeld aan een andere set, waardoor geavanceerde afstemmingsbewerkingen mogelijk zijn. Een set kan alleen worden verwijderd (vernietigd) als er geen iptablesregels of andere sets naar verwijzen.
SYN-proxy
SYNPROXYtarget maakt het afhandelen van grote SYN-overstromingen mogelijk zonder de grote prestatieboetes die in dergelijke gevallen worden opgelegd door het volgen van de verbinding. Door initiële SYNverzoeken om te leiden naar het SYNPROXYdoel, worden verbindingen niet geregistreerd in de verbindingstracering totdat ze een gevalideerde eindstatus hebben bereikt ACK, waardoor het volgen van verbindingen geen grote aantallen mogelijk ongeldige verbindingen hoeft te tellen. Zo kunnen grote SYNoverstromingen op een effectieve manier worden opgevangen.
Op 3 november 2013 SYNwerd de proxyfunctionaliteit samengevoegd in de Netfilter, met de release van versie 3.12 van de Linux-kernelhoofdlijn.
ulogd
ulogdis een gebruikersruimte daemon voor het ontvangen en loggen van pakketten en gebeurtenismeldingen van de Netfilter-subsystemen. ip_tableskan pakketten afleveren via het wachtrijmechanisme van de gebruikersruimte, en het volgen van verbindingen kan communiceren met ulogdom meer informatie over pakketten of gebeurtenissen uit te wisselen (zoals het afbreken van de verbinding, NAT-configuratie).
Gebruikersruimte bibliotheken
Netfilter biedt ook een set bibliotheken met libnetfilterals voorvoegsel van hun namen, die kunnen worden gebruikt om verschillende taken uit te voeren vanuit de gebruikersruimte. Deze bibliotheken zijn vrijgegeven onder de GNU GPL versie 2. In het bijzonder zijn het de volgende:
libnetfilter_queue- maakt het mogelijk om gebruikersruimtepakketwachtrijen uit te voeren in combinatie met iptables; gebaseerd op
libnfnetlink libnetfilter_conntrack- maakt manipulatie mogelijk van vermeldingen voor het volgen van verbindingen vanuit de gebruikersruimte; gebaseerd op
libnfnetlink libnetfilter_log- staat het verzamelen van logberichten toe die zijn gegenereerd door iptables; gebaseerd op
libnfnetlink libnl-3-netfilter- maakt bewerkingen op wachtrijen, het volgen van verbindingen en logboeken mogelijk; onderdeel van het
libnlproject libiptc- staat toe dat wijzigingen worden aangebracht in de iptables firewall-regelsets; het is niet gebaseerd op een
netlinkbibliotheek en de API wordt intern gebruikt door deiptableshulpprogramma's libipset- maakt bewerkingen op IP-sets mogelijk; gebaseerd op
libmnl.
Netfilter workshops
Het Netfilter-project organiseert een jaarlijkse bijeenkomst voor ontwikkelaars, die wordt gebruikt om lopende onderzoeks- en ontwikkelingsinspanningen te bespreken. De Netfilter-workshop van 2018 vond plaats in Berlijn, Duitsland, in juni 2018.
Zie ook
- Berkeley pakketfilter
- IP Virtual Server (IPVS, onderdeel van LVS)
- ipchains , de voorloper van iptables
- ipfw
- Linux virtuele server (LVS)
- Netlink , een API die wordt gebruikt door Netfilter-extensies
- Netwerkplanner , een ander onderdeel op laag niveau van de netwerkstack
- NPF (firewall)
- PF (firewall)
- Ongecompliceerde firewall