Nftables-zelfstudie

Nftables Zelfstudie



Deze tutorial legt uit hoe je met de Nftables Linux firewall werkt. Deze inhoud is geoptimaliseerd voor zowel ervaren Linux-gebruikers als nieuwe gebruikers.

Nftables is een onderdeel van de Linux-kernel en biedt firewall-functionaliteiten. Het is de vervanger van Iptables.







Na het lezen van deze tutorial begrijp je de regels van de Nftables en kun je je firewall maken. Je hebt geen voorkennis over Iptables nodig.



Alle voorbeelden in deze tutorial bevatten screenshots, waardoor het gemakkelijk is voor alle Linux-gebruikers, ongeacht hun kennisniveau, om ze te begrijpen en te implementeren.



Aan de slag met Nftables

Voordat u aan de slag gaat, maakt en opent u een bestand met een teksteditor zoals nano of vi om uw eerste Nftables-regels te typen op basis van het volgende voorbeeld. Kopieer en plak niet; typ alles.





nano firewall.nft

Het voorbeeld in deze tutorial is vrij eenvoudig en toont een beperkende firewall waarin al het IPv4-verkeer wordt verwijderd, behalve loopback en specifieke poorten.



In de vorige schermafbeelding gebruikte ik de eerste regel om mijn lokale netwerk (192.168.0.0/16) te definiëren als LinuxHintNet.

definieer LinuxHintNet = 192.168.0.0 / 16

In de tweede regel definieer ik een groep poorten (80.443 en 22). Ik noem deze groep AllowPorts omdat ik van plan ben om er verkeer doorheen te laten gaan. AllowPorts is een willekeurige naam.

definieer AllowPorts   = { 80 , 443 , 53 , 22 }

Vervolgens voeg ik een tabel toe, die een container of een groep ketens en regels is; beide worden hieronder uitgelegd. Tabellen helpen regels en ketens te organiseren. Ik heb de tabel in het voorbeeld 'Beperkend' genoemd omdat deze een beperkend beleid bevat en de naam willekeurig is.

Het IP-adres voor de tabelnaam geeft aan dat wachtrijtabelregels alleen worden toegepast op IPv4-verkeer. U kunt inet gebruiken in plaats van IP om regels toe te passen op IPv4- en IPv6-protocollen. Of u kunt IP vervangen door ip6 voor alleen IPv6.

Onthoud dat beperkend een naam is die ik willekeurig heb gedefinieerd. U kunt de tafel een naam geven zoals u wilt.

In mijn geval pas ik regels alleen toe op IPv4, zoals hieronder weergegeven.

tafel toevoegen ik p Beperkend

Gebruik voor beide protocollen het volgende:

tabel toevoegen inet Beperkend

Vervolgens voegen we de eerste basisketen toe, die ik willekeurig Incoming noem omdat deze gerelateerd is aan het inkomende verkeer. U kunt het echter een naam geven zoals u wilt.

De volgende basisketen laat standaard al het inkomende verkeer vallen:

  • add chain ip Restrictive Incoming: Deze sectie voegt de Restrictive Incoming chain toe die moet worden toegepast op IPv4
  • type filter: dit definieert het ketentype als een filter omdat het verkeer zal filteren. Andere mogelijke ketentypes zijn route of NAT
  • hook-invoer: verwijst naar inkomende pakketten
  • prioriteit 0: Basisketenprioriteit definieert de volgorde van de basisketens
  • drop policy: het drop-beleid verwijdert standaard alle pakketten
Ketting toevoegen ik p Beperkende inkomende { type filterhaak invoerprioriteit 0 ; beleidsdaling; }

Zoals je kunt zien in de volgende schermafbeelding, heb ik twee andere basisketens gemaakt die vergelijkbaar zijn met de vorige, Restrictive Redirect en Restrictive Outgoing. Het verschil is de gedefinieerde haak voor elk (hook vooruit en hook output). Het uitleggen ervan is repetitief.

Na de drie basisketens kunnen we doorgaan met de Nftables-regels om loopback-verkeer toe te staan.

Ik voeg de volgende regels toe voor inkomend en uitgaand verkeer op de loopback-interface.

