Traducción de reglas de cadenas de iptables a nftables

Traducción de reglas de cadenas de iptables a nftables

Estoy migrando reglas de iptable a nftable siguiendoPasando de iptable a nftable

Ahora tengo pocas reglas de bloqueo de IP y puertos implementadas junto con reglas de iptable basadas en cadenas, pero al usar la regla de traducción de iptable incorporada puedo convertir las reglas de iptable a nftable, pero las reglas basadas en cadenas que estaban vigentes en iptable se comentan en nftables después de la traducción. A continuación se muestra la regla nftable después de la traducción.

    add rule ip filter INPUT tcp dport 1024-65535 counter accept
    add rule ip filter INPUT udp dport 1024-65535 counter accept
   65535 -j DROP
    # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
    # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
    # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP
    add rule ip filter INPUT icmp type echo-reply ct state new,related,established  counter accept
    add rule ip filter INPUT icmp type echo-request ct state new,related,established  counter accept
    add rule ip filter INPUT icmp type destination-unreachable ct state new,related,established  counter accept
    add rule ip filter INPUT icmp type time-exceeded ct state new,related,established  counter accept

Necesito ayuda sobre cómo convertir reglas de iptable basadas en cadenas en reglas de nftable y, si falla como se indicó anteriormente, a qué registro me refiero.

Respuesta1

Hayactualmente no equivalente en nftables, elcadenamatch se encuentra actualmente en la lista de extensiones no compatibles. Todas estas extensiones no compatibles (y probablemente también algunas de las compatibles) no se traducirán anftablesya que utilizan una característica especial que no se puede expresar solo connftablescódigo de bytes (intente nft -a --debug=netlink list rulesetver el código de bytes) ni está implementado en el kernel como nativonftablesmódulo, por lo que la herramienta de traducción ni siquiera lo intentará.

Si sabe más sobre el protocolo y puede esperar encontrar la cadena en unfijadoubicación en el paquete, existen soluciones para hacer lo mismo usandoexpresiones de carga útil sin procesarcon unejemplo ahí.

De lo contrario, puedes simplemente mezclarnftablesyiptables(incluidoiptables-nft) reglas siempre que utilice nombres de tablas diferentes ennftablespara no chocar coniptables-nft(que probablemente esté en uso). Todavía no hay ningún plan para eliminarlo gradualmenteiptables(al menos eliptables-nftimplementación, perfectamente capaz de utilizar los diversos módulos xtables comocadena).

Aquí tse elige la tabla, para que no choque con la tabla filter.nftablesobtiene su cadena de entrada (llamada arbitrariamente c_in) con prioridad 10, por lo queiptablesLa cadena INPUT de que se engancha en el mismo lugar tiene prioridad en su prioridad fija 0. Al dejar la prioridad en 0 se obtiene un orden indefinido entre qué cadena (iptables' onftables') corre primero. No importa eliminar/aceptar reglas entre tablas. Los casos en los que sí importa es cuando se dividen las reglas como se hace aquí (pero para este caso específico, no hay nada especial en el orden, así que está bien), y para alterar reglas o reglas con efectos secundarios: agregar un elemento en unnftables colocaro uniptablescompañeroipsety luego descartar el paquete no es lo mismo que descartar el paquete primero (y luego nada).

nft add table ip t
nft add chain ip t c_in '{ type filter hook input priority 10; policy accept; }'

nft add rule ip t c_in tcp dport 1024-65535 counter accept
nft add rule ip t c_in udp dport 1024-65535 counter accept
nft add rule ip t c_in icmp type echo-reply ct state new,related,established  counter accept
nft add rule ip t c_in icmp type echo-request ct state new,related,established  counter accept
nft add rule ip t c_in icmp type destination-unreachable ct state new,related,established  counter accept
nft add rule ip t c_in icmp type time-exceeded ct state new,related,established  counter accept

iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP

Lo siento, no sé qué hacer con:

   65535 -j DROP

lo que parece un error tipográfico o de traducción de la herramienta.

Cuando se necesita interacción entre ambos mundos, se pueden transmitir "mensajes" utilizandomarcas. Ése es un caso en el que la prioridad importa. Por ejemplo, si la acción de soltar debe realizarse sólo ennftablesPor razones de gestión de reglas, esto podría usarse en su lugar, teniendo en cuenta queiptables' filtro/ENTRADA tiene prioridad sobrenftables' No estoy aquí:

iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j MARK --set-mark 0xdead

e inserte estonftablesregla antes de las reglas de cortocircuito ...established...en el lugar delcadenaLas reglas fueron inicialmente:

nft add ip t c_in meta mark 0xdead drop

información relacionada