Tutorial sa Nftables

Tutorial Sa Nftables



Ipinapaliwanag ng tutorial na ito kung paano gumana sa firewall ng Nftables Linux. Ang nilalamang ito ay na-optimize kapwa para sa mga may karanasan sa Linux at mga bagong user.

Ang Nftables ay isang bahagi ng Linux kernel na nagbibigay ng mga functionality ng firewall. Ito ang kapalit ng Iptables.







Pagkatapos basahin ang tutorial na ito, mauunawaan mo ang mga panuntunan ng Nftables, at magagawa mong gawin ang iyong firewall. Hindi mo kailangan ng dating kaalaman sa Iptables.



Ang lahat ng mga halimbawa sa tutorial na ito ay naglalaman ng mga screenshot, na ginagawang madali para sa lahat ng mga gumagamit ng Linux, independyente sa kanilang antas ng kaalaman, na maunawaan at maipatupad ang mga ito.



Pagsisimula Sa Nftables

Bago magsimula, gumawa at magbukas ng file gamit ang isang text editor tulad ng nano o vi upang simulan ang pag-type ng iyong mga unang panuntunan sa Nftables batay sa sumusunod na halimbawa. Huwag kopyahin-i-paste; i-type ang lahat.





nano firewall.nft

Ang halimbawa sa tutorial na ito ay medyo simple at nagpapakita ng isang mahigpit na firewall kung saan ang lahat ng trapiko ng IPv4 ay bumaba maliban sa loopback at mga partikular na port.



Sa nakaraang screenshot, ginamit ko ang unang linya upang tukuyin ang aking lokal na network (192.168.0.0/16) bilang LinuxHintNet.

tukuyin ang LinuxHintNet = 192.168.0.0 / 16

Sa pangalawang linya, tinukoy ko ang isang pangkat ng mga port (80,443, at 22). Tinatawag ko itong grupong AllowPorts dahil plano kong payagan ang trapiko sa kanila. Ang AllowPorts ay isang arbitrary na pangalan.

tukuyin ang AllowPorts   = { 80 , 443 , 53 , 22 }

Pagkatapos, nagdaragdag ako ng isang talahanayan, na isang lalagyan o grupo ng mga kadena at mga panuntunan; pareho sa kanila ay ipinaliwanag sa ibaba. Ang mga talahanayan ay tumutulong sa mga tuntunin at kadena na maayos. Tinawag ko ang talahanayan sa halimbawang 'Restrictive' dahil naglalaman ito ng isang mahigpit na patakaran, at ang pangalan nito ay arbitrary.

Ang IP bago ang pangalan ng talahanayan ay nagpapahiwatig na ang que table rules ay ilalapat lamang sa IPv4 traffic. Maaari mong gamitin ang inet sa halip na IP upang ilapat ang mga panuntunan sa IPv4 at IPv6 protocol. O maaari mong palitan ang IP ng ip6 para sa IPv6 lamang.

Tandaan, ang Restrictive ay isang pangalan na arbitraryo kong tinukoy. Maaari mong pangalanan ang talahanayan ayon sa gusto mo.

Sa aking kaso, inilalapat ko lang ang mga panuntunan sa IPv4, tulad ng ipinapakita sa ibaba.

magdagdag ng talahanayan ip Naghihigpit

Para sa parehong mga protocol, gamitin ang sumusunod:

magdagdag ng table inet Restrictive

Pagkatapos ay idinagdag namin ang unang base chain, na arbitraryo kong pinangalanan ang Papasok dahil nauugnay ito sa papasok na trapiko. Gayunpaman, maaari mong pangalanan ito ayon sa gusto mo.

Ibinabagsak ng sumusunod na base chain ang lahat ng papasok na trapiko bilang default:

  • magdagdag ng chain ip Restrictive Incoming: Idinaragdag ng seksyong ito ang Restrictive Incoming chain na ilalapat sa IPv4
  • type filter: Tinutukoy nito ang uri ng chain bilang isang filter dahil sasala nito ang trapiko. Ang iba pang posibleng uri ng chain ay ruta o NAT
  • hook input: Tumutukoy sa mga papasok na packet
  • priyoridad 0: Tinutukoy ng priyoridad ng base chain ang pagkakasunud-sunod ng mga base chain
  • pagbaba ng patakaran: Ang patakaran sa pagbagsak, bilang default, ay itinatapon ang lahat ng packet
Magdagdag ng chain ip Mahigpit na Papasok { uri priyoridad sa input ng filter hook 0 ; pagbaba ng patakaran; }

Gaya ng makikita mo sa sumusunod na screenshot, gumawa ako ng dalawa pang base chain na katulad ng nauna, Restrictive Redirect at Restrictive Outgoing. Ang pagkakaiba ay ang tinukoy na hook para sa bawat isa (hook forward at hook output). Ang pagpapaliwanag sa kanila ay paulit-ulit.

Pagkatapos ng tatlong base chain, maaari tayong magpatuloy sa mga panuntunan ng Nftables upang payagan ang loopback na trapiko.

