¿Cómo hago un filewall puente con estado con nftables?

¿Cómo hago un filewall puente con estado con nftables?

La wiki de nftables tieneun ejemplo, pero no parece funcionar para mí.

La página dice que debería funcionar desde el kernel 5.3, pero dice "error de protocolo" cuando intento los comandos exactos de la página:

# nft add table bridge filter
# nft add chain bridge filter forward '{type filter hook forward priority 0; }'
# nft add rule bridge filter forward ct state established,related accept
Error: Could not process rule: Protocol error
add rule bridge filter forward ct state established,related accept
                               ^^^^^^^^
  • Hardware: Frambuesa Pi 4
  • Núcleo: 5.10.92-v8+
  • nft --version:v0.9.8 (E.D.S.)

También lo intenté después de crear la última versión de nftables y sus bibliotecas:

  • nftables 1.0.1
  • libnftnl 1.2.1
  • libmnl-1.0.4

Confirmé ldd nftque efectivamente se utilizaron las nuevas versiones de las bibliotecas, pero sigue apareciendo el mismo mensaje de error.

Respuesta1

Esta característica está disponible desde el kernel 5.3, pero Raspberry optó por no compilarla en los kernels suministrados.

Como no logré encontrar el archivo de configuración del kernel (generalmente presente como /boot/config-xxxo desde el kernel), extraje la imagen de instalación para verificar esto directamente. Aquí hay una comparación de los módulos disponibles en el kernel de Raspbian (deimagen zipdescargado del sitio oficial):

$ ls -1 lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nft_reject_bridge.ko

versus unnúcleo de Debian similarpara la misma arquitectura:

$ ls -1 lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_conntrack_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_meta_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_reject_bridge.ko

Como se puede ver, se necesitaba el soporte de Netfilter proporcionado nf_conntrack_bridgeporconectarparte y nft_meta_bridgepara elnftablesLa parte no está disponible (y no, tampoco está integrada: grep bridge lib/modules/5.10.92-v8+/modules.builtinno tiene resultado) en el kernel predeterminado del sistema operativo RaspberryPi. Se debe construir un kernel con estas características habilitadas:

Es muy posible que también falten otras características raras. Por ejemplo módulosnft_synproxyynft_xfrm(para filtrado IPSec) tampoco están presentes.

Mientras tanto, aún se puede utilizar el método obsoleto (que se pretende eliminar una vez que se logre la paridad de características), lo que también afectanftablespara bien o para mal: elbr_netfiltermódulo del núcleo. pero nativonftablescarece de soporte específico para este método, ya que está diseñado para utilizar el método más nuevo del kernel 5.3. En particular, no tiene equivalente paraiptables'-m physdev --physdev-is-bridged.

información relacionada