nftables пакетен филтър версия 0.9.5

публикувани освобождаване на пакетния филтър nftables 0.9.5, разработен като заместител на iptables, ip6table, arptables и ebtables чрез обединяване на интерфейси за филтриране на пакети за IPv4, IPv6, ARP и мрежови мостове. Пакетът nftables включва компоненти за филтриране на пакети в потребителското пространство, докато работата на ниво ядро ​​се осигурява от подсистемата nf_tables, която е част от ядрото на Linux от версия 3.13. Промените, необходими за работа на изданието nftables 0.9.5, са включени в ядрото Linux 5.7.

Нивото на ядрото предоставя само общ интерфейс, независим от протокола, който осигурява основни функции за извличане на данни от пакети, извършване на операции с данни и контрол на потока. Правилата за филтриране и манипулаторите, специфични за протокола, се компилират в байткод в потребителското пространство, след което този байткод се зарежда в ядрото с помощта на интерфейса Netlink и се изпълнява в ядрото в специална виртуална машина, напомняща BPF (Berkeley Packet Filters). Този подход ви позволява значително да намалите размера на филтриращия код, работещ на ниво ядро, и да преместите всички функции на правилата за анализ и логиката за работа с протоколи в потребителското пространство.

Основни иновации:

  • Към наборите е добавена поддръжка за броячи на пакети и трафик, свързани с елементи на набор. Броячите се активират чрез ключовата дума „брояч“:

    таблица ip x {
    задайте y {
    typeof ip saddr
    противодействие на
    елементи = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

    верига z {
    тип филтър кука филтър за приоритет на изхода; политика приема;
    ip daddr @y
    }
    }

  • За да зададете първоначалните стойности на броячите, например, за да възстановите предишни броячи след рестартиране, можете да използвате командата „nft -f“:

    # cat ruleset.nft
    таблица ip x {
    задайте y {
    typeof 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 {
    typeof 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}
    противодействие на
    }

    верига напред {
    тип филтър кука напред приоритетен филтър;
    flow add @bar брояч
    }
    }

    Можете да видите списъка с броячи, като използвате командата “conntrack -L”:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 пакети=9 байта=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 пакети=8 байта=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    пакети=1005763 байта=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    пакети=967505 байта=50310268 [ИЗКЛЮЧВАНЕ] маркировка=0 secctx=нулева употреба=2

  • В комплекти за конкатенация (конкатенация, определени пакети от адреси и портове, които опростяват сравнението) е възможно да се използва директивата „typeof“, която определя типа данни на елементите за съставните части на елементите на набора:

    таблица ip foo {
    задаване на бял списък {
    typeof ip saddr. tcp dport
    елементи = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

    верижен прът {
    тип филтър кука филтър с приоритет за предварително насочване; спад на политиката;
    ip daddr. tcp dport @whitelist приеме
    }
    }

  • Директивата typeof вече се прилага и за обединения в списъци с карти:

    таблица ip foo {
    map addr2mark {
    typeof ip saddr. tcp dport : мета маркировка
    елементи = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135. 80 : 0x00000002 }
    }

    верижен прът {
    тип филтър кука филтър с приоритет за предварително насочване; спад на политиката;
    мета маркировка, зададена ip daddr. tcp dport map @addr2mark приемам
    }
    }

  • Добавена е поддръжка за обединяване на диапазони в анонимни (ненаименувани) комплекти:

    # nft добавяне на правило inet филтър input 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 ether тип vlan отказ с tcp нулиране

  • Добавена е поддръжка за съвпадение по идентификатор на TCP сесия (conntrack ID). За да определите conntrack ID, можете да използвате опцията „--output id“:

    # conntrack -L —изходен идентификатор
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 пакета=2 \
    байтове=122 src=192.168.2.1 dst=192.168.2.118 спорт=53 dport=36424 пакети=2 байта=320 \
    [УВЕРЕН] mark=0 use=1 id=2779986232

    # nft добавяне на правило foo bar ct id 2779986232 брояч

Източник: opennet.ru

Добавяне на нов коментар