Ir al contenido

bpfilter - Filtrado de Paquetes Linux Basado en BPF Hoja de Trucos

bpfilter - Filtrado de Paquetes Linux Basado en BPF Hoja de Trucos

bpfilter es un daemon que convierte reglas de firewall familiares en programas BPF optimizados. El problema de larga data que aborda: iptables tiene sintaxis bien entendida pero techo de rendimiento de evaluación de regla secuencial, mientras eBPF/XDP puro es rápido pero requiere escribir y mantener código BPF. bpfilter los une — expresas reglas de forma familiar, y las compila en BPF eficiente adjunto en el hook correcto (incluyendo XDP, que procesa paquetes antes de que entren en la pila de red).

Los cambios de firewall pueden bloquearte de un host remoto. Prueba en un sistema con acceso de consola y mantén una ruta de rollback.

Requerimientos

  • Kernel Linux moderno con soporte BPF (6.4+ recomendado)
  • Privilegios root (carga programas BPF)
  • libbpf disponible

Instalación

MétodoCómo
Desde fuentegit clone https://github.com/facebook/bpfilter && make && sudo make install
Paquete distroDisponible en algunas distribuciones más nuevas
Iniciar daemonsudo bpfilter (o vía systemd)
Verificarbpfilter --version

Arquitectura

PiezaRol
daemon bpfilterRecibe reglas, genera y carga BPF
bfcliCLI nativo para expresar reglas
Frontend iptables/nftablesTraducir reglas existentes a bpfilter
Programas BPFEl filtro compilado adjunto a un hook

Hooks de Adjunto

HookDónde se procesan paquetes
XDPLo más temprano — en el driver, antes de la pila (más rápido)
TC (control de tráfico)Después de análisis básico, ingreso/egreso
cgroupFiltrado de socket por cgroup
NetfilterColocación compatible en la ruta clásica

Elegir XDP da la mayor ganancia de rendimiento, particularmente para descartar tráfico no deseado (mitigación DDoS), porque paquetes rechazados nunca traversan la pila.

Definiendo Reglas con bfcli

# Ruleset conceptual: drop predeterminado, permitir SSH y tráfico establecido
sudo bfcli ruleset set --from-str '
chain BF_HOOK_XDP policy DROP
  rule
    ip4.proto tcp
    tcp.dport 22
    ACCEPT
  rule
    ip4.saddr 10.0.0.0/8
    ACCEPT
'
ComandoDescripción
bfcli ruleset set --from-file FCargar reglas de archivo
bfcli ruleset getMostrar ruleset activo
bfcli ruleset flushRemover todas las reglas
bfcli chain setGestionar una cadena singular

Matchers

MatcherCoincide
ip4.saddr / ip4.daddrIPv4 origen/destino (CIDR soportado)
ip6.saddr / ip6.daddrDirecciones IPv6
ip4.protoProtocolo (tcp, udp, icmp)
tcp.dport / tcp.sportPuertos TCP
udp.dport / udp.sportPuertos UDP
tcp.flagsCombinaciones de flags TCP
meta.ifindexInterfaz

Veredictos

VeredictoEfecto
ACCEPTPermitir el paquete
DROPDescartar silenciosamente
CONTINUECaer a la siguiente regla

Usando Reglas de iptables Existentes

bpfilter envía frontends de traducción para que puedas mantener herramientas existentes:

# Apuntar el frontend compatible con iptables a bpfilter
sudo iptables-bpfilter -A INPUT -p tcp --dport 22 -j ACCEPT

Este es el camino de migración: mantén tu sintaxis de regla y scripts de gestión, gana ejecución de BPF debajo.

Verificando

VerificarComando
Ruleset activosudo bfcli ruleset get
Programas BPF cargadossudo bpftool prog list
XDP adjuntoip link show <iface>
ContadoresContadores de regla en bfcli ruleset get
Overheadsudo bpftop para ver costo de programa

bpfilter vs Alternativas

AspectobpfilteriptablesnftablesXDP/eBPF puro
RendimientoAlto (BPF/XDP)Menor (secuencial)Mejor que iptablesMás alto
SintaxisFamiliar o bfcliFamiliarModerno, unificadoEscribir código BPF
MadurezMás nuevoMuy maduroMaduroDepende de ti
Mejor paraVelocidad de BPF con reglas familiaresCompatibilidad legadaNetfilter modernoDatapaths personalizados

Inspecciona su costo en tiempo de ejecución con bpftop; compara con iptables para la ruta clásica.

Recursos