Tutorial Nftables

Tutorial Nftables



Acest tutorial explică cum să lucrezi cu firewall-ul Nftables Linux. Acest conținut este optimizat atât pentru utilizatorii cu experiență Linux, cât și pentru cei noi.

Nftables este o componentă a nucleului Linux care oferă funcționalități de firewall. Este înlocuirea lui Iptables.







După ce ați citit acest tutorial, veți înțelege regulile Nftables și veți putea să vă creați firewall-ul. Nu aveți nevoie de cunoștințe anterioare despre Iptables.



Toate exemplele din acest tutorial conțin capturi de ecran, ceea ce face ușor pentru toți utilizatorii Linux, indiferent de nivelul lor de cunoștințe, să le înțeleagă și să le implementeze.



Noțiuni introductive cu Nftables

Înainte de a începe, creați și deschideți un fișier folosind un editor de text precum nano sau vi pentru a începe să introduceți primele reguli Nftables pe baza exemplului următor. Nu copiați-lipiți; scrie totul.





nano firewall.nft

Exemplul din acest tutorial este destul de simplu și arată un firewall restrictiv în care tot traficul IPv4 este eliminat, cu excepția loopback-ului și a porturilor specifice.



În captura de ecran anterioară, am folosit prima linie pentru a-mi defini rețeaua locală (192.168.0.0/16) ca LinuxHintNet.

definiți LinuxHintNet = 192.168.0.0 / 16

În a doua linie, definesc un grup de porturi (80,443 și 22). Denumesc acest grup AllowPorts pentru că plănuiesc să permit traficul prin ele. AllowPorts este un nume arbitrar.

definiți AllowPorts   = { 80 , 443 , 53 , 22 }

Apoi, adaug un tabel, care este un container sau un grup de lanțuri și reguli; ambele sunt explicate mai jos. Tabelele ajută regulile și lanțurile să fie organizate. Am numit tabelul din exemplu „Restrictiv”, deoarece conține o politică restrictivă, iar numele său este arbitrar.

IP-ul dinaintea numelui tabelului indică faptul că regulile tabelului que vor fi aplicate numai traficului IPv4. Puteți utiliza inet în loc de IP pentru a aplica reguli protocoalelor IPv4 și IPv6. Sau puteți înlocui IP cu ip6 numai pentru IPv6.

Amintiți-vă, restrictiv este un nume pe care l-am definit în mod arbitrar. Puteți denumi tabelul după cum doriți.

În cazul meu, aplic reguli numai pentru IPv4, așa cum se arată mai jos.

adauga tabel ip Restrictiv

Pentru ambele protocoale, utilizați următoarele:

add table inet Restrictive

Apoi adăugăm primul lanț de bază, pe care îl numesc arbitrar Incoming deoarece este legat de traficul de intrare. Cu toate acestea, îl puteți numi așa cum doriți.

Următorul lanț de bază elimină în mod implicit tot traficul de intrare:

  • add chain ip Restrictive Incoming: Această secțiune adaugă lanțul Restrictive Incoming pentru a fi aplicat la IPv4
  • filtru de tip: Acesta definește tipul de lanț ca filtru, deoarece va filtra traficul. Alte tipuri posibile de lanț sunt ruta sau NAT
  • Hook input: Se referă la pachetele primite
  • priority 0: Prioritatea lanțului de bază definește ordinea lanțurilor de bază
  • policy drop: politica de drop, în mod implicit, renunță la toate pachetele
Adăugați lanț ip Intrare restrictivă { tip prioritatea de intrare a cârligului de filtru 0 ; scăderea politicii; }

După cum puteți vedea în următoarea captură de ecran, am creat alte două lanțuri de bază similare cu cele precedente, Restrictive Redirect și Restrictive Outgoing. Diferența este cârligul definit pentru fiecare (cârlig înainte și ieșire cârlig). Explicarea lor este repetitivă.

