nftables пакеттік сүзгі 0.9.5 шығарылымы

жарияланды пакеттік сүзгіні шығару nftables 0.9.5, IPv6, IPv4, ARP және желілік көпірлер үшін пакеттерді сүзгілеу интерфейстерін біріктіру арқылы iptables, ip6table, arptables және ebtables ауыстыру ретінде дамып келеді. nftables бумасы пайдаланушы кеңістігінде жұмыс істейтін пакеттік сүзгі құрамдастарын қамтиды, ал ядро ​​деңгейіндегі жұмыс 3.13 шығарылымынан бері Linux ядросының бөлігі болып табылатын nf_tables ішкі жүйесі арқылы қамтамасыз етіледі. Жұмыс істеу үшін nftables 0.9.5 шығарылымына қажетті өзгерістер ядроға енгізілген Linux 5.7.

Ядро деңгейі пакеттерден деректерді алу, деректер операцияларын орындау және ағынды басқару үшін негізгі функцияларды қамтамасыз ететін жалпы протоколға тәуелсіз интерфейсті ғана қамтамасыз етеді. Сүзгілеу ережелері мен хаттамаға тән өңдеушілер пайдаланушы кеңістігінде байт кодқа жинақталады, содан кейін бұл байт код Netlink интерфейсінің көмегімен ядроға жүктеледі және ядрода BPF (Berkeley Packet Filters) еске түсіретін арнайы виртуалды машинада орындалады. Бұл тәсіл ядро ​​деңгейінде жұмыс істейтін сүзгілеу кодының өлшемін айтарлықтай азайтуға және талдау ережелері мен хаттамалармен жұмыс істеу логикасының барлық функцияларын пайдаланушы кеңістігіне жылжытуға мүмкіндік береді.

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

  • Жиындарға жиын элементтерімен байланысты пакеттер мен трафик есептегіштеріне қолдау қосылды. Есептегіштер «counter» кілт сөзі арқылы қосылады:

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

    тізбек z {
    типті сүзгі ілгегі шығыс басымдылық сүзгісі; саясатты қабылдау;
    ip daddr @y
    }
    }

  • Есептегіштердің бастапқы мәндерін орнату үшін, мысалы, қайта іске қосқаннан кейін алдыңғы есептегіштерді қалпына келтіру үшін «nft -f» пәрменін пайдалануға болады:

    # мысық ережелер жинағы.nft
    кесте ip x {
    орнату y {
    IP saddr түрі
    қарсы
    элементтер = {192.168.10.35 қарсы пакеттер 1 байт 84, 192.168.10.101 \
    санауыш p 192.168.10.135 қарсы пакеттер 0 байт 0 }
    }

    тізбек z {
    типті сүзгі ілгегі шығыс басымдылық сүзгісі; саясатты қабылдау;
    ip daddr @y
    }
    }
    # nft -f ережелер жинағы.nft
    #nft тізімінің ережелер жинағы
    кесте ip x {
    орнату y {
    IP saddr түрі
    қарсы
    элементтер = {192.168.10.35 қарсы пакеттер 1 байт 84, 192.168.10.101 \
    санауыш p 192.168.10.135 қарсы пакеттер 0 байт 0 }
    }

    тізбек z {
    типті сүзгі ілгегі шығыс басымдылық сүзгісі; саясатты қабылдау;
    ip daddr @y
    }
    }

  • Сондай-ақ ағындық кестеге қарсы қолдау қосылды:

    кесте ip foo {
    ағындық кесте жолағы {
    ілмекке кіру басымдығы -100
    құрылғылар = { eth0, eth1 }
    қарсы
    }

    тізбек алға {
    түрі сүзгі ілмек алға басымдылық сүзгі;
    ағынды қосу @bar есептегіші
    }
    }

    Есептегіштер тізімін «conntrack -L» командасы арқылы көруге болады:

    tcp 6 src = 192.168.10.2 dst = 10.0.1.2 спорт = 47278 dport = 5201 пакет = 9 байт = 608 \
    src = 10.0.1.2 dst = 10.0.1.1 спорт = 5201 dport = 47278 пакет = 8 байт = 428 [ӨШІРУ] белгісі = 0 \
    secctx = null пайдалану = 2 tcp 6 src = 192.168.10.2 dst = 10.0.1.2 спорт = 47280 dport = 5201 \
    пакеттер = 1005763 байт = 44075714753 src = 10.0.1.2 dst = 10.0.1.1 спорт = 5201 dport = 47280 \
    пакеттер=967505 байт=50310268 [ӨШІРУ] белгісі=0 secctx=нөлдік пайдалану=2

  • Біріктіруге арналған жиындарда (салыстыруды жеңілдететін адрестер мен порттардың белгілі бір бумалары мен порттары) жиын элементтерінің құрамдас бөліктері үшін элементтердің деректер түрін анықтайтын «typeof» директивасын қолдануға болады:

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

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

  • typeof директивасы енді карта тізімдеріндегі қосылуларға да қолданылады:

    кесте ip foo {
    карта adr2mark {
    IP saddr түрі. tcp dport: мета белгісі
    элементтері = {192.168.10.35. 80 : 0x00000001,
    192.168.10.135. 80 : 0x00000002 }
    }

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

  • Анонимді (аталмаған) жиындардағы диапазонды біріктіру үшін қосылған қолдау:

    # nft қосу ережесі inet сүзгісі енгізу IP daddr. tcp dport\
    {10.0.0.0/8. 10-23, 192.168.1.1-192.168.3.8. 80-443 } қабылдаңыз

  • Желілік көпірлерді өңдеу кезінде 802.1q (VLAN) жалаушалары бар пакеттерді тастау мүмкіндігі қамтамасыз етілген:

    # nft қосу ережесі көпірі foo bar эфир түрі vlan қабылдамау tcp қалпына келтіру арқылы

  • TCP сеансының идентификаторы (conntrack идентификаторы) бойынша сәйкестендіруге қосылған қолдау. Conntrack идентификаторын анықтау үшін «--output id» опциясын пайдалануға болады:

    # conntrack -L —шығыс идентификаторы
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 спорт=36424 dport=53 пакет=2 \
    байт = 122 src = 192.168.2.1 dst = 192.168.2.118 спорт = 53 dport = 36424 пакет = 2 байт = 320 \
    [КӨМЕКТІ] белгісі=0 пайдалану=1 идентификатор=2779986232

    # nft қосу ережесі foo bar ct идентификаторы 2779986232 есептегіш

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

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