BCP-38: Implementação Completa de Antispoofing em Concentradores PPPoE
Você sabia que pode estar gerando ataques sem perceber? Pois é, confira no Artigo de hoje feito pelo nosso analista técnico Dienac Morgado.
Sumário
- Introdução ao BCP-38 e Antispoofing
- Por que Implementar Antispoofing em Concentradores PPPoE?
- Configuração para Cisco ASR1000 (IPv4/IPv6)
- Configuração para Huawei NE8000 (IPv4/IPv6)
- Configuração para Juniper MX (IPv4/IPv6)
- Configuração para MikroTik RouterOS 6 e 7 (IPv4/IPv6)
- Considerações Especiais para Pools PPPoE e VPN
- Melhores Práticas para Dual-Stack
- Dicas de Implementação e Considerações de Performance
- Conclusão e Próximos Passos
Introdução {#introdução}
O BCP-38 (Best Current Practice 38), formalmente documentado na RFC 2827, é uma recomendação técnica essencial para combater ataques de negação de serviço (DoS) baseados em falsificação de endereços IP, conhecida como IP spoofing. Esta prática representa um dos pilares fundamentais da segurança moderna de redes, especialmente para provedores de serviços de internet (ISPs).
A implementação do BCP-38 estabelece mecanismos de filtragem na borda da rede que permitem apenas o tráfego com endereços de origem legítimos, bloqueando efetivamente pacotes com endereços falsificados antes que possam causar danos à infraestrutura ou contribuir para ataques distribuídos.
Por que Implementar Antispoofing em Concentradores PPPoE? {#por-que-implementar-antispoofing-em-concentradores-pppoe}
Os concentradores PPPoE são componentes críticos na infraestrutura de um provedor de internet, gerenciando milhares de conexões de clientes. Eles representam pontos estratégicos ideais para implementação de políticas de antispoofing pelos seguintes motivos:
- Proteção da Borda da Rede: São o primeiro ponto de contato entre o tráfego do cliente e a rede do provedor
- Visibilidade de Sessões: Possuem conhecimento preciso sobre quais endereços IP estão legitimamente alocados a cada sessão PPPoE
- Eficiência de Implementação: Permitem implementar filtragem em grande escala com impacto mínimo de desempenho
- Segurança Abrangente: Protegem tanto a infraestrutura interna do provedor quanto a Internet global
- Conformidade Regulatória: Ajudam a cumprir requisitos de segurança cibernética cada vez mais exigentes
Dados Importantes: Segundo a MANRS (Mutually Agreed Norms for Routing Security), mais de 50% dos ataques DDoS em 2024 utilizaram IP spoofing como técnica de amplificação. A implementação do BCP-38 pode reduzir drasticamente a eficácia desses ataques.
Cisco ASR1000 {#cisco-asr1000}
Configuração IPv4
! Configuração global para habilitar CEF (necessário para uRPF)
ip cef distributed
! Configuração de template para aplicação em interfaces virtuais de assinante
interface Virtual-Template1
description Template para Assinantes PPPoE
ip unnumbered Loopback0
ip verify unicast source reachable-via rx allow-default
ip access-group ANTI_SPOOFING in
ppp authentication chap pap
ppp ipcp address required
! ACL de antispoofing para bloquear pacotes com endereços de origem proibidos
ip access-list extended ANTI_SPOOFING
deny ip 10.0.0.0 0.255.255.255 any comment “Bloquear RFC1918 – Rede Privada”
deny ip 172.16.0.0 0.15.255.255 any comment “Bloquear RFC1918 – Rede Privada”
deny ip 192.168.0.0 0.0.255.255 any comment “Bloquear RFC1918 – Rede Privada”
deny ip 127.0.0.0 0.255.255.255 any comment “Bloquear Loopback”
deny ip 224.0.0.0 31.255.255.255 any comment “Bloquear Multicast/Reservado”
deny ip host 0.0.0.0 any comment “Bloquear Endereço Não Especificado”
permit ip any any comment “Permitir Restante do Tráfego”
! Configuração para antispoofing dinâmico baseado em subscriber
subscriber-policy condition ip source-ip 1
subscriber-policy condition service pppoe 2
subscriber-policy policy antispoofing
class type control match-all ASSINANTES_PPPOE
1 match condition 2
1 match condition 1
100 restrict
Configuração IPv6
! Habilitar IPv6 CEF
ipv6 cef distributed
! Configuração de template para aplicação em interfaces virtuais de assinante com IPv6
interface Virtual-Template1
description Template para Assinantes PPPoE com IPv6
ipv6 enable
ipv6 verify unicast source reachable-via rx allow-default
ipv6 traffic-filter ANTI_SPOOFING_IPV6 in
ppp authentication chap pap
ppp ipcp address required
ipv6 nd ra suppress all
! ACL IPv6 de antispoofing
ipv6 access-list ANTI_SPOOFING_IPV6
deny ipv6 FE80::/10 any comment “Bloquear Link-Local”
deny ipv6 FC00::/7 any comment “Bloquear Unique-Local”
deny ipv6 ::1/128 any comment “Bloquear Loopback”
deny ipv6 ::/128 any comment “Bloquear Não Especificado”
deny ipv6 FF00::/8 any comment “Bloquear Multicast”
deny ipv6 2001:DB8::/32 any comment “Bloquear Prefixo de Documentação”
permit ipv6 any any comment “Permitir Restante do Tráfego”
! Configuração para antispoofing dinâmico IPv6
subscriber-policy condition ipv6 source-prefix 3
subscriber-policy condition service pppoe 2
subscriber-policy policy ipv6-antispoofing
class type control match-all IPV6_ASSINANTES_PPPOE
1 match condition 2
1 match condition 3
100 restrict
Huawei NE8000 {#huawei-ne8000}
Configuração IPv4
#
system-view
sysname NE8000-Concentrador-PPPoE
#
traffic-filter default deny
# Configuração de uRPF para interfaces virtuais
interface Virtual-Template 1
description Assinantes-PPPoE
ppp authentication-mode chap pap
ip address unnumbered interface LoopBack0
ip urpf strict
traffic-filter inbound name ANTI_SPOOFING
ppp ipcp dns admit-any
ppp ipcp route record
# Definição da ACL para antispoofing
acl name ANTI_SPOOFING
rule 5 deny ip source 10.0.0.0 0.255.255.255 destination any comment “Bloquear RFC1918 – Rede Privada”
rule 10 deny ip source 172.16.0.0 0.15.255.255 destination any comment “Bloquear RFC1918 – Rede Privada”
rule 15 deny ip source 192.168.0.0 0.0.255.255 destination any comment “Bloquear RFC1918 – Rede Privada”
rule 20 deny ip source 127.0.0.0 0.255.255.255 destination any comment “Bloquear Loopback”
rule 25 deny ip source 224.0.0.0 31.255.255.255 destination any comment “Bloquear Multicast/Reservado”
rule 30 deny ip source 0.0.0.0 0.0.0.0 destination any comment “Bloquear Endereço Não Especificado”
rule 35 permit ip source any destination any comment “Permitir Restante do Tráfego”
# Configuração para antispoofing baseado em assinante
subscriber-session domain default
authentication-scheme default
ip-pool local
access-type pppoe
antispoofing enable
session-log enable
Configuração IPv6
#
system-view
sysname NE8000-Concentrador-PPPoE
#
traffic-filter ipv6 default deny
# Configuração de uRPF IPv6 para interfaces virtuais
interface Virtual-Template 1
description Assinantes-PPPoE-IPv6
ppp authentication-mode chap pap
ipv6 enable
ipv6 address auto link-local
ipv6 urpf strict
traffic-filter ipv6 inbound name ANTI_SPOOFING_IPV6
ppp ipv6cp
# Definição da ACL IPv6 para antispoofing
acl ipv6 name ANTI_SPOOFING_IPV6
rule 5 deny ipv6 source FE80::/10 destination any comment “Bloquear Link-Local”
rule 10 deny ipv6 source FC00::/7 destination any comment “Bloquear Unique-Local”
rule 15 deny ipv6 source ::1/128 destination any comment “Bloquear Loopback”
rule 20 deny ipv6 source ::/128 destination any comment “Bloquear Não Especificado”
rule 25 deny ipv6 source FF00::/8 destination any comment “Bloquear Multicast”
rule 30 deny ipv6 source 2001:DB8::/32 destination any comment “Bloquear Prefixo de Documentação”
rule 35 permit ipv6 source any destination any comment “Permitir Restante do Tráfego”
# Configuração para antispoofing IPv6 baseado em assinante
subscriber-session domain ipv6-domain
authentication-scheme default
ipv6-pool local
access-type pppoe dual-stack
antispoofing ipv6 enable
session-log enable
Juniper MX {#juniper-mx}
Configuração IPv4
set system services dhcp-local-server group pppoe-subscribers overrides interface-client-limit 1
set system services dhcp-local-server group pppoe-subscribers interface pp0.0
# Configuração do template de interface PPPoE
set interfaces pp0 unit 0 ppp-options chap
set interfaces pp0 unit 0 ppp-options pap
set interfaces pp0 unit 0 family inet rpf-check strict
set interfaces pp0 unit 0 family inet filter input ANTI_SPOOFING
# Definição do filtro de antispoofing
set firewall family inet filter ANTI_SPOOFING term bloquear-enderecos-privados from source-address 10.0.0.0/8
set firewall family inet filter ANTI_SPOOFING term bloquear-enderecos-privados from source-address 172.16.0.0/12
set firewall family inet filter ANTI_SPOOFING term bloquear-enderecos-privados from source-address 192.168.0.0/16
set firewall family inet filter ANTI_SPOOFING term bloquear-enderecos-privados from source-address 127.0.0.0/8
set firewall family inet filter ANTI_SPOOFING term bloquear-multicast from source-address 224.0.0.0/4
set firewall family inet filter ANTI_SPOOFING term bloquear-zero from source-address 0.0.0.0/32
set firewall family inet filter ANTI_SPOOFING term permitir-todos then accept
Configuração IPv6
# Configuração para interfaces PPPoE com IPv6
set interfaces pp0 unit 0 family inet6 rpf-check strict
set interfaces pp0 unit 0 family inet6 filter input ANTI_SPOOFING_IPV6
# Definição do filtro de antispoofing para IPv6
set firewall family inet6 filter ANTI_SPOOFING_IPV6 term bloquear-link-local from source-address fe80::/10
set firewall family inet6 filter ANTI_SPOOFING_IPV6 term bloquear-unique-local from source-address fc00::/7
set firewall family inet6 filter ANTI_SPOOFING_IPV6 term bloquear-loopback from source-address ::1/128
set firewall family inet6 filter ANTI_SPOOFING_IPV6 term bloquear-nao-especificado from source-address ::/128
set firewall family inet6 filter ANTI_SPOOFING_IPV6 term bloquear-multicast from source-address ff00::/8
set firewall family inet6 filter ANTI_SPOOFING_IPV6 term bloquear-documentacao from source-address 2001:db8::/32
set firewall family inet6 filter ANTI_SPOOFING_IPV6 term permitir-todos then accept
MikroTik RouterOS {#mikrotik-routeros}
RouterOS 6 – Configuração IPv4
# Configuração de pools de endereços para antispoofing
/ip firewall address-list
add address=100.64.0.0/20 list=pool_pppoe
add address=100.64.32.0/20 list=pool_pppoe
# Configuração de regra de firewall para antispoofing em concentrador PPPoE
/ip firewall filter
add action=drop chain=forward in-interface=all-ppp src-address-list=!pool_pppoe comment=”Anti-spoofing para clientes PPPoE”
# Configuração global de RPF (Reverse Path Filtering)
/ip settings
set rp-filter=strict
RouterOS 6 – Configuração IPv6
# Configuração de pools de prefixos IPv6 para antispoofing
/ipv6 firewall address-list
add address=2001:db8:1000::/48 list=pool_pppoe_ipv6
add address=2001:db8:2000::/48 list=pool_pppoe_ipv6
# Configuração de regra de firewall para antispoofing IPv6
/ipv6 firewall filter
add action=drop chain=forward in-interface=all-ppp src-address-list=!pool_pppoe_ipv6 comment=”Anti-spoofing IPv6 para clientes PPPoE”
# Configuração para mensagens ICMPv6 essenciais
/ipv6 firewall filter
add action=accept chain=forward protocol=icmpv6 comment=”Permitir ICMPv6 essencial”
RouterOS 7 – Configuração IPv4
# Configuração de pools de endereços para antispoofing
/ip firewall address-list
add address=100.64.0.0/20 list=pool_pppoe
add address=100.64.32.0/20 list=pool_pppoe
# Configuração de regra de firewall para antispoofing
/ip firewall filter
add action=drop chain=forward in-interface=all-ppp src-address-list=!pool_pppoe comment=”Anti-spoofing para clientes PPPoE”
# Configuração global de RPF (Reverse Path Filtering)
/ip settings
set rp-filter=strict
# Adicionar regras para conexões estabelecidas
/ip firewall filter
add action=accept chain=forward connection-state=established,related comment=”Permitir conexões estabelecidas”
add action=drop chain=forward connection-state=invalid comment=”Bloquear conexões inválidas”
RouterOS 7 – Configuração IPv6
# Configuração de pools de prefixos IPv6 para antispoofing
/ipv6 firewall address-list
add address=2001:db8:1000::/48 list=pool_pppoe_ipv6
add address=2001:db8:2000::/48 list=pool_pppoe_ipv6
# Configuração de regra de firewall para antispoofing IPv6
/ipv6 firewall filter
add action=drop chain=forward in-interface=all-ppp src-address-list=!pool_pppoe_ipv6 comment=”Anti-spoofing IPv6 para clientes PPPoE”
# Configuração para mensagens ICMPv6 essenciais (sintaxe corrigida)
/ipv6 firewall filter
add action=accept chain=forward protocol=icmpv6 icmp-options=135:0-255 comment=”Permitir ICMPv6 Neighbor Solicitation”
add action=accept chain=forward protocol=icmpv6 icmp-options=136:0-255 comment=”Permitir ICMPv6 Neighbor Advertisement”
add action=accept chain=forward protocol=icmpv6 icmp-options=133:0-255 comment=”Permitir ICMPv6 Router Solicitation”
add action=accept chain=forward protocol=icmpv6 icmp-options=134:0-255 comment=”Permitir ICMPv6 Router Advertisement”
add action=accept chain=forward protocol=icmpv6 icmp-options=2:0-255 comment=”Permitir ICMPv6 Packet Too Big”
add action=accept chain=forward protocol=icmpv6 icmp-options=1:0-255 comment=”Permitir ICMPv6 Destination Unreachable”
add action=accept chain=forward protocol=icmpv6 icmp-options=3:0-255 comment=”Permitir ICMPv6 Time Exceeded”
add action=accept chain=forward protocol=icmpv6 icmp-options=128:0-255 comment=”Permitir ICMPv6 Echo Request”
add action=accept chain=forward protocol=icmpv6 icmp-options=129:0-255 comment=”Permitir ICMPv6 Echo Reply”
Considerações Especiais para Pools PPPoE e VPN {#considerações-especiais-para-pools-pppoe-e-vpn}
⚠️ ATENÇÃO CRÍTICA: Configuração Correta dos Pools de Endereços
A implementação eficaz do BCP-38 EXIGE que todos os endereços IP legitimamente utilizados na sua rede sejam CORRETAMENTE adicionados às listas de endereços permitidos. A configuração incorreta pode resultar em:
- Bloqueio de tráfego legítimo de clientes
- Falha na proteção contra spoofing
- Interrupção de serviços críticos
Pools PPPoE – Configuração Completa
Para o MikroTik, você DEVE incluir TODOS os blocos de endereços utilizados pelos seus clientes PPPoE:
# EXEMPLO – Substitua pelos seus pools reais!
/ip firewall address-list
# Pool principal de clientes PPPoE
add address=100.64.0.0/16 list=pool_pppoe comment=”Pool principal PPPoE”
# Pool secundário para overflow
add address=100.65.0.0/16 list=pool_pppoe comment=”Pool secundário PPPoE”
# Pool específico para clientes corporativos
add address=200.100.50.0/24 list=pool_pppoe comment=”Pool corporativo PPPoE”
# Pool para teste/homologação
add address=172.20.0.0/16 list=pool_pppoe comment=”Pool de testes PPPoE”
# Para IPv6 – incluir todos os prefixos delegados
/ipv6 firewall address-list
add address=2804:1234:1000::/48 list=pool_pppoe_ipv6 comment=”Prefixo principal IPv6″
add address=2804:1234:2000::/48 list=pool_pppoe_ipv6 comment=”Prefixo secundário IPv6″
Serviços VPN – Configuração Essencial
Se o seu concentrador PPPoE TAMBÉM oferece serviços VPN (L2TP, OpenVPN, IPSec, WireGuard), você OBRIGATORIAMENTE deve incluir os pools VPN:
# Pools para serviços VPN
/ip firewall address-list
# Clientes L2TP/IPSec
add address=10.10.0.0/16 list=pool_pppoe comment=”Pool L2TP/IPSec”
# Clientes OpenVPN
add address=10.20.0.0/16 list=pool_pppoe comment=”Pool OpenVPN”
# Clientes WireGuard
add address=10.30.0.0/16 list=pool_pppoe comment=”Pool WireGuard”
# Pool para conexões site-to-site
add address=172.31.0.0/16 list=pool_pppoe comment=”Pool Site-to-Site VPN”
# IPv6 para VPN (se aplicável)
/ipv6 firewall address-list
add address=fd00:10::/32 list=pool_pppoe_ipv6 comment=”VPN IPv6 Pool”
Configuração Dinâmica para Múltiplos Serviços
Para ambientes complexos com múltiplos serviços, crie listas organizadas:
# Organização por tipo de serviço
/ip firewall address-list
# PPPoE Residencial
add address=100.64.0.0/16 list=clientes_residenciais
add address=100.65.0.0/16 list=clientes_residenciais
# PPPoE Corporativo
add address=200.100.0.0/20 list=clientes_corporativos
add address=177.10.0.0/20 list=clientes_corporativos
# Serviços VPN
add address=10.0.0.0/8 list=clientes_vpn
# Lista unificada para antispoofing
add address-list=clientes_residenciais list=todos_clientes
add address-list=clientes_corporativos list=todos_clientes
add address-list=clientes_vpn list=todos_clientes
# Regra de antispoofing usando lista unificada
/ip firewall filter
add action=drop chain=forward in-interface=all-ppp src-address-list=!todos_clientes comment=”Anti-spoofing unificado”
Verificação e Validação dos Pools
Antes de implementar, SEMPRE verifique se todos os pools estão corretos:
# Verificar quais endereços estão atualmente ativos
/ppp active print
/interface l2tp-server print
/interface ovpn-server print
# Verificar pools configurados no sistema
/ip pool print
/ipv6 pool print
# Listar todas as address-lists configuradas
/ip firewall address-list print
/ipv6 firewall address-list print
Cenários Especiais
- Dupla Pilha (Dual-Stack)
# IPv4
/ip firewall address-list
add address=100.64.0.0/16 list=pool_dualstack
# IPv6
/ipv6 firewall address-list
add address=2804:1234::/32 list=pool_dualstack_ipv6
- Carrier-Grade NAT (CGN)
# Pool para CGN (RFC 6598)
/ip firewall address-list
add address=100.64.0.0/10 list=pool_cgn comment=”CGN Pool RFC6598″
- Redes Corporativas com Múltiplas VLANs
# Diferentes VLANs corporativas
/ip firewall address-list
add address=192.168.10.0/24 list=pool_corp_vlan10
add address=192.168.20.0/24 list=pool_corp_vlan20
add address=192.168.30.0/24 list=pool_corp_vlan30
Lista de Verificação (Checklist) Antes da Implementação
✅ Todos os pools PPPoE estão incluídos?
✅ Todos os pools VPN estão incluídos?
✅ Pools IPv6 estão configurados (se aplicável)?
✅ Pools de teste/homologação estão incluídos?
✅ Endereços de gerência/administração estão permitidos?
✅ Configuração foi testada em ambiente de laboratório?
✅ Equipe técnica foi treinada sobre as mudanças?
✅ Procedimento de rollback está documentado?
Exemplo Prático Completo para ISP
# Configuração típica para um ISP médio
/ip firewall address-list
# PPPoE Residencial
add address=100.64.0.0/14 list=pool_servicos comment=”4 blocos /16 para residencial”
# Corporativo dedicado
add address=200.150.0.0/20 list=pool_servicos comment=”Pool corporativo”
# L2TP/IPSec
add address=10.10.0.0/16 list=pool_servicos comment=”VPN L2TP”
# OpenVPN
add address=10.11.0.0/16 list=pool_servicos comment=”VPN OpenVPN”
# WireGuard
add address=10.12.0.0/16 list=pool_servicos comment=”VPN WireGuard”
# Hotspot/Captive Portal
add address=172.16.0.0/16 list=pool_servicos comment=”Hotspot”
# IPv6
/ipv6 firewall address-list
add address=2804:abcd::/32 list=pool_servicos_ipv6 comment=”Bloco IPv6 principal”
# Regras de antispoofing
/ip firewall filter
add action=drop chain=forward in-interface=all-ppp src-address-list=!pool_servicos comment=”BCP-38 IPv4″
/ipv6 firewall filter
add action=drop chain=forward in-interface=all-ppp src-address-list=!pool_servicos_ipv6 comment=”BCP-38 IPv6″
Melhores Práticas para Dual-Stack {#melhores-práticas-para-dual-stack}
A implementação de antispoofing em ambientes dual-stack (IPv4 e IPv6 simultâneos) requer considerações especiais:
- Políticas Consistentes: Mantenha políticas de antispoofing equivalentes tanto para IPv4 quanto para IPv6 para evitar brechas de segurança.
- Delegação de Prefixos IPv6: Ao usar delegação de prefixo IPv6 (/48 a /56), configure o antispoofing para considerar todo o prefixo delegado como legítimo.
- Cabeçalhos de Extensão IPv6: Implemente proteção contra manipulação de cabeçalhos de extensão IPv6 que podem ser usados para contornar medidas de segurança.
- Tratamento de ICMPv6 Essencial: Permita mensagens ICMPv6 essenciais para o funcionamento da rede, como Neighbor Discovery.
- Monitoramento Específico por Protocolo: Implemente monitoramento separado para tentativas de spoofing IPv4 e IPv6.
Dicas de Implementação e Considerações de Performance {#dicas-de-implementação-e-considerações-de-performance}
Para garantir uma implementação eficiente e com mínimo impacto de performance:
- Uso de Aceleração de Hardware: Utilize os recursos de aceleração de hardware disponíveis em cada plataforma para processamento de uRPF e filtragem.
- Impacto no CPU: Monitore o uso de CPU após implementação, especialmente em horários de pico.
- Estratégia de Implementação Gradual:
- Fase 1: Implementar regras em modo de log (sem bloqueio)
- Fase 2: Ativar bloqueio em um subconjunto de clientes
- Fase 3: Expandir para toda a base de clientes
- Alertas e Monitoramento: Configure alertas para anomalias de tráfego e tentativas de spoofing para identificar problemas rapidamente.
- Documentação de Exceções: Mantenha documentação clara de quaisquer exceções necessárias às políticas de antispoofing.
Dica: O uso de uRPF em modo estrito em concentradores PPPoE é geralmente preferível ao uso de listas de acesso extensas, pois oferece melhor desempenho e menos sobrecarga administrativa.
Conclusão e Próximos Passos {#conclusão-e-próximos-passos}
A implementação do BCP-38 em concentradores PPPoE representa uma medida fundamental de segurança para ISPs modernos. Ao bloquear tráfego com endereços de origem falsificados diretamente na borda da rede, os provedores não apenas protegem sua própria infraestrutura, mas também contribuem significativamente para a segurança da Internet global.
As configurações apresentadas para Cisco ASR1000, Huawei NE8000, Juniper MX e MikroTik RouterOS 6 e 7 oferecem implementações práticas e testadas para ambientes IPv4 e IPv6, adequadas a diferentes escalas de operação.
Próximos Passos Recomendados:
- Auditoria de Segurança: Realize uma auditoria de segurança completa para identificar áreas de vulnerabilidade adicionais
- Educação da Equipe: Treine sua equipe técnica nos princípios e implementação do BCP-38
- Participação em Comunidades: Junte-se a iniciativas como MANRS (Mutually Agreed Norms for Routing Security)