După cele trei lanțuri de bază, putem continua cu regulile Nftables pentru a permite traficul loopback.

Adaug următoarele linii pentru traficul de intrare și de ieșire pe interfața loopback.

adauga regula ip Restrictive Incoming iifname lo counter accept

adauga regula ip Restrictive Incoming oifname lo counter accept

Acum, adaug patru reguli care acceptă traficul TCP și UDP de ieșire și de intrare prin toate porturile incluse în variabila $AllowPorts definită la începutul fișierului.

adauga regula ip Restrictive Incoming tcp sport $AllowPorts counter accept

adauga regula ip Dport tcp de ieșire restrictiv $AllowPorts counter accept

adauga regula ip Restrictive Incoming udp sport $AllowPorts counter accept

adauga regula ip Restrictive Outgoing udp dport $AllowPorts counter accept

Puteți vedea scriptul complet mai jos.

După ce ați terminat de tastat tabelele, lanțurile și regulile, închideți documentul și salvați modificările.

# În primele două rânduri, îmi definesc rețeaua locală (LinuxHintNet) și un set de porturi (80,
#443,22) pentru a permite traficul prin ele în regulile de mai jos.
definiți LinuxHintNet = 192.168.0.0 / 16
definiți AllowPorts   = { 80 , 443 , 53 , 22 }
#Declar un nou tabel care va conține lanțuri și reguli. Eu numesc acest tabel „Restrictiv”.
# „IP” aplică reguli numai pentru IPv4. Pentru IPv6, utilizați numai „ip6” și folosiți „inet” pentru ambele protocoale.
adauga tabel ip Restrictiv
# După ce am creat tabelul, creez trei lanțuri, Incoming, Redirect și Outgoing,
#Numele lor sunt arbitrare. Toate acestea reduc traficul de intrare, de ieșire și de redirecționare în mod implicit.
adăugați lanț ip Intrare restrictivă { tip prioritatea de intrare a cârligului de filtru 0 ; scăderea politicii; }
adăugați lanț ip Redirecționare restrictivă { tip prioritatea cârligului de filtru înainte 0 ; scăderea politicii; }
adăugați lanț ip Ieșire restrictivă { tip prioritatea de ieșire a cârligului de filtru 0 ; scăderea politicii; }
# Implementez două reguli pentru a permite traficul loopback.
adauga regula ip Restrictive Incoming iifname lo counter accept
adauga regula ip Restrictive Incoming oifname lo counter accept
# Implementez reguli pentru a permite traficul prin porturile definite în variabila AllowPorts.
adauga regula ip Restrictive Incoming tcp sport $AllowPorts counter accept
adauga regula ip Dport tcp de ieșire restrictiv $AllowPorts counter accept
adauga regula ip Restrictive Incoming udp sport $AllowPorts counter accept

adauga regula ip Restrictive Outgoing udp dport $AllowPorts counter accept

Pentru a activa firewall-ul, executați următoarea comandă:

sudo nft -f firewall.nft

Vă puteți verifica regulile rulând următoarea comandă:

sudo set de reguli liste nft

Acesta este un firewall restrictiv de bază.

Concluzie:

După cum puteți vedea, Nftables este mult mai prietenos decât Iptables, iar utilizatorii pot învăța Nftables mai repede decât Iptables. Deoarece Iptables este întrerupt și multe distribuții folosesc Nftables ca firewall implicit, inclusiv Debian. Utilizatorii experimentați Iptables ar putea dori să se uite la instrumentul Iptables-nftables-compat, care traduce Iptables în Nftables. Acest lucru îi poate ajuta să înțeleagă diferențele.

Utilizatorii profesioniști, cum ar fi administratorii de sistem, tind să continue să lucreze cu Iptables; evitați ignorarea Nftables pentru a economisi timp în timp ce îmbunătățiți filtrarea. Sper că acest articol a fost suficient de simplu pentru a vă convinge să încercați Nftables.