Versión de filtro de paquetes nftables 1.0.7

Publicouse a versión de filtro de paquetes nftables 1.0.7, que unifica interfaces de filtrado de paquetes para IPv4, IPv6, ARP e pontes de rede (destinadas a substituír iptables, ip6table, arptables e ebtables). O paquete nftables inclúe compoñentes de filtro de paquetes que se executan no espazo do usuario, mentres que o nivel do núcleo é proporcionado polo subsistema nf_tables, que forma parte do núcleo de Linux desde a versión 3.13. A nivel do núcleo, só se proporciona unha interface xenérica independente do protocolo que proporciona funcións básicas para extraer datos de paquetes, realizar operacións sobre datos e controlar o fluxo.

As propias regras de filtrado e os controladores específicos do protocolo compílanse nun bytecode de espazo de usuario, despois de que este bytecode cárgase no núcleo mediante a interface Netlink e execútase no núcleo nunha máquina virtual especial que se asemella a BPF (Berkeley Packet Filters). Este enfoque fai posible reducir significativamente o tamaño do código de filtrado que se executa a nivel do núcleo e mover todas as funcións das regras de análise e a lóxica de traballar con protocolos ao espazo do usuario.

Principais cambios:

  • Para os sistemas que executan o núcleo Linux 6.2+, engadiuse soporte para as asignacións de protocolos vxlan, geneve, gre e gretap, o que permite que expresións sinxelas comproben as cabeceiras dos paquetes encapsulados. Por exemplo, para comprobar o enderezo IP na cabeceira dun paquete anidado de VxLAN, agora podes usar as regras (sen necesidade de desencapsular primeiro a cabeceira de VxLAN e vincular o filtro á interface vxlan0): ... udp dport 4789 vxlan ip protocol udp ... udp dport 4789 vxlan ip saddr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip saddr . vxlan ip daddr { 4.3.2.1 . XNUMX }
  • Implementouse o soporte para a fusión automática de restos despois da eliminación parcial dun elemento da lista de conxuntos, o que lle permite eliminar un elemento ou parte dun intervalo dun intervalo existente (anteriormente, un intervalo só se podía eliminar por completo). Por exemplo, despois de eliminar o elemento 25 dunha lista de conxuntos con intervalos 24-30 e 40-50, a lista seguirá sendo 24, 26-30 e 40-50. As correccións necesarias para que a automerging funcione ofreceranse nas versións de mantemento das ramas estables do núcleo 5.10+. # nft list rulesset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list rulesset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • Permite o uso de contactos e intervalos ao mapear a tradución de enderezos (NAT). table ip nat { chain prerouting { tipo nat hook prerouting prioridade dstnat; política aceptar; dnat a ip daddr. tcp dport map { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } persistente } }
  • Engadido soporte para a expresión "última", que permite coñecer a hora do último uso dun elemento de regra ou lista de conxuntos. A función é compatible a partir do núcleo de Linux 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z {tipo de filtro hook output filter priority; política aceptar; actualizar @y { ip daddr . tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = {172.217.17.14 . 443 último uso 1s591ms tempo de espera 1h caduca 59m58s409ms, 172.67.69.19 . 443 último uso 4s636ms tempo de espera 1h caduca 59m55s364ms, 142.250.201.72 . 443 usado por última vez 4s748ms tempo de espera 1h caduca 59m55s252ms, 172.67.70.134 . 443 último uso 4s688ms tempo de espera 1h caduca 59m55s312ms, 35.241.9.150 . 443 último uso 5s204ms tempo de espera 1h caduca 59m54s796ms, 138.201.122.174 . 443 usado por última vez 4s537ms tempo de espera 1h caduca 59m55s463ms, 34.160.144.191 . 443 último uso 5s205ms tempo de espera 1h caduca 59m54s795ms, 130.211.23.194 . 443 último uso 4s436ms tempo de espera 1h caduca 59m55s564ms } } }
  • Engadida a posibilidade de definir cotas en listas de conxuntos. Por exemplo, para determinar a cota de tráfico para cada enderezo IP de destino, pode especificar: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" priority filter; política aceptar; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list rulesset table netdev x { set y { type ipv4_addr size 65535 quote over 10000 mbytes elements = { 8.8.8.8. 10000 cota máis de 196 mbytes usados ​​0 bytes } } chain y { tipo de filtro dispositivo de saída de gancho filtro de prioridade “ethXNUMX”; política aceptar; ip daddr @y drop } }
  • Permítese o uso de constantes en listas de conxuntos. Por exemplo, ao utilizar o enderezo de destino e o ID de VLAN como clave de lista, pode especificar directamente o número de VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic, timeout timeout 1m } chain c { tipo filtro gancho dispositivo de entrada eth0 prioridade 0; política aceptar; tipo de éter != 8021q actualizar @s { ether daddr . 123 } contador } }
  • Engadiuse un novo comando "destruír" para eliminar obxectos incondicionalmente (a diferenza do comando delete, non xera ENOENT cando se tenta eliminar un obxecto que falta). Require polo menos o kernel Linux 6.3-rc para funcionar. destruír o filtro IP da táboa

Fonte: opennet.ru

Engadir un comentario