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

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

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

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

  • Пакет, IPsec сұрау идентификаторы және SPI (Қауіпсіздік параметрінің индексі) тегіне негізделген туннель мекенжайларын сәйкестендіруге мүмкіндік беретін IPsec қолдауы. Мысалы,

    ... ipsec in ip saddr 192.168.1.0/24
    ... ipsec in spi 1-65536

    Сондай-ақ, маршруттың IPsec туннелі арқылы өтетінін тексеруге болады. Мысалы, IPSec арқылы емес трафикті блоктау үшін:

    … сүзгі шығысы rt ipsec жоғалуы

  • IGMP (Internet Group Management Protocol) қолдауы. Мысалы, кіріс IGMP тобының мүшелік сұрауларынан бас тарту үшін ережені пайдалануға болады

    nft қосу ережесі netdev foo bar igmp түріндегі мүшелік-сұрау есептегішінің түсуі

  • Өтпелі тізбектерді анықтау үшін айнымалы мәндерді пайдалану мүмкіндігі (jump / goto). Мысалы:

    dest = ber анықтаңыз
    ip foo bar jump $dest ережесін қосыңыз

  • Тақырыптағы TTL мәндеріне негізделген операциялық жүйелерді (OS саусақ ізі) анықтауға арналған маскаларды қолдау. Мысалы, жіберуші ОЖ негізінде пакеттерді белгілеу үшін келесі пәрменді пайдалануға болады:

    ... мета белгі жиыны osf ttl ат картасын өткізіп жіберу { "Linux" : 0x1,
    «Windows»: 0x2,
    «MacOS»: 0x3,
    «белгісіз»: 0x0}
    ... osf ttl "Linux:4.20" нұсқасын өткізіп жіберу

  • Жіберушінің ARP мекенжайы мен мақсатты жүйенің IPv4 мекенжайын сәйкестендіру мүмкіндігі. Мысалы, 192.168.2.1 мекенжайынан жіберілген ARP пакеттерінің есептегішін көбейту үшін келесі ережені қолдануға болады:

    arp x кестесі
    тізбек y {
    типті сүзгі ілгегі кіріс басымдылық сүзгісі; саясатты қабылдау;
    arp saddr ip 192.168.2.1 есептегіш пакеттер 1 байт 46
    }
    }

  • Прокси (tproxy) арқылы сұрауларды мөлдір қайта жіберуді қолдау. Мысалы, қоңырауларды 80 портына 8080 прокси портына қайта бағыттау үшін:

    кесте ip x {
    тізбек y {
    типті сүзгі ілгегі алдын ала бағыттау басымдығы -150; саясатты қабылдау;
    tcp dport 80 tproxy - :8080
    }
    }

  • SO_MARK режимінде setsockopt() арқылы белгіленген белгіні одан әрі алу мүмкіндігі бар розеткаларды таңбалауды қолдау. Мысалы:

    кесте inet x {
    тізбек y {
    типті сүзгі ілгегі алдын ала бағыттау басымдығы -150; саясатты қабылдау;
    tcp dport 8080 белгі жинағы розетка белгісі
    }
    }

  • Тізбектер үшін басым мәтін атауларын көрсетуге қолдау көрсету. Мысалы:

    nft қосу тізбегі ip x raw { түрі сүзгі ілмегі алдын ала бағыттау басымдылығы шикізат; }
    nft қосу тізбегі ip x сүзгі {түрі сүзгі ілмегі алдын ала бағыттау басымдылық сүзгісі; }
    nft қосу тізбегі ip x filter_later { түр сүзгі ілмегі алдын ала бағыттау басымдылық сүзгісі + 10; }

  • SELinux тегтерін қолдау (Secmark). Мысалы, SELinux контекстінде "sshtag" тегін анықтау үшін келесіні іске қосуға болады:

    nft қосу secmark inet сүзгісі sshteg "system_u:object_r:ssh_server_packet_t:s0"

    Содан кейін ережелерде осы белгіні пайдаланыңыз:

    nft қосу ережесі inet сүзгі кірісі tcp dport 22 мета секмарк жинағы “sshtag”

    nft картасын қосу inet сүзгісін бөлу { type inet_service : secmark; }
    nft қосу элементі inet сүзгісінің бөлінуі {22 : "sshtag" }
    nft қосу ережесі inet сүзгісі енгізу мета секмарк орнату tcp dport картасы @secmapping

  • /etc/services файлында анықталғандай, мәтіндік пішіндегі хаттамаларға тағайындалған порттарды көрсету мүмкіндігі. Мысалы:

    nft қосу ережесі xy tcp dport "ssh"
    nft тізімінің ережелер жинағы -l
    кесте x {
    тізбек y {
    ...
    tcp dport "ssh"
    }
    }

  • Желі интерфейсінің түрін тексеру мүмкіндігі. Мысалы:

    қосу ережесі inet raw алдын ала бағыттау мета iifkind "vrf" қабылданады

  • «Динамикалық» жалаушаны нақты көрсету арқылы жиынтықтардың мазмұнын динамикалық түрде жаңарту үшін жақсартылған қолдау. Мысалы, бастапқы мекенжайды қосу және 30 секунд ішінде пакеттер болмаса, жазбаны қалпына келтіру үшін "s" жиынын жаңарту үшін:

    x кестесін қосыңыз
    xs жиынын қосу { type ipv4_addr; өлшемі 128; күту уақыты 30 секунд; жалаулар динамикалық; }
    қосу тізбегі xy {түрі сүзгі ілгегі енгізу басымдылығы 0; }
    ережені қосу xy жаңарту @s { ip saddr }

  • Бөлек күту уақытын орнату мүмкіндігі. Мысалы, 8888 портына келетін пакеттер үшін әдепкі күту уақытын қайта анықтау үшін мынаны көрсетуге болады:

    кесте IP сүзгісі {
    ct күту уақыты агрессивті-tcp {
    tcp протоколы;
    l3proto ip;
    саясат = {орнатылған: 100, жақын_күту: 4, жабу: 4}
    }
    тізбек шығысы {
    ...
    tcp dport 8888 ct күту уақыты "агрессивті-tcp"
    }
    }

  • Inet отбасы үшін NAT қолдауы:

    кесте inet nat {
    ...
    ip6 daddr өлі ::2::1 днат өліге:2::99
    }

  • Теру қателері туралы есеп беру жақсартылған:

    nft қосу тізбекті сүзгі сынағы

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

  • Жиындарда интерфейс атауларын көрсету мүмкіндігі:

    sc орнату {
    inet_service теріңіз. ifname
    элементтер = { "ssh" . "eth0"}
    }

  • Жаңартылған ағын кестесі ережелерінің синтаксисі:

    nft x кестесін қосыңыз
    nft add flowtable x ft { hook ingress priority 0; құрылғылар = { eth0, wlan0 }; }
    ...
    nft қосу ережесі x forward ip протоколы { tcp, udp } ағын қосу @ft

  • Жақсартылған JSON қолдауы.

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

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