Denne opplæringen forklarer hvordan du arbeider med Nftables Linux-brannmuren. Dette innholdet er optimalisert både for Linux erfarne og nye brukere.
Nftables er en komponent av Linux-kjernen som gir brannmurfunksjoner. Det er en erstatning av Iptables.
Etter å ha lest denne opplæringen, vil du forstå Nftables-reglene, og du vil kunne lage brannmuren din. Du trenger ikke forkunnskaper om Iptables.
Alle eksemplene i denne opplæringen inneholder skjermbilder, noe som gjør det enkelt for alle Linux-brukere, uavhengig av deres kunnskapsnivå, å forstå og implementere dem.
Komme i gang med Nftables
Før du begynner, opprett og åpne en fil ved hjelp av et tekstredigeringsprogram som nano eller vi for å begynne å skrive dine første Nftables-regler basert på følgende eksempel. Ikke copy-paste; skriv alt.
nano brannmur.nft
Eksemplet i denne opplæringen er ganske enkelt og viser en restriktiv brannmur der all IPv4-trafikk blir droppet med unntak av loopback og spesifikke porter.
I forrige skjermbilde brukte jeg den første linjen til å definere mitt lokale nettverk (192.168.0.0/16) som LinuxHintNet.
definer LinuxHintNet = 192.168.0.0 / 16I den andre linjen definerer jeg en gruppe porter (80,443 og 22). Jeg kaller denne gruppen AllowPorts fordi jeg planlegger å tillate trafikk gjennom dem. AllowPorts er et vilkårlig navn.
definer AllowPorts = { 80 , 443 , 53 , 22 }Deretter legger jeg til en tabell, som er en beholder eller gruppe med kjeder og regler; begge er forklart nedenfor. Tabeller hjelper regler og kjeder med å bli organisert. Jeg kalte tabellen i eksemplet 'Restrictive' fordi den inneholder en restriktiv policy, og navnet er vilkårlig.
IP-en før tabellnavnet indikerer at que table-regler bare vil bli brukt på IPv4-trafikk. Du kan bruke inet i stedet for IP for å bruke regler på IPv4- og IPv6-protokoller. Eller du kan erstatte IP med ip6 kun for IPv6.
Husk at Restrictive er et navn jeg definerte vilkårlig. Du kan navngi bordet som du vil.
I mitt tilfelle bruker jeg regler kun på IPv4, som vist nedenfor.
legg til tabell ip BegrensendeFor begge protokollene, bruk følgende:
legg til tabell inet RestrictiveDeretter legger vi til den første basiskjeden, som jeg vilkårlig kaller Incoming fordi den er relatert til den innkommende trafikken. Du kan imidlertid navngi det som du vil.
Følgende basiskjede slipper all innkommende trafikk som standard:
- legg til kjede ip Restrictive Incoming: Denne delen legger til Restrictive Incoming-kjeden som skal brukes på IPv4
- type filter: Dette definerer kjedetypen som et filter siden det vil filtrere trafikk. Andre mulige kjedetyper er rute eller NAT
- hook input: Refererer til innkommende pakker
- prioritet 0: Basiskjedeprioritet definerer rekkefølgen på basiskjedene
- policy drop: Drop policyen, som standard, forkaster alle pakker
Som du kan se i det følgende skjermbildet, opprettet jeg to andre basekjeder som ligner den forrige, Restrictive Redirect og Restrictive Outgoing. Forskjellen er den definerte kroken for hver (krok frem og krok utgang). Å forklare dem er repeterende.
Etter de tre basekjedene kan vi fortsette med Nftables-reglene for å tillate loopback-trafikk.
Jeg legger til følgende linjer for innkommende og utgående trafikk på loopback-grensesnittet.
legge til regel ip Restriktiv Innkommende iifname lo teller godtalegge til regel ip Restriktiv Innkommende oifname lo teller godta
Nå legger jeg til fire regler som aksepterer utgående og innkommende TCP- og UDP-trafikk gjennom alle porter inkludert i variabelen $AllowPorts definert i begynnelsen av filen.
legge til regel ip Restriktiv innkommende tcp sport $AllowPorts teller godtalegge til regel ip Restriktiv utgående tcp dport $AllowPorts teller godta
legge til regel ip Restrictive Incoming udp sport $AllowPorts teller godta
legge til regel ip Restrictive Outgoing udp dport $AllowPorts teller godta
Du kan se hele manuset nedenfor.
Når du er ferdig med å skrive inn tabeller, kjeder og regler, lukker du dokumentet og lagrer endringene.
# I de to første linjene definerer jeg mitt lokale nettverk (LinuxHintNet) og et sett med porter (80,#443,22) for å aktivere trafikk gjennom dem i reglene nedenfor.
definer LinuxHintNet = 192.168.0.0 / 16
definer AllowPorts = { 80 , 443 , 53 , 22 }
#Jeg erklærer en ny tabell som vil inneholde kjeder og regler. Jeg kaller denne tabellen 'restriktiv'.
#IP-en gjelder kun regler for IPv4. For IPv6, bruk bare 'ip6' og bruk 'inet' for begge protokollene.
legg til tabell ip Begrensende
# Etter å ha opprettet tabellen, oppretter jeg tre kjeder, innkommende, omdirigere og utgående,
#Navnene deres er vilkårlige. Alle dropper innkommende, utgående og videresendingstrafikk som standard.
legg til kjede ip Begrensende innkommende { type filter krok inngangsprioritet 0 ; politikk fall; }
legg til kjede ip Restriktiv omdirigering { type filterkrok fremoverprioritet 0 ; politikk fall; }
legg til kjede ip Begrensende utgående { type filterkrok utgangsprioritet 0 ; politikk fall; }
# Jeg implementerer to regler for å tillate loopback-trafikk.
legge til regel ip Restriktiv Innkommende iifname lo teller godta
legge til regel ip Restriktiv Innkommende oifname lo teller godta
# Jeg implementerer regler for å tillate trafikk gjennom porter definert i AllowPorts-variabelen.
legge til regel ip Restriktiv innkommende tcp sport $AllowPorts teller godta
legge til regel ip Restriktiv utgående tcp dport $AllowPorts teller godta
legge til regel ip Restrictive Incoming udp sport $AllowPorts teller godta
legge til regel ip Restrictive Outgoing udp dport $AllowPorts teller godta
For å aktivere brannmuren, kjør følgende kommando:
sudo nft -f brannmur.nft
Du kan sjekke reglene dine ved å kjøre følgende kommando:
sudo nft liste regelsett
Det er en grunnleggende restriktiv brannmur.
Konklusjon:
Som du kan se, er Nftables mye mer vennlig enn Iptables, og brukere kan lære Nftables raskere enn Iptables. Siden Iptables blir avviklet, og mange distribusjoner bruker Nftables som standard brannmur, inkludert Debian. Erfarne brukere av Iptables vil kanskje se på Iptables-nftables-compat-verktøyet, som oversetter Iptables til Nftables. Dette kan hjelpe dem til å forstå forskjellene.
Profesjonelle brukere som systemadministratorer har en tendens til å fortsette å jobbe med Iptables; unngå å ignorere Nftables for å spare tid mens du forbedrer filtreringen. Jeg håper denne artikkelen var enkel nok til å overbevise deg om å prøve Nftables.