Depois do RFC 7454: o que muda na segurança de BGP e como preparar sua rede
Introdução: uma política que envelheceu mal
Em 2015, RFC 7454 / BCP 194 virou a bíblia da segurança de BGP. Recomendava filtrar de forma agressiva: nada mais específico que um /24 em IPv4, nada mais longo que um /48 em IPv6, prefix-lists estáticos, e um longo etc. de regras que hoje geram mais problemas do que resolvem.
A realidade em campo é outra. Filtrar todo /25 ou mais específico deixa de fora clientes legítimos com PI que precisam anunciar blocos pequenos. Um prefix-list estático com 50.000 entradas não escala. E o pior: o filtro por comprimento não te protege contra um hijack de um /20 válido.
No dia 7 de abril de 2026, o grupo de trabalho GROW do IETF publicou a revisão 15 de draft-ietf-grow-bgpopsecupd, o documento que substituirá o RFC 7454 quando concluir o trâmite como BCP. Na data deste artigo ele está em WG Last Call — ainda não é RFC, mas a direção é clara e o conteúdo está estabilizado. A mudança de fundo: deixa de focar no tamanho do prefixo e aponta para a validação de origem.
Se você opera um ISP na América Latina, isso te obriga a rever seus filtros de entrada e saída. Não é opcional.
O que o rascunho propõe
A filosofia do documento muda de defesa por filtro para defesa por validação. O rascunho é deliberadamente abstrato — define propriedades que um operador DEVE cumprir sem prescrever tecnologias específicas —, mas a direção operacional é clara. Combinando o que o rascunho diz com o que consideramos boa prática hoje, a comparação fica assim (as linhas com † são recomendação operacional nossa, não requisitos do rascunho):
| Eixo | RFC 7454 (2015) | Postura operacional pós-bgpopsecupd |
|---|---|---|
| Filtro por comprimento | Filtrar ≥/25 IPv4, ≥/49 IPv6 | O rascunho remove as recomendações por comprimento; o comprimento não indica legitimidade |
| Validação de origem | Menciona IRR como opcional | O rascunho exige que a origem esteja “globally authorized”; na prática, isso é RPKI + ROA com IRR como complemento |
| Atributos transitivos | Não aprofunda | O rascunho recomenda fortemente não alterar atributos transitivos imutáveis (SHOULD NOT) e proíbe transportar estados RPKI em atributos transitivos (MUST NOT) |
| BGP Roles † | Não existia | RFC 9234 define roles (Provider, Customer, Peer) e o atributo OTC para prevenção de route leaks |
| ASPA † | Não existia | Os rascunhos de ASPA (draft-ietf-sidrops-aspa-verification) adicionam validação de AS-PATH por relação de provider |
| Communities † | Não aprofunda | Recomendação operacional: documentar quais communities são aceitas, não fazer strip indiscriminado |
| Monitoramento † | SNMP, syslog básico | BMP (RFC 7854) como ferramenta de detecção de anomalias |
O ponto-chave: o comprimento do prefixo não é indicador de ataque. Um /24 sequestrado (hijack) é tão perigoso quanto um /25 legítimo. O foco novo é validar quem tem direito de anunciar aquele prefixo, não quantos bits ele tem.
Como isso fica na prática
Cenário 1: sua sessão com um upstream
Hoje você provavelmente tem algo assim:
ip prefix-list UPSTREAM-IN deny 0.0.0.0/0 ge 25
ip prefix-list UPSTREAM-IN permit 0.0.0.0/0 le 24
Isso bloqueia /25s de clientes com PI que passam por aquele upstream. Com a nova recomendação, o filtro por comprimento some e no lugar entra validação com RPKI:
! FRRouting
route-map UPSTREAM-IN permit 10
match rpki valid
set local-preference 200
!
route-map UPSTREAM-IN permit 20
match rpki notfound
set local-preference 100
!
route-map UPSTREAM-IN deny 30
match rpki invalid
Cenário 2: sua sessão com um cliente single-homed
O rascunho traz orientação explícita para clientes multi-homed, mas o caso single-homed ainda é 90% na América Latina. A recomendação nova: não filtrar por comprimento se o cliente tiver um ROA válido.
! Juniper JunOS
policy-statement CUSTOMER-IN {
term VALID-ROA {
from {
protocol bgp;
validation-database valid;
}
then {
local-preference 200;
accept;
}
}
term INVALID-ROA {
from validation-database invalid;
then reject;
}
term NO-ROA {
from validation-database unknown;
then {
local-preference 100;
accept;
}
}
}
Veja a ordem: valid aceita com local-preference alto, invalid rejeita, unknown aceita com local-preference baixo. Assim você adota RPKI sem quebrar clientes que ainda não têm ROA.
Cenário 3: communities e segurança
O RFC 7454 não aprofundava o papel das communities na segurança operacional. O rascunho bgpopsecupd, ao recomendar fortemente não alterar atributos transitivos sem justificativa (SHOULD NOT), reforça indiretamente que fazer strip de todas as communities em sessões de peering é erro: há communities bem conhecidas que servem para mitigação (RTBH, RFC 7999) e sinalização de origem.
A recomendação operacional é documentar quais communities você aceita e de quem, em vez de fazer strip de tudo indiscriminadamente. Nós detalhamos isso no artigo sobre BGP communities para ISPs.
Configuração: transição a partir do RFC 7454
Nota: Os comandos de configuração abaixo são exemplos de referência. A sintaxe exata pode variar conforme a versão do sistema operacional de cada plataforma (FRRouting, JunOS, Huawei VRP). Sempre confira com a documentação oficial da versão que você está rodando.
Não precisa mudar tudo de um dia pro outro. A migração faz sentido em etapas:
| Etapa | Ação | Impacto |
|---|---|---|
| 1 | Habilitar RPKI-RTR com seu RIR (LACNIC) | Validação sem afetar rotas |
| 2 | Aplicar route-maps com rpki notfound permitido |
Ver qual porcentagem das suas rotas não tem ROA |
| 3 | Contatar clientes sem ROA e ajudá-los a criar | Reduz o tráfego not-found |
| 4 | Remover prefix-lists baseados em comprimento | Simplifica a operação |
| 5 | Habilitar BMP para o seu sistema de monitoramento | Detecção de anomalias em tempo real |
FRRouting: configuração completa de exemplo
! RPKI-RTR (requer bgpd compilado com -M rpki)
! A porta padrão do RTR é TCP 323 (RFC 8210); usa-se 8323 sem privilégios
rpki
rpki cache tcp rpki.ejemplo.ayuda.la 8323 preference 1
exit
!
! BLACKHOLE antes do RPKI: aceitar rotas RTBH mesmo se RPKI invalid
route-map UPSTREAM-IN permit 5
match community BLACKHOLE
set ip next-hop 192.0.2.1
!
! Route-maps com validação RPKI
route-map UPSTREAM-IN permit 10
match rpki valid
set local-preference 200
!
route-map UPSTREAM-IN permit 20
match rpki notfound
set local-preference 100
!
route-map UPSTREAM-IN deny 30
match rpki invalid
!
! BGP neighbor com policy
router bgp 65001
neighbor 198.51.100.1 remote-as 65002
neighbor 198.51.100.1 route-map UPSTREAM-IN in
Huawei VRP: exemplo com route-policy
# Configurar validação RPKI
rpki
rpki cache rpki.ejemplo.ayuda.la port 8323 preference 1
#
# Criar route-policy com validação
route-policy UPSTREAM-IN permit node 10
if-match rpki origin-as-validation valid
apply local-preference 200
#
route-policy UPSTREAM-IN permit node 20
if-match rpki origin-as-validation not-found
apply local-preference 100
#
route-policy UPSTREAM-IN deny node 30
if-match rpki origin-as-validation invalid
#
# Aplicar ao peer dentro de address-family
bgp 65001
peer 198.51.100.1 as-number 65002
ipv4-family unicast
peer 198.51.100.1 enable
peer 198.51.100.1 route-policy UPSTREAM-IN import
prefix origin-validation enable
Huawei VRP: exemplo equivalente com XPL
Em equipamentos NE40E / NetEngine 8000 com VRP V8R16+ dá para usar XPL (eXtensible Policy Language) no lugar de route-policy. A vantagem é que a lógica fica em um bloco só com if/elseif/endif, sem a fragmentação de nós numerados:
# Criar route-filter com validação RPKI
xpl route-filter UPSTREAM-IN
if rpki-validation == valid then
apply local-preference 200
approve
elseif rpki-validation == not-found then
apply local-preference 100
approve
elseif rpki-validation == invalid then
refuse
endif
end-filter
# Aplicar ao peer dentro de address-family
bgp 65001
peer 198.51.100.1 as-number 65002
ipv4-family unicast
peer 198.51.100.1 enable
peer 198.51.100.1 route-filter UPSTREAM-IN import
prefix origin-validation enable
A diferença operacional em relação ao route-policy: o XPL avalia as condições como um bloco sequencial com curto-circuito, o que deixa a lógica mais legível quando você tem várias condições em cadeia. Além disso, suporta variáveis parametrizadas ($var) que simplificam a reutilização de filtros entre peers com políticas parecidas.
Erros comuns vistos em auditorias
1. Filtrar por comprimento e achar que isso é segurança
Um prefix-list com ge 25 te dá falsa sensação de proteção. Um atacante com um /20 válido passa de boa. A única defesa de verdade é validar quem anuncia.
2. Não distinguir RPKI “invalid” de “not-found”
Invalid significa que existe um ROA dizendo que aquele AS não deve anunciar aquele prefixo. Isso se descarta.
Not-found significa que não há ROA. É outra coisa. Descartar isso quebra conectividade legítima. A prática operacional recomendada é clara: not-found deve ser aceito com preferência menor, não rejeitado. Descartar hoje deixaria sem conectividade uma fatia significativa da internet.
3. Fazer strip de communities sem saber o que elas fazem
Remover todas as communities em sessões de peering tira ferramentas úteis como RTBH. Se seu upstream te manda 65535:666 para blackholing e você faz strip de tudo, não dá pra mitigar um ataque DDoS sem esperar eles agirem.
4. Não monitorar BGP com BMP
Sem BMP, uma mudança sutil no Adj-RIB-In de um peer passa batida até o roteamento ser afetado. BMP deixa você detectar rotas novas, communities alteradas, ou withdraws em massa em segundos, não em horas.
Relação com outros temas
Essa mudança não existe no vácuo. Conecta diretamente com:
- RPKI e ROAs: sem ROAs publicadas, a validação não funciona. Se você é LIR na LACNIC, publicar seus ROAs virou requisito operacional, não só boa prática.
- BGP communities: o rascunho novo reforça a importância de não alterar atributos transitivos; as communities fazem parte do modelo de segurança, não são ruído pra eliminar.
- BGP Roles e ASPA: RFC 9234 define roles de peering e o atributo OTC para prevenir route leaks. ASPA acrescenta validação de AS-PATH por relação de provider como camada depois de ROV.
- DDoS e RTBH: communities bem conhecidas como
65535:666(RFC 7999) viram ferramentas operacionais, não vetores de risco.
Nossa experiência em campo
Em mais de 40 auditorias realizadas entre 2025 e 2026 em ISPs da Argentina, Brasil, Chile e México, o padrão se repete:
- 80% têm prefix-lists por comprimento que bloqueiam /25s e /26s de clientes com PI legítimo
- 40% têm RPKI habilitado mas não aplicado em route-maps (só olham, não agem)
- 90% fazem strip de todas as communities sem exceção
- Menos de 10% usam BMP para monitoramento de BGP
A transição para a postura do rascunho bgpopsecupd-15 exige trabalho, mas reduz a carga operacional a longo prazo. Um route-map com três termos de RPKI é mais simples de manter que um prefix-list de 500 linhas que você precisa atualizar toda vez que um cliente pede um PI novo.
Precisa de ajuda?
Rever a política de roteamento de um ISP com 50 sessões BGP não é trivial. Se você quer uma auditoria dos seus filtros atuais, uma migração guiada para validação com RPKI, ou simplesmente alguém que revise sua configuração antes de um cliente reclamar que o /26 dele não aparece, a gente conversa.
Ver nossos serviços de engenharia de rede →
Referências
- RFC 7454 — BGP Operations and Security — Documento base, em processo de ser substituído pelo bgpopsecupd.
- draft-ietf-grow-bgpopsecupd-15 — Atualização de operações e segurança de BGP, abril de 2026 (em WG Last Call).
- RFC 9234 — Route Leak Prevention and Detection Using Roles — Define BGP Roles (Provider, Customer, Peer) e o atributo OTC para prevenção de route leaks.
- RFC 6811 — BGP Prefix Origin Validation — Procedimento de validação de origem com RPKI.
- RFC 7999 — BLACKHOLE Community — Community well-known
65535:666para RTBH. - RFC 7854 — BGP Monitoring Protocol (BMP) — Monitoramento de estado de BGP em tempo real.
- RFC 8210 — The Resource Public Key Infrastructure (RPKI) to Router Protocol, Version 1 — Protocolo RTR entre validador RPKI e router (porta padrão TCP 323).
- RFC 1997 — BGP Communities Attribute — Atributo de communities padrão.
- RFC 4360 — BGP Extended Communities — Extended communities.
- RFC 8092 — BGP Large Communities — Large communities.
Já revisou seus prefix-lists hoje? Quantos prefixos legítimos você está bloqueando por comprimento sem perceber? Se achou um, escreve pra [email protected].