regel toevoegen ik p Beperkend Inkomend iifname lo counter accept

regel toevoegen ik p Beperkend Inkomend oifname lo counter accept

Nu voeg ik vier regels toe die uitgaand en inkomend TCP- en UDP-verkeer accepteren via alle poorten die zijn opgenomen in de variabele $AllowPorts die aan het begin van het bestand is gedefinieerd.

regel toevoegen ik p Beperkende Inkomende tcp-sport $AllowPorts tegen accepteren

regel toevoegen ik p Beperkende uitgaande tcp dport $AllowPorts tegen accepteren

regel toevoegen ik p Beperkende Inkomende udp-sport $AllowPorts tegen accepteren

regel toevoegen ik p Beperkend uitgaand udp dport $AllowPorts tegen accepteren

Je kunt het volledige script hieronder bekijken.

Zodra u klaar bent met het typen van uw tabellen, kettingen en regels, sluit u het document en slaat u de wijzigingen op.

# In de eerste twee regels definieer ik mijn lokale netwerk (LinuxHintNet) en een set poorten (80,
#443,22) om verkeer via hen mogelijk te maken in de onderstaande regels.
definieer LinuxHintNet = 192.168.0.0 / 16
definieer AllowPorts   = { 80 , 443 , 53 , 22 }
#Ik declareer een nieuwe tabel die ketens en regels zal bevatten. Ik noem deze tabel 'Beperkend'.
#De 'ip' is alleen van toepassing op IPv4. Gebruik voor IPv6 alleen 'ip6' en gebruik 'inet' voor beide protocollen.
tafel toevoegen ik p Beperkend
# Nadat ik de tabel heb gemaakt, maak ik drie ketens, Inkomend, Omleiden en Uitgaand,
#Hun namen zijn willekeurig. Ze laten allemaal standaard inkomend, uitgaand en doorsturend verkeer vallen.
ketting toevoegen ik p Beperkende inkomende { type filterhaak invoerprioriteit 0 ; beleidsdaling; }
ketting toevoegen ik p Beperkende omleiding { type filterhaak voorwaartse prioriteit 0 ; beleidsdaling; }
ketting toevoegen ik p Beperkend uitgaand { type filterhaak uitvoerprioriteit 0 ; beleidsdaling; }
# Ik implementeer twee regels om loopback-verkeer toe te staan.
regel toevoegen ik p Beperkend Inkomend iifname lo counter accept
regel toevoegen ik p Beperkend Inkomend oifname lo counter accept
# Ik implementeer regels om verkeer toe te staan ​​via poorten die zijn gedefinieerd in de variabele AllowPorts.
regel toevoegen ik p Beperkende Inkomende tcp-sport $AllowPorts tegen accepteren
regel toevoegen ik p Beperkende uitgaande tcp dport $AllowPorts tegen accepteren
regel toevoegen ik p Beperkende Inkomende udp-sport $AllowPorts tegen accepteren

regel toevoegen ik p Beperkend uitgaand udp dport $AllowPorts tegen accepteren

Voer de volgende opdracht uit om de firewall te activeren:

sudo nft -f firewall.nft

U kunt uw regels controleren door de volgende opdracht uit te voeren:

sudo nft lijst regelset

Dat is een fundamentele beperkende firewall.

Conclusie:

Zoals je kunt zien, is Nftables veel vriendelijker dan Iptables, en gebruikers kunnen Nftables sneller leren dan Iptables. Aangezien Iptables wordt stopgezet en veel distributies Nftables gebruiken als de standaardfirewall, inclusief Debian. Ervaren gebruikers van Iptables willen misschien kijken naar de tool Iptables-nftables-compat, die Iptables vertaalt naar Nftables. Dit kan hen helpen om de verschillen te begrijpen.

Professionele gebruikers zoals systeembeheerders hebben de neiging om met Iptables te blijven werken; vermijd het negeren van Nftables om tijd te besparen en tegelijkertijd de filtering te verbeteren. Ik hoop dat dit artikel eenvoudig genoeg was om je te overtuigen om Nftables te proberen.