nftables пакет филтер 0.9.4 ослободување

објавено ослободување на пакет филтер nftables 0.9.4, развивајќи се како замена за iptables, ip6table, arptables и ebtables со обединување на интерфејси за филтрирање пакети за IPv4, IPv6, ARP и мрежни мостови. Пакетот nftables вклучува компоненти за филтер за пакети кои работат во корисничкиот простор, додека работата на ниво на јадрото е обезбедена од потсистемот nf_tables, кој е дел од кернелот Линукс од објавувањето 3.13. Промените потребни за да функционира 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 saddr. ИП тато. tcp dport @whitelist прифати
    }
    }

  • Во множества и списоци со мапи, можно е да се користи директивата „тип“, која го одредува форматот на елементот кога се совпаѓа.
    На пример:

    ip foo на маса {
    постави бела листа {
    тип на ip saddr
    елементи = {192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    лента со синџир {
    тип приоритетен филтер за предрутирачка кука за филтер; пад на политиката;
    ip daddr @whitelist прифати
    }
    }

    ip foo на маса {
    карта adr2mark {
    тип на 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 дестинации { тип 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 за главниот синџир користејќи го знамето „offload“. При користење на кернелот на Linux 5.6, хардверското забрзување е поддржано за совпаѓање на полето на заглавието и проверка на дојдовниот интерфејс во комбинација со примање, отфрлање, дуплирање (dup) и препраќање (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 избришете ја табелата twst
    Грешка: Нема таква датотека или директориум; дали мислеше на маса „тест“ во фамилијарна ип?
    избришете ја табелата twst
    ^^^^

    Првиот пример покажува дека табелата „y“ не е во системот, вториот дека недостасува управувачот „7“ и третиот дека се прикажува известување за печатна грешка при пишување на името на табелата.

  • Додадена е поддршка за проверка на slave интерфејсот со наведување „meta sdif“ или „meta sdifname“:

    ... meta sdifname vrf1 ...

  • Додадена е поддршка за операции со смена на десно или лево. На пример, за префрлување на ознаката на постоечки пакет лево за 1 бит и поставување на малиот бит на 1:

    … мета ознака сет мета ознака lshift 1 или 0x1 ...

  • Имплементирана опција „-V“ за прикажување на информации за проширената верзија.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli: readline
    јсон: да
    минигмп: не
    libxtables: да

  • Сега мора да се наведат опциите на командната линија пред командите. На пример, треба да наведете „nft -a list ruleset“, а извршувањето на „nft list rules -a“ ќе резултира со грешка.

    Извор: opennet.ru

Додадете коментар