Lëshimi i filtrit të paketave nftables 1.0.3

ËshtĂ« publikuar nftables 1.0.3, njĂ« filtĂ«r paketash qĂ« unifikon ndĂ«rfaqet e filtrimit tĂ« paketave pĂ«r IPv4, IPv6, ARP dhe urat e rrjetit (synon tĂ« zĂ«vendĂ«sojĂ« iptables, ip6table, arptables dhe ebtables). Ndryshimet e nevojshme pĂ«r funksionimin e nftables 1.0.3 janĂ« pĂ«rfshirĂ« nĂ« kernelin Linux 5.18.

Paketa nftables përmban komponente të filtrit të paketave që funksionojnë në hapësirën e përdoruesit, ndërsa në nivelin e bërthamor punon nën-sistemi nf_tables, i cili është pjesë e bërthamës Linux që nga versione 3.13. Në nivelin e bërthamës ofrohet vetëm një ndërfaqe e përgjithshme, e pavaruar nga protokolli i veçantë dhe që ofron funksione bazë për nxjerrjen e të dhënave nga paketat, për kryerjen e operacioneve me të dhënat dhe menaxhimin e fluksit.

Rregullat për filtrimin dhe trajtuesit specifikë për protokollet kompilohet në kodin e bytes në hapësirën e përdoruesit, pas së cilës ky kod bytes ngarkohet në bërthamë përmes ndërfaqes Netlink dhe ekzekutohet në bërthamë në një mënyrë të veçantë, që i ngjan BPF (Filtrat e Paketa Berkeley). Ky qasje lejon të reduktohet ndjeshëm madhësia e kodit të filtrimit që operon në nivelin e bërthamës dhe të transferohet të gjitha funksionet e përpunimit të rregullave dhe logjikës së punës me protokollet në hapësirën e përdoruesit. makinën virtuale, që ngjan me BPF (Berkeley Packet Filters). Ky qasje lejon reduktimin e ndjeshëm të madhësisë së kodit të filtrimit që operon në nivelin e bërthamës dhe nxjerrjen e të gjitha funksioneve për të analizuar rregullat dhe logjikën e punës me protokollet në hapësirën e përdoruesit.

Novitetet kryesore:

  • NĂ« listat set Ă«shtĂ« shtuar mbĂ«shtetja pĂ«r pĂ«rputhjen e emrave tĂ« ndĂ«rfaqeve tĂ« rrjetit sipas maskĂ«s, pĂ«r shembull tĂ« pĂ«rcaktuar me simbolin «*»: table inet testifsets { set simple_wild { type ifname flags interval elements = { «abcdef*», «othername», «ppp0» } } chain v4icmp { type filter hook input priority 0; policy accept; iifname @simple_wild counter packets 0 bytes 0 iifname { «abcdef*», «eth0» } counter packets 0 bytes 0 } }
  • ËshtĂ« zbatuar bashkimi automatik i elementeve tĂ« mbivendosura tĂ« listĂ«s set gjatĂ« punĂ«s. MĂ« parĂ«, kur aktivizohej opsioni «auto-merge», bashkimi kryhej nĂ« fazĂ«n e deklarimit tĂ« rregullave, ndĂ«rsa tani ndodh edhe gjatĂ« shtimit inkremental tĂ« elementeve tĂ« reja nĂ« funksionim. PĂ«r shembull, nĂ« fazĂ«n e deklarimit lista set y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8, 3.3.3.4, 3.3.3.5 } } do tĂ« shndĂ«rrohet nĂ« elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } dhe mĂ« pas, nĂ«se shtohen elemente tĂ« reja # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } do tĂ« marrĂ« formĂ«n elements = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Kur hiqen nga lista elemente të veçanta që përfshihen në elemente ekzistuese me diapazon, diapazoni ngushtohet ose ndahet.

  • NĂ« optimizuesin e rregullave, i cili thirret me opsionin «-o/—optimize», Ă«shtĂ« shtuar mbĂ«shtetja pĂ«r bashkimin e disa rregullave tĂ« pĂ«rkthimit tĂ« adresave (NAT) nĂ« njĂ« listĂ« map. PĂ«r shembull, pĂ«r grupin # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } }

    ekzekutimi i «nft -o -c -f ruleset.nft» do të çojë në shndërrimin e rregullave të ndara «ip saddr» në një listë map: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }

    Në mënyrë të ngjashme, edhe shprehjet raw mund të shndërrohen në lista map: # cat ruleset.nft table ip x { [
] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th,160,128 0x0e31393032383939353831343037320e goto nat_dns_this_5301 udp length 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp length 62-78 @th,160,128 0x0e32393535373539353636383732310e goto nat_dns_saturn_5302 udp length 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_dns_saturn_5303 drop } }

    pas optimizimit do të marrim një listë map: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }

  • Lejohet pĂ«rdorimi i shprehjeve raw nĂ« operacionet e konkatenimit. PĂ«r shembull: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } ose table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
  • ËshtĂ« shtuar mbĂ«shtetja pĂ«r specifikimin e fushave numerike tĂ« plota tĂ« header-it nĂ« operacionet e konkatenimit: table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : accept, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; policy drop; udp length . @ih,32,32 vmap @m1 } }
  • ËshtĂ« shtuar mbĂ«shtetja pĂ«r rivendosjen e opsioneve TCP (funksionon vetĂ«m me Linux kernel 5.18+): tcp flags syn reset tcp option sack-perm
  • ËshtĂ« pĂ«rshpejtuar ekzekutimi i komandave pĂ«r shfaqjen e zinxhirĂ«ve («nft list chain x y»).

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster