Pular para o conteúdo

bpfilter - Filtragem de Pacotes Linux Baseada em BPF

bpfilter - Filtragem de Pacotes Linux Baseada em BPF

bpfilter é um daemon que converte regras de firewall familiares em programas BPF otimizados. O problema de longa data que ele aborda: iptables tem sintaxe bem compreendida mas um teto de desempenho de avaliação sequencial de regra, enquanto eBPF/XDP bruto é rápido mas requer escrever e manter código BPF. bpfilter os conecta — você expressa regras de um jeito familiar, e ele as compila em BPF eficiente anexado no hook certo (incluindo XDP, que processa pacotes antes deles entrarem na stack de rede).

Mudanças de firewall podem trancá-lo do acesso a um host remoto. Teste em um sistema acessível por console e mantenha um caminho de rollback.

Requisitos

  • Kernel Linux moderno com suporte BPF (6.4+ recomendado)
  • Privilégios de root (carrega programas BPF)
  • libbpf disponível

Instalação

MétodoComo
Do sourcegit clone https://github.com/facebook/bpfilter && make && sudo make install
Pacote distroDisponível em algumas distribuições mais novas
Iniciar daemonsudo bpfilter (ou via systemd)
Verificarbpfilter --version

Arquitetura

PeçaPapel
bpfilter daemonRecebe regras, gera e carrega BPF
bfcliCLI nativa para expressar regras
Front-end de iptables/nftablesTraduzir regras existentes em bpfilter
Programas BPFO filtro compilado anexado a um hook

Hooks de Anexação

HookOnde pacotes são processados
XDPMais cedo — no driver, antes da stack (mais rápido)
TC (traffic control)Após análise básica, ingress/egress
cgroupFiltragem de socket por-cgroup
NetfilterColocação compatível no caminho clássico

Escolher XDP dá o maior ganho de desempenho, particularmente para derrotar tráfego indesejado (mitigação de DDoS), porque pacotes rejeitados nunca atravessam a stack.

Definindo Regras com bfcli

# Conceitual ruleset: drop padrão, permitir SSH e tráfego estabelecido
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
'
ComandoDescrição
bfcli ruleset set --from-file FCarregar regras de um arquivo
bfcli ruleset getMostrar o ruleset ativo
bfcli ruleset flushRemover todas as regras
bfcli chain setGerenciar uma chain única

Matchers

MatcherCorresponde
ip4.saddr / ip4.daddrIPv4 fonte/destino (CIDR suportado)
ip6.saddr / ip6.daddrEndereços IPv6
ip4.protoProtocolo (tcp, udp, icmp)
tcp.dport / tcp.sportPortas TCP
udp.dport / udp.sportPortas UDP
tcp.flagsCombinações de flag TCP
meta.ifindexInterface

Verdicts

VerdictEfeito
ACCEPTPermitir o pacote
DROPDescartar silenciosamente
CONTINUECair através para a próxima regra

Usando Regras iptables Existentes

bpfilter vem com front-ends de tradução para que você possa manter ferramentas existentes:

# Apontar o front-end compatível com iptables para bpfilter
sudo iptables-bpfilter -A INPUT -p tcp --dport 22 -j ACCEPT

Este é o caminho de migração: mantenha sua sintaxe de regra e scripts de gerenciamento, ganhe execução de BPF por baixo.

Verificando

VerificaçãoComando
Ruleset ativosudo bfcli ruleset get
Programas BPF carregadossudo bpftool prog list
XDP anexadoip link show <iface>
ContadoresContadores de regra em bfcli ruleset get
Overheadsudo bpftop para ver custo do programa

bpfilter vs Alternativas

AspectobpfilteriptablesnftablesXDP/eBPF bruto
DesempenhoAlto (BPF/XDP)Menor (sequencial)Melhor que iptablesMaior
SintaxeFamiliar ou bfcliFamiliarModerno, unificadoEscrever código BPF
MaturidadeMais novoMuito maduroMaduroDepende de você
Melhor paraVelocidade de BPF com regras familiaresCompatibilidade legadaNetfilter modernoDatapaths customizados

Inspecione seu custo de runtime com bpftop; compare com iptables para o caminho clássico.

Recursos