Издаване на пакетен филтър nftables 0.9.2

Състоя се релиз на пакетния филтър nftables 0.9.2, развиваваща се като заместител на iptables, ip6tables, arptables и ebtables чрез унифициране на интерфейсите за филтриране на пакети за IPv4, IPv6, ARP и мрежови мостове. Пакетът nftables включва компоненти на филтъра за пакети, работещи в потребителското пространство, докато на ниво ядро работата се осигурява от подсистемата nf_tables, която е част от ядрото на Linux, започвайки от версия 3.13. Необходимите за работа промени на nftables 0.9.2 включват включването в ядрото на Linux 5.3.

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

Основни нововъведения:

  • Възможност за проверка на номера на порт от заглавката на транспортния пакет независимо от типа на протокола на четвърто ниво:

    add rule x y ip protocol { tcp, udp } th dport 53

  • Поддържане на възстановяването на времето за живот на набора от елементи:

    add element ip x y { 1.1.1.1 timeout 30s expires 15s }

  • Възможност за проверка на отделни опции (lsrr, rr, ssrr и ra) от пакетите IPv4:

    add rule x y ip option rr exists drop

    За опции за маршрутизиране е възможна проверка на полета type, ptr, length и addr:

    add rule x y ip option rr type 1 drop

  • В изразите вече е допустимо указване на мрежови префикси и диапазони от адреси:

    iifname ens3 snat to 10.0.0.0/28
    iifname ens3 snat to 10.0.0.1-10.0.0.15

  • Поддръжка на използването на променливи в определенията за вериги:

    define default_policy = accept
    add chain ip foo bar { type filter hook input priority filter; policy $default_policy }

  • Указването на приоритета на веригата сега може да се извършва както в числов, така и в симболен вид:

    define prio = filter
    define prionum = 10
    определете prioffset = «филтър — 150»

    add table ip foo
    add chain ip foo bar { type filter hook input priority $prio; }
    add chain ip foo ber { type filter hook input priority $prionum; }
    add chain ip foo bor { type filter hook input priority $prioffset; }

  • Реализирана е поддръжка на модула synproxy. Например, за защита на TCP порта 8888 с помощта на synproxy може да се използва набор от правила:

    таблица ip x {
    chain y {
    type filter hook prerouting priority raw; policy accept;
    tcp dport 8888 tcp flags syn notrack
    }

    chain z {
    type filter hook forward priority filter; policy accept;
    tcp dport 8888 ct state invalid,untracked synproxy mss 1460 \\
    wscale 7 timestamp sack-perm ct state invalid drop
    }
    }

  • За определяне в таблицата conntrack на свързаните с текущото връзка очаквани допълнителни връзки, които се прилагат в протоколи и сценарии, изискващи установяването на няколко връзки, сега могат да се определят политики чрез стандартни набори от правила. Например, за определяне на очакваните след свързването към TCP порта 8888 последващи връзки към порт 5432 може да се посочат следните правила:

    таблица x {
    ct expectation myexpect {
    protocol tcp
    dport 5432
    timeout 1h
    size 12
    l3proto ip
    }

    chain input {
    type filter hook input priority 0;
    ct state new tcp dport 8888 ct expectation set myexpect
    ct state established,related counter accept
    }
    }

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster