Ядро деңгээли пакеттерден маалыматтарды алуу, маалымат операцияларын аткаруу жана агымды башкаруу үчүн негизги функцияларды камсыз кылган жалпы протоколдон көз карандысыз интерфейсти гана камсыз кылат. Чыпкалоо эрежелери жана протоколго тиешелүү иштеткичтер колдонуучу мейкиндигинде байткодго түзүлөт, андан кийин бул байт код Netlink интерфейсинин жардамы менен ядрого жүктөлөт жана ядродо BPFди (Беркли пакеттик чыпкаларын) эске салган атайын виртуалдык машинада аткарылат. Бул ыкма ядро деңгээлинде иштеген чыпкалоочу коддун көлөмүн бир топ кыскартууга жана талдоо эрежелеринин жана протоколдор менен иштөө логикасынын бардык функцияларын колдонуучу мейкиндигине жылдырууга мүмкүндүк берет.
Негизги инновациялар:
- Байланыштардагы диапазондорду колдоо (салыштырууну жөнөкөйлөтүүчү даректердин жана порттордун белгилүү топтомдору). Мисалы, элементтери тиркеме болгон "ак тизме" үчүн "интервал" желекчесин көрсөтүү, топтом тиркемеде диапазондорду камтышы мүмкүн экенин көрсөтөт ("ipv4_addr . ipv4_addr . inet_service" тиркемеси үчүн мурда так тизмелөө мүмкүн болгон "192.168.10.35. 192.68.11.123" формасындагы дал келүүлөр, эми "80-192.168.10.35-192.168.10.40." даректеринин топторун көрсөтсөңүз болот.
table ip foo {
ак тизме коюу {
ipv4_addr териңиз. ipv4_addr. inet_service
желектер аралыгы
элементтер = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80}
}чынжыр тилке {
түрү чыпкасы илгич prerouting артыкчылык чыпкасы; саясаттын төмөндөшү;
ip saddr. ip daddr. tcp dport @whitelist кабыл алуу
}
} - Топтомдордо жана карта тизмелеринде дал келүүдө элементтин форматын аныктаган “typeof” директивасын колдонсо болот.
Мисалы:table ip foo {
ак тизме коюу {
typeof ip saddr
элементтер = {192.168.10.35, 192.168.10.101, 192.168.10.135}
}чынжыр тилке {
түрү чыпкасы илгич prerouting артыкчылык чыпкасы; саясаттын төмөндөшү;
ip daddr @whitelist кабыл алыңыз
}
}table ip foo {
карта addr2mark {
typeof ip saddr: мета белги
элементтер = {192.168.10.35: 0x00000001, 192.168.10.135: 0x00000002}
}
} - Карта тизмелеринин же аталган топтомдордун негизинде NAT трансформацияларын аныктоодо даректи жана портту көрсөтүүгө мүмкүндүк берген NAT байланыштарындагы кошулмаларды колдонуу мүмкүнчүлүгү кошулду:
nft эрежесин кошуу ip nat pre dnat ip addr. порттон IP saddr картасы {1.1.1.1: 2.2.2.2. отуз }
nft картаны кошуу IP nat багыттары { type ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
nft эрежесин кошуу ip nat pre dnat ip addr. IP saddr портуна. tcp dport картасы @destinations - Тармак картасы тарабынан аткарылган кээ бир чыпкалоо операциялары менен аппараттык тездетүүнү колдоо. Ылдамдатуу ethtool утилитасы аркылуу иштетилет (“ethtool -K eth0 hw-tc-offload on”), андан кийин ал “түшүрүү” желегин колдонуу менен негизги чынжыр үчүн nftables иштетилет. Linux ядросун 5.6 колдонуп жатканда, пакеттерди кабыл алуу, жокко чыгаруу, кайталоо (кайталоо) жана жөнөтүү (fwd) менен айкалыштырууда баш талаа дал келүү жана кирүүчү интерфейсти текшерүү үчүн аппараттык ылдамдатуу колдоого алынат. Төмөндөгү мисалда 192.168.30.20 дарегинен келген пакеттерди түшүрүү операциялары пакеттерди ядрого өткөрбөстөн, тармактык картанын деңгээлинде аткарылат:
# cat file.nft
table netdev x {
чынжыр y {
түрү чыпкасы илгич кирүү аппарат eth0 артыкчылык 10; желектер түшүрүү;
ip saddr 192.168.30.20 тамчы
}
}
# nft -f file.nft - Эрежелердеги катанын орду жөнүндө жакшыртылган маалымат.
# nft эрежесин жок кылуу ip yz туткасы 7
Ката: Эреже иштетилбей койду: Мындай файл же каталог жок
ip yz эрежесин өчүрүү 7
^# nft эрежесин жок кылуу ip xx туткасы 7
Ката: Эреже иштетилбей койду: Мындай файл же каталог жок
ip xx эрежесин жок кылуу 7
^# nft таблицаны өчүрүү
Ката: Мындай файл же каталог жок; үй-бүлөлүк IPдеги "тест" таблицасын айткыңыз келдиби?
таблицаны жок кылуу
^^^^Биринчи мисал "y" таблицасынын системада жок экенин, экинчисинде "7" иштеткичинин жоктугун, үчүнчүсү таблица атын терүүдө катага чакырык көрсөтүлөрүн көрсөтөт.
- "meta sdif" же "meta sdifname" көрсөтүү менен кул интерфейсин текшерүү үчүн кошумча колдоо:
... meta sdifname vrf1 ...
- Оңго же солго жылдыруу операциялары үчүн кошумча колдоо. Мисалы, учурдагы пакет энбелгисин 1 битке солго жылдыруу жана кичи битти 1ге коюу үчүн:
… meta mark set meta mark lshift 1 же 0x1…
- Кеңейтилген версия маалыматын көрсөтүү үчүн "-V" опциясы ишке киргизилди.
# nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: ооба
minigmp: жок
libxtables: ооба - Эми буйрук сабынын параметрлери буйруктардан мурун көрсөтүлүшү керек. Мисалы, сиз "nft -a list ruleset" дегенди көрсөтүшүңүз керек, бирок "nft list ruleset -a" иштетүү катага алып келет.
Source: opennet.ru