nftables пакеттік сүзгі 1.0.0 шығарылымы

IPv1.0.0, IPv4, ARP және желілік көпірлер (iptables, ip6table, arptables және ebtables ауыстыруға бағытталған) үшін пакеттік сүзгілеу интерфейстерін біріктіретін nftables 6 пакеттік сүзгісінің шығарылымы жарияланды. nftables 1.0.0 шығарылымының жұмыс істеуі үшін қажетті өзгерістер Linux 5.13 ядросына енгізілген. Нұсқа нөмірінің елеулі өзгеруі ешқандай іргелі өзгерістермен байланысты емес, тек ондық санау жүйесіндегі нөмірлеуді дәйекті жалғастырудың салдары болып табылады (алдыңғы шығарылым 0.9.9).

nftables бумасы пайдаланушы кеңістігінде жұмыс істейтін пакеттік сүзгі құрамдастарын қамтиды, ал ядро ​​деңгейіндегі жұмыс 3.13 шығарылымынан бері Linux ядросының бөлігі болып табылатын nf_tables ішкі жүйесі арқылы қамтамасыз етіледі. Ядро деңгейі пакеттерден деректерді алу, деректер операцияларын орындау және ағынды басқару үшін негізгі функцияларды қамтамасыз ететін жалпы протоколға тәуелсіз интерфейсті ғана қамтамасыз етеді.

Сүзгілеу ережелерінің өздері және хаттамаға тән өңдеушілер пайдаланушы кеңістігінің байт-кодына құрастырылады, содан кейін бұл байт код Netlink интерфейсінің көмегімен ядроға жүктеледі және ядрода BPF (Berkeley Packet Filters) ұқсайтын арнайы виртуалды машинада орындалады. Бұл тәсіл ядро ​​деңгейінде жұмыс істейтін сүзгілеу кодының өлшемін айтарлықтай азайтуға және талдау ережелерінің барлық функцияларын және протоколдармен жұмыс істеу логикасын пайдаланушы кеңістігіне жылжытуға мүмкіндік береді.

Негізгі инновациялар:

  • Жиынтық тізімдерге «*» бүркеніш элементіне қолдау қосылды, ол жиында анықталған басқа элементтерге жатпайтын кез келген бумалар үшін іске қосылады. кесте x {карта блоктау тізімі {түрі ipv4_addr: үкім жалаулары аралығы элементтері = {192.168.0.0/16: қабылдау, 10.0.0.0/8: қабылдау, *: тастау}} тізбегі y {түрі сүзгі ілмегі алдын ала бағыттау басымдығы 0; саясатты қабылдау; ip saddr vmap @blocklist } }
  • «--define» опциясы арқылы пәрмен жолынан айнымалы мәндерді анықтауға болады. # cat test.nft кестесі netdev x { y тізбегі { сүзгі ілмегі кіру құрылғыларының түрі = $dev басымдылығы 0; саясаттың төмендеуі; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Карта тізімдерінде тұрақты (күй) өрнектерді пайдалануға рұқсат етіледі: table inet filter { map portmap { type inet_service : үкім есептегіш элементтері = { 22 санауыш пакеттер 0 байт 0 : jump ssh_input, * санауыш пакеттер 0 байт 0 : тастау } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } тізбекті алдын ала бағыттау { түрі сүзгі ілмегі алдын ала бағыттау басымдылығы шикі; саясатты қабылдау; iif vmap {"lo": секіру wan_input} }}
  • Берілген пакеттер тобына арналған өңдеушілер тізімін көрсету үшін "тізім ілгектері" пәрмені қосылды: # nft тізім ілгектері ip құрылғысы eth0 отбасы ip { hook ingress { +0000000010 тізбегі netdev xy [nf_tables] +0000000300 тізбек inet mw [nf_tables] } hook input { -0000000100 тізбегі ip ab [nf_tables] +0000000300 тізбек inet mz [nf_tables] } алға ілмек { -0000000225 selinux_ipv4_forward 0000000000 тізбек IP ac [nf_tables] {0000000225 тізбегі IP ac [nf_tables] -4ux 0000000225_output } hook postrouting { +4 XNUMX selinux_ipvXNUMX_postroute } }
  • Кезек блоктары пакеттерді пайдаланушы кеңістігіндегі кезектерге тарату үшін jhash, symhash және numgen өрнектерін біріктіруге мүмкіндік береді. … symhash mod 65536 кезегі … кезек жалаулары numgen inc mod 65536 үшін айналып өту… jhash oif үшін кезек . meta mark mod 32 "кезегі" ерікті кілттерге негізделген пайдаланушы кеңістігіндегі кезекті таңдау үшін карта тізімдерімен біріктірілуі мүмкін. ... кезек жалаулары oifname картасын айналып өтеді { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Жиын тізімін қамтитын айнымалы мәндерді бірнеше карталарға кеңейтуге болады. интерфейстерді анықтау = { eth0, eth1 } кесте ip x { тізбек y { түр сүзгі ілгегі енгізу басымдығы 0; саясатты қабылдау; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft тізімі ережелер жинағы кесте ip x { тізбегі y { түр сүзгі ілмегі енгізу басымдығы 0; саясатты қабылдау; iifname vmap { "lo" : қабылдау, "eth0" : тастау, "eth1" : тастау } } }
  • Vmaps (Үкім картасы) аралықпен біріктіруге рұқсат етіледі: # nft қосу ережесі xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2: қабылдау}
  • NAT салыстыруларына арналған жеңілдетілген синтаксис. Мекенжай ауқымдарын көрсетуге рұқсат етілген: ... snat to ip saddr картасы { 10.141.11.4 : 192.168.2.2-192.168.2.4 } немесе айқын IP мекенжайлары мен порттары: ... dnat to ip saddr картасы { 10.141.11.4 : 192.168.2.3 : . 80 } немесе IP ауқымдары мен порттарының тіркесімі: ... dnat to ip saddr . tcp dport картасы {192.168.1.2. 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Ақпарат көзі: opennet.ru

пікір қалдыру