nftables пакет чыпкасы 0.9.4 чыгаруу

жарыяланган пакет чыпкасы чыгаруу nftables 0.9.4, IPv6, IPv4, ARP жана тармак көпүрөлөрү үчүн пакет чыпкалоо интерфейстерин бириктирүү аркылуу iptables, ip6table, arptables жана ebtables алмаштыруучу катары өнүгүп жатат. nftables пакети колдонуучу мейкиндигинде иштеген пакет чыпкасынын компоненттерин камтыйт, ал эми ядро ​​деңгээлиндеги жумуш 3.13. чыгаруудан бери Linux ядросунун бир бөлүгү болгон nf_tables подсистемасы тарабынан камсыз кылынат. Nftables 0.9.4 релизинин иштеши үчүн зарыл болгон өзгөртүүлөр келечектеги ядро ​​бутагына камтылган Linux 5.6.

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

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