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

Публикуван е пакетният филтър nftables версия 1.0.0, който унифицира интерфейсите за филтриране на пакети за IPv4, IPv6, ARP и мрежови мостове (предназначен за заменяне на iptables, ip6table, arptables и ebtables). Необходимите промени за функционирането на версиите nftables 1.0.0 са включени в ядрото на Linux 5.13. Значителната промяна на версията не е свързана с радикални изменения, а е просто следствие от последователната нумерация в десетично изчисление (предишното издание беше 0.9.9).

В пакет nftables влизат компоненти на пакетния филтър, работещи в пространството на потребителя, докато на ниво ядро, работата се осигурява от подсистемата nf_tables, включена в ядрото на Linux, започвайки от версия 3.13. На ниво ядро се предоставя само общ интерфейс, независим от конкретен протокол, който предлага основни функции за извличане на данни от пакети, извършване на операции с данни и управление на потока.

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

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

  • В списъците set е добавена поддръжка на елемент-маска „*“, който сработва за всички пакети, които не попадат под другите елементи, определени в набора. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; policy accept; ip saddr vmap @blocklist } }
  • Предоставена е възможността за дефиниране на променливи от командния ред с опцията „—define“. # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; policy drop; } } # nft —define dev=„{ eth0, eth1 }“ -f test.nft
  • В списъците map е разрешено използването на постоянни (stateful) изрази: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; policy accept; iif vmap { „lo“ : jump wan_input } } }
  • Добавена е командата „list hooks“ за извеждане на списък с обработвачи на зададено семейство пакети: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev x y [nf_tables] +0000000300 chain inet m w [nf_tables] } hook input { -0000000100 chain ip a b [nf_tables] +0000000300 chain inet m z [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip a c [nf_tables] } hook output { -0000000225 selinux_ipv4_output } hook postrouting { +0000000225 selinux_ipv4_postroute } }
  • В блоков «queue» е разрешено комбинирането на изрази jhash, symhash и numgen за разпределяне на пакети по опашки в пространството на потребителя. … queue to symhash mod 65536 … queue flags bypass to numgen inc mod 65536 … queue to jhash oif . meta mark mod 32 «queue» също може да се комбинира с map-списъци за избор на опашка в пространството на потребителя на базата на произволни ключове. … queue flags bypass to oifname map { «eth0» : 0, «ppp0» : 2, «eth1» : 2 }
  • Предоставена е възможност за разширяване на променливи, включващи set-списък, в няколко map-а. define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { «lo» : accept, «eth0» : drop, «eth1» : drop } } }
  • Разрешено е комбинирането на vmap-ове (verdict map) с интервали: # nft add rule x y tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : accept }
  • Упрощен е синтаксисът за съвпадения за NAT. Разрешено е указването на диапазони от адреси: … snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } или явни IP адреси и портове: … dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } или комбинации от диапазони IP и портове: … dnat to ip saddr . tcp dport map { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }

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

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