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 (Berkeley Packet Filters) еске түсіретін арнайы виртуалды машинада орындалады. Бұл тәсіл ядро ​​деңгейінде жұмыс істейтін сүзгілеу кодының өлшемін айтарлықтай азайтуға және талдау ережелері мен хаттамалармен жұмыс істеу логикасының барлық функцияларын пайдаланушы кеңістігіне жылжытуға мүмкіндік береді.

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

  • Қосылымдардағы диапазондарды қолдау (біріктіру, салыстыруды жеңілдететін мекенжайлар мен порттардың белгілі дестелері). Мысалы, элементтері тіркеме болып табылатын "ақ тізім" жиыны үшін "интервал" жалаушасын көрсету жиынның тіркемедегі ауқымдарды қамтуы мүмкін екенін көрсетеді ("ipv4_addr . ipv4_addr . inet_service" қосымшасы үшін бұрын дәл тізімге келтіруге болатын еді. "192.168.10.35. 192.68.11.123" нысанындағы сәйкестіктер, енді сіз "80-192.168.10.35-192.168.10.40." мекенжайлар топтарын көрсете аласыз.

    кесте 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}
    }

    тізбек жолағы {
    типті сүзгі ілгегі алдын ала бағыттау басымдылық сүзгісі; саясаттың төмендеуі;
    ip саддр. ip әке. tcp dport @whitelist қабылданады
    }
    }

  • Жиындар мен карта тізімдерінде сәйкестік кезінде элемент пішімін анықтайтын «typeof» директивасын пайдалануға болады.
    Мысалы:

    кесте ip foo {
    ақ тізім орнату {
    IP saddr түрі
    элементтер = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

    тізбек жолағы {
    типті сүзгі ілгегі алдын ала бағыттау басымдылық сүзгісі; саясаттың төмендеуі;
    ip daddr @whitelist қабылданады
    }
    }

    кесте ip foo {
    карта adr2mark {
    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 destinations { 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 қосулы») арқылы қосылады, содан кейін ол негізгі тізбекке арналған nftables ішінде «ажыру» жалаушасы арқылы іске қосылады. Linux ядросының 5.6 нұсқасын пайдаланған кезде, тақырып өрісін сәйкестендіру және кіріс интерфейсін тексеру үшін пакеттерді қабылдау, жою, қайталау (көшіру) және қайта жіберу (fwd) үшін аппараттық жеделдетуге қолдау көрсетіледі. Төмендегі мысалда 192.168.30.20 мекенжайынан келетін пакеттерді тастау операциялары пакеттерді ядроға өткізбей, желілік карта деңгейінде орындалады:

    # cat file.nft
    netdev кестесі x {
    тізбек y {
    түрі сүзгі ілгегі кіру құрылғысы eth0 басымдық 10; жалауларды түсіру;
    ip saddr 192.168.30.20 тамшысын
    }
    }
    # nft -f файл.nft

  • Ережелердегі қатенің орны туралы жақсартылған ақпарат.

    # nft жою ережесі ip yz дескриптор 7
    Қате: Ережені өңдеу мүмкін емес: мұндай файл немесе каталог жоқ
    ip yz ережесін жою 7
    ^

    # nft жою ережесі ip xx дескриптор 7
    Қате: Ережені өңдеу мүмкін емес: мұндай файл немесе каталог жоқ
    ip xx ережесін жою 7
    ^

    # nft кестені жою
    Қате: мұндай файл немесе каталог жоқ; Сіз отбасылық IP-де «тест» кестесін айттыңыз ба?
    кестені жою
    ^^^^

    Бірінші мысал «y» кестесінің жүйеде жоқтығын, екіншісінде «7» өңдегішінің жоқтығын және үшінші мысалда кесте атауын теру кезінде қате туралы сұраудың көрсетілетінін көрсетеді.

  • «meta sdif» немесе «meta sdifname» көрсету арқылы құл интерфейсін тексеруге қолдау қосылды:

    ... мета sdifname vrf1 ...

  • Оңға немесе солға ауыстыру операцияларына қолдау қосылды. Мысалы, бар пакет белгісін 1 битке солға жылжыту және кіші битті 1-ге орнату үшін:

    … мета белгі жиынтығы мета белгісі lshift 1 немесе 0x1 …

  • Кеңейтілген нұсқа туралы ақпаратты көрсету үшін «-V» опциясы енгізілді.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli: оқу сызығы
    json: иә
    minigmp: жоқ
    libxtables: иә

  • Пәрмен жолы опциялары енді пәрмендерден бұрын көрсетілуі керек. Мысалы, «nft -a list ережелер жинағын» көрсету керек және «nft list ережелер жинағы -a» іске қосу қатеге әкеледі.

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

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