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 map {192.168.1.2.80: 10.141.10.2-10.141.10.5.8888-8999}
Source: opennet.ru
