lanzamiento del filtro de paquetes , en desarrollo como un reemplazo de iptables, ip6tables, arptables y ebtables mediante la unificación de las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red. El paquete nftables incluye componentes de filtrado de paquetes que funcionan en el espacio de usuario, mientras que a nivel del kernel, la funcionalidad es proporcionada por el subsistema nf_tables, que forma parte del núcleo de Linux desde la versión 3.13. Los cambios necesarios para la versión nftables 0.9.3 están incluidos en la futura rama del núcleo de Linux 5.5.
A nivel del núcleo se proporciona solo una interfaz general, independiente del protocolo específico y que ofrece funciones básicas para extraer datos de paquetes, realizar operaciones con los datos y gestionar el flujo. La lógica de filtrado y los controladores específicos del protocolo se compilan en bytecode en el espacio de usuario, después de lo cual este bytecode se carga en el núcleo mediante la interfaz Netlink y se ejecuta en una máquina virtual especial similar a BPF (Berkeley Packet Filters). Este enfoque permite reducir significativamente el tamaño del código de filtrado que opera a nivel del núcleo y trasladar todas las funciones de análisis de reglas y lógica de trabajo con protocolos al espacio de usuario.
Novedades principales:
- Soporte para la coincidencia de paquetes por tiempo. Se pueden definir tanto rangos de tiempo y fechas en los que se activará la regla, así como configurar su activación en días específicos de la semana. También se ha añadido una nueva opción «-T» para mostrar el tiempo epoch en segundos.
meta time "2019-12-24 16:00" — "2020-01-02 7:00"
meta hour "17:00" — "19:00"
meta day "Fri" - Soporte para la recuperación y almacenamiento de etiquetas SELinux (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - Soporte para listas de mapas synproxy, que permiten definir más de una regla en el backend.
table ip foo {
synproxy https-synproxy {
mss 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
mss 1460
wscale 5
}chain pre {
tipo de filtro gancho prerouting prioridad raw; política aceptar;
tcp dport 8888 tcp flags syn notrack
}chain bar {
tipo de filtro gancho forward prioridad filtro; política aceptar;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "other-synproxy" }
}
} - Posibilidad de eliminar dinámicamente elementos de conjuntos set de las reglas de procesamiento de paquetes.
nft add rule … delete @set5 { ip6 saddr . ip6 daddr }
- Soporte para la coincidencia de VLAN por ID y protocolo, definidos en los metadatos de la interfaz del puente de red;
meta ibrpvid 100
meta ibrvproto vlan - Opción «-t» («—terse») para excluir elementos de conjuntos set al mostrar reglas. Al ejecutar «nft -t list ruleset» se mostrará:
tabla ip x {
set y {
type ipv4_addr
}
}Y al ejecutar «nft list ruleset»
tabla ip x {
set y {
type ipv4_addr
elements = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - Posibilidad de especificar más de un dispositivo en las cadenas netdev (solo funciona con el núcleo 5.5) para combinar reglas de filtrado típicas.
add table netdev x
add chain netdev x y { \
type filter hook ingress devices = { eth0, eth1 } priority 0;
} - Posibilidad de añadir descripciones de tipos de datos.
# nft describe ipv4_addr
datatype ipv4_addr (dirección IPv4) (basetype integer), 32 bits - Posibilidad de construir una interfaz CLI con la biblioteca linenoise en lugar de libreadline.
./configure —with-cli=linenoise
Fuente: opennet.ru
