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 (Беркли пакеттик чыпкалары) окшош атайын виртуалдык машинада аткарылат. Бул ыкма ядро ​​деңгээлинде иштеген чыпкалоочу коддун көлөмүн олуттуу түрдө кыскартууга жана талдоо эрежелеринин бардык функцияларын жана протоколдор менен иштөө логикасын колдонуучу мейкиндигине жылдырууга мүмкүндүк берет.

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

  • "*" маска элементи үчүн колдоо топтом тизмелерине кошулду, ал топтомдо аныкталган башка элементтерге кирбеген бардык пакеттер үчүн иштетилет. table x {карта бөгөттөөлөр тизмеси {түр ipv4_addr: өкүм желектер аралыгы элементтери = {192.168.0.0/16: кабыл алуу, 10.0.0.0/8: кабыл алуу, *: таштоо}} чынжыр y {түр чыпкасы илгич алдын ала багыттоо артыкчылык 0; саясатты кабыл алуу; ip saddr vmap @blocklist } }
  • “--аныктоо” опциясын колдонуу менен буйрук сабынан өзгөрмөлөрдү аныктоого болот. # 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 : таштоо } } чынжыр ssh_input { } чынжыр wan_input { tcp dport vmap @portmap } чынжыр алдын ала багыттоо { түрү фильтр илгич алдын ала багыттоо приоритет чийки; саясатты кабыл алуу; iif vmap {"lo": секирүү wan_input}}}}
  • Берилген пакеттик үй-бүлө үчүн иштеткичтердин тизмесин көрсөтүү үчүн "тизме илгичтери" буйругу кошулду: # nft тизме илгичтери ip түзмөк eth0 family 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_tables0000000225} hookselv4 0000000225_output } hook postrouting {+4 XNUMX selinux_ipvXNUMX_postroute } }
  • Кезек блоктору пакеттерди колдонуучу мейкиндигинде кезектерге бөлүштүрүү үчүн jhash, symhash жана numgen туюнтмаларын бириктирүүгө мүмкүндүк берет. … symhash режимине кезек 65536 … queue flags to numgen inc мод 65536га өтүү… jhash oif үчүн кезек. meta mark mod 32 "кезеги" ошондой эле ыктыярдуу баскычтардын негизинде колдонуучу мейкиндигинде кезекти тандоо үчүн карта тизмелери менен айкалыштырылышы мүмкүн. ... кезек желектери oifname картасын айланып өтүшөт { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Бир нече карталарга топтом тизмесин камтыган өзгөрмөлөрдү кеңейтүүгө болот. интерфейстерди аныктоо = { eth0, eth1 } стол ip x { чынжыр y { түрү фильтр илгич киргизүү приоритети 0; саясатты кабыл алуу; iifname vmap { мына : кабыл алуу, $interfaces : drop} } } # nft -f x.nft # nft тизмеси эрежелер топтому стол ip x { чынжыр y { түрү чыпка илгич киргизүү приоритети 0; саясатты кабыл алуу; iifname vmap { "lo" : кабыл алуу, "eth0" : таштоо, "eth1" : таштоо } } }
  • Vmaps (өкүм картасы) интервал менен айкалыштырууга жол берилет: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2: кабыл алуу}
  • NAT карталары үчүн жөнөкөйлөштүрүлгөн синтаксис. Дарек диапазондорун көрсөтүүгө уруксат берилет: ... snat to ip saddr map {10.141.11.4 : 192.168.2.2-192.168.2.4 } же ачык IP даректери жана порттору: ... dnat to ip saddr map {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 }

Source: opennet.ru

Комментарий кошуу