Publicouse nftables 1.0.1, unha estrutura de filtrado de paquetes que unifica as interfaces de filtrado de paquetes para IPv4, IPv6, ARP e pontes de rede (co obxectivo de substituír iptables, ip6table, arptables e ebtables). Os cambios necesarios para nftables 1.0.1 incorporáronse ao kernel. Linux 5.16-rc1.
O paquete nftables contén os compoñentes de filtro de paquetes que operan no espazo de usuario, mentres que o traballo a nivel de kernel é proporcionado polo subsistema nf_tables, que forma parte do kernel. Linux Desde a versión 3.13, só se proporciona unha interface xenérica independente do protocolo a nivel de núcleo, que proporciona funcionalidades básicas para extraer datos de paquetes, realizar operacións de datos e control de fluxo.
As propias regras de filtrado e os xestores específicos do protocolo compílanse en bytecode no espazo de usuario, despois do cal este bytecode cárgase no kernel usando a interface Netlink e execútase no kernel nun formato especial. máquina virtual, que lembra aos BPF (filtros de paquetes de Berkeley). Esta estratexia permite unha redución significativa no tamaño do código de filtrado que se executa a nivel do kernel e move toda a análise sintáctica de regras e a lóxica de protocolo ao espazo do usuario.
Principais novidades:
- Consumo de memoria reducido ao cargar grandes listas de conxuntos e mapas.
- Acelerouse a recarga de listas de conxuntos e mapas.
- Acelerouse a saída de táboas e cadeas seleccionadas en grandes conxuntos de regras. Por exemplo, o tempo de execución do comando "nft list ruleset" para mostrar un conxunto de regras con 100 mil filas é de 3.049 segundos, e ao emitir só as táboas nat e filter ("nft list table nat", "nft list table filter" ”) redúcese a 1.969 e 0.697 segundos.
- A execución de consultas coa opción "--terse" acelerouse ao procesar regras con grandes listas de conxuntos e mapas.
- É posible filtrar o tráfico da cadea de "saída", que se procesa ao mesmo nivel que o controlador de saída na cadea netdev (gancho de saída), é dicir. no momento en que o controlador recibe un paquete da pila de rede do núcleo. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } prioridad 0; meta prioridades ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- Permite a correspondencia e modificación de bytes na cabeceira e o contido dun paquete nun desfase determinado. # nft engadir regra xy @ih,32,32 0x14000000 contador # nft engadir regra xy @ih,32,32 establecer 0x14000000 contador
Fonte: opennet.ru