Idinaragdag ko ang mga sumusunod na linya para sa papasok at papalabas na trapiko sa interface ng loopback.

magdagdag ng panuntunan ip Restrictive Incoming iifname lo counter accept

magdagdag ng panuntunan ip Restrictive Incoming oifname lo counter accept

Ngayon, nagdagdag ako ng apat na panuntunan na tumatanggap ng papalabas at papasok na TCP at UDP na trapiko sa lahat ng port na kasama sa variable na $AllowPorts na tinukoy sa simula ng file.

magdagdag ng panuntunan ip Mahigpit na Papasok na tcp sport $AllowPorts counter accept

magdagdag ng panuntunan ip Mahigpit na Papalabas na tcp dport $AllowPorts counter accept

magdagdag ng panuntunan ip Mahigpit na Papasok na udp sport $AllowPorts counter accept

magdagdag ng panuntunan ip Mahigpit na Papalabas na udp dport $AllowPorts counter accept

Maaari mong makita ang buong script sa ibaba.

Kapag natapos mo nang i-type ang iyong mga talahanayan, chain, at panuntunan, isara ang dokumento at i-save ang mga pagbabago.

# Sa unang dalawang linya, tinukoy ko ang aking lokal na network (LinuxHintNet) at isang set ng mga port (80,
#443,22)upang paganahin ang trapiko sa pamamagitan ng mga ito sa mga panuntunan sa ibaba.
tukuyin ang LinuxHintNet = 192.168.0.0 / 16
tukuyin ang AllowPorts   = { 80 , 443 , 53 , 22 }
#Idineklara ko ang isang bagong talahanayan na maglalaman ng mga kadena at panuntunan. Tinatawag ko itong table na 'Restrictive'.
#Ang 'ip' ay naglalapat ng mga panuntunan sa IPv4 lamang. Para sa IPv6, gamitin lamang ang 'ip6' at gamitin ang 'inet' para sa parehong mga protocol.
magdagdag ng talahanayan ip Naghihigpit
# Pagkatapos likhain ang talahanayan, lumikha ako ng tatlong kadena, Papasok, Pag-redirect at Papalabas,
#Ang kanilang mga pangalan ay arbitrary. Lahat sila ay bumababa sa papasok, papalabas, at pagpapasa ng trapiko bilang default.
magdagdag ng kadena ip Mahigpit na Papasok { uri priyoridad sa input ng filter hook 0 ; pagbaba ng patakaran; }
magdagdag ng kadena ip Mahigpit na Pag-redirect { uri filter hook forward priority 0 ; pagbaba ng patakaran; }
magdagdag ng kadena ip Mahigpit na Paglabas { uri priyoridad na output ng filter hook 0 ; pagbaba ng patakaran; }
# Nagpapatupad ako ng dalawang panuntunan upang payagan ang loopback na trapiko.
magdagdag ng panuntunan ip Restrictive Incoming iifname lo counter accept
magdagdag ng panuntunan ip Restrictive Incoming oifname lo counter accept
# Nagpapatupad ako ng mga panuntunan upang payagan ang trapiko sa pamamagitan ng mga port na tinukoy sa variable na AllowPorts.
magdagdag ng panuntunan ip Mahigpit na Papasok na tcp sport $AllowPorts counter accept
magdagdag ng panuntunan ip Mahigpit na Papalabas na tcp dport $AllowPorts counter accept
magdagdag ng panuntunan ip Mahigpit na Papasok na udp sport $AllowPorts counter accept

magdagdag ng panuntunan ip Mahigpit na Papalabas na udp dport $AllowPorts counter accept

Upang i-activate ang firewall, patakbuhin ang sumusunod na command:

sudo nft -f firewall.nft

Maaari mong suriin ang iyong mga panuntunan sa pamamagitan ng pagpapatakbo ng sumusunod na command:

sudo nft list ruleset

Iyon ay isang pangunahing paghihigpit na firewall.

Konklusyon:

Tulad ng nakikita mo, ang Nftables ay mas palakaibigan kaysa sa Iptables, at ang mga user ay maaaring matuto ng Nftables nang mas mabilis kaysa sa Iptables. Dahil ang Iptables ay itinigil, at maraming distribusyon ang gumagamit ng Nftables bilang default na firewall, kasama ang Debian. Maaaring gusto ng mga may karanasang user ng Iptables na tingnan ang tool na Iptables-nftables-compat, na nagsasalin ng Iptables sa Nftables. Ito ay maaaring makatulong sa kanila na maunawaan ang mga pagkakaiba.

Ang mga propesyonal na gumagamit tulad ng mga tagapangasiwa ng system ay madalas na patuloy na nagtatrabaho sa Iptables; iwasang balewalain ang Nftables para makatipid ng oras habang pinapahusay ang pag-filter. Umaasa ako na ang artikulong ito ay sapat na simple upang kumbinsihin kang subukan ang Nftables.