Пуснат е пакетният филтър nftables 0.9.1

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

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

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

  • Поддръжка на IPsec, позволяваща съпоставяне на адресите на тунелите, свързани с пакета, идентификатора на запитването IPsec и етикета SPI (Security Parameter Index). Например,

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

    Също е възможна проверка на преминаването на маршрута през тунел IPsec. Например, за блокиране на трафик, който не преминава през IPSec:

    … filter output rt ipsec missing drop

  • Поддръжка на протокола IGMP (Internet Group Management Protocol). Например, за отхвърляне на входящи IGMP запитвания за членство в група може да се използва правило

    nft add rule netdev foo bar igmp type membership-query counter drop

  • Възможност за използване на променливи за определяне на вериги за пренасочване (jump / goto). Например:

    define dest = ber
    add rule ip foo bar jump $dest

  • Поддръжка на маски за идентифициране на операционни системи (OS Fingerprint) на базата на стойностите на TTL в заглавката. Например, за маркиране на пакети в зависимост от операционната система на изпращача може да се използва командата:

    … meta mark set osf ttl skip name map { «Linux» : 0x1,
    «Windows» : 0x2,
    «MacOS» : 0x3,
    «unknown» : 0x0 }
    … osf ttl skip version «Linux:4.20»

  • Възможност за съпоставяне на ARP адреса на изпращача и IPv4 адреса на целевата система. Например, за увеличаване на броя на ARP пакетите, изпратени от адрес 192.168.2.1, може да се използва правило:

    table arp x {
    chain y {
    тип фильтра крючка ввод приоритет фильтра; политика принять;
    arp saddr ip 192.168.2.1 счетчик пакетов 1 байт 46
    }
    }

  • Поддръжка на прозрачно пренасочване на заявки през прокси (tproxy). Например, за пренасочване на запитвания към порт 80 на порт на прокси 8080:

    таблица ip x {
    chain y {
    тип филтър крючка пренасочване приоритет -150; политика приемане;
    tcp dport 80 tproxy към :8080
    }
    }

  • Поддръжка на маркиране на сокети с възможност за получаване на зададена марка чрез setsockopt() в режим SO_MARK. Например:

    таблица inet x {
    chain y {
    тип филтър крючка пренасочване приоритет -150; политика приемане;
    tcp dport 8080 mark set сокет mark
    }
    }

  • Поддръжка за задаване на текстови имена на приоритети за вериги. Например:

    nft добави верига ip x raw { тип филтър крючка пренасочване приоритет raw; }
    nft добави верига ip x filter { тип филтър крючка пренасочване приоритет filter; }
    nft добави верига ip x filter_later { тип филтър крючка пренасочване приоритет filter + 10; }

  • Поддръжка на метки SELinux (Secmark). Например, за определяне на марка «sshtag» в контекста на SELinux може да се стартира:

    nft добави secmark inet filter sshtag «system_u:object_r:ssh_server_packet_t:s0»

    А след това използвайте тази марка в правилата:

    nft добави правило inet filter input tcp dport 22 meta secmark set «sshtag»

    nft добави карта inet filter secmapping { тип inet_service : secmark; }
    nft добави елемент inet filter secmapping { 22 : «sshtag» }
    nft добави правило inet filter input meta secmark set tcp dport карта @secmapping

  • Възможност за задаване на закрепени към протоколи портове в текстов вид, както са определени в файла /etc/services. Например:

    nft добави правило x y tcp dport «ssh»
    nft списък ruleset -l
    таблица x {
    chain y {
    …
    tcp dport «ssh»
    }
    }

  • Възможност за проверка на типа мрежов интерфейс. Например:

    добави правило inet raw prerouting meta iifkind «vrf» приема

  • Подобрен контрол на динамичното обновление на съдържанието на набори (sets) чрез явното указание на флага «dynamic». Например, за обновяване на набора «s» с добавяне на изходния адрес и нулиране на записа при отсъствие на пакети за 30 секунди:

    добави таблица x
    добави набор x s { тип ipv4_addr; размер 128; таймаут 30s; флагове динамични; }
    добави верига x y { тип филтър крючка въвеждане приоритет 0; }
    добави правило x y обнови @s { ip saddr }

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

    таблица ip filter {
    ct timeout agressive-tcp {
    протокол tcp;
    l3proto ip;
    политика = {established: 100, close_wait: 4, close: 4}
    }
    верига output {
    …
    tcp dport 8888 ct таймаут set «agressive-tcp»
    }
    }

  • Поддръжка на NAT за семейство inet:

    таблица inet nat {
    …
    ip6 daddr dead::2::1 dnat към dead:2::99
    }

  • Подобрен контрол на грешките поради печатни грешки:

    nft добави верига filtre test

    Грешка: Няма такъв файл или директория; имате предвид таблица «filter» в семейството ip?
    добави верига filtre test
    ^^^^^^

  • Възможност за задаване на имена на интерфейси в набори (sets):

    набор sc {
    тип inet_service . ifname
    елементи = { «ssh» . «eth0» }
    }

  • Актуализиран синтаксис на правилата flowtable:

    nft добави таблица x
    nft добави flowtable x ft { hook ingress priority 0; devices = { eth0, wlan0 }; }
    …
    nft добави правило x пренасочване ip протокол { tcp, udp } поток добави @ft

  • Подобрена поддръжка на JSON.

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

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