Olá Pessoal,
Este artigo tem por objetivo chamar a atenção para algumas recomendações e exemplos de boas práticas de filtragem de prefixos no BGP que são de grande interesse para aqueles responsáveis por um AS e que queiram impedir o recebimento de rotas inesperadas que sequer deveriam existir na Internet, mas que podem aparecer em decorrência de erros de configuração ou mesmo de ataques. A topologia abaixo é bastante simples, mas suficiente para exemplificar as configurações deste artigo.
Na tabela abaixo o leitor encontra uma relação das redes reservadas no IPv4 e que, portanto, devem ser filtradas nos filtros de entrada do BGP. Na tabela há uma breve descrição da finalidade de cada rede reservada, além do link para as respectivas RFCs com as aplicações das redes reservadas.
|------------------|---------------|------|
| Endereço | Descrição | RFC# |
|------------------|---------------|------|
| 0.0.0.0 /08 | Rede Zero | 6890 |
| 10.0.0.0 /08 | Privado | 1918 |
| 100.64.0.0 /10 | CGNAT | 6598 |
| 127.0.0.0 /08 | Loopback | 6890 |
| 169.254.0.0 /16 | Link Local | 3927 |
| 172.16.0.0 /12 | Privado | 1918 |
| 192.0.0.0 /24 | IETF | 6890 |
| 192.0.2.0 /24 | Documentação | 5737 |
| 192.168.0.0 /16 | Privado | 1918 |
| 198.18.0.0 /15 | Benchmark | 2544 |
| 198.51.100.0 /24 | Documentação | 5737 |
| 203.0.113.0 /24 | Documentação | 5737 |
| 224.0.0.0 /04 | Multicast | 5771 |
| 240.0.0.0 /04 | Classe E | 1700 |
|------------------|---------------|------|
Na sequência trago os comandos necessários para criar uma prefix-list denominada FILTRO-ENTRADA em que é negada a recepção de qulaquer uma dessas redes reservadas ou mesmo sub-redes geradas a partir delas. É comum utilizar prefix-list para esse fim pela flexibilidade de informar não apenas os prefixos exatos, mas também uma faixa de prefixos que sejam menores ou igual (le) do que determinado valor de referência. A última regra permite o recebimento de qualquer prefixo menor do que /24 (0.0.0.0/0 le 24), uma prática recomenda porque impede o recebimento de anúncios fragmentados que sejam maiores do que /24. Depois de criar a lista em R1, é necessário aplicá-la na entrada da vizinhança BGP com R4.
!-- Criação do Filtro via Prefix-List
R1(config)# ip prefix-list FILTRO-ENTRADA deny 0.0.0.0/8 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 10.0.0.0/8 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 100.64.0.0/10 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 127.0.0.0/8 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 169.254.0.0/16 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 172.16.0.0/12 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 192.0.0.0/24 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 192.0.2.0/24 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 192.168.0.0/16 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 198.18.0.0/15 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 198.51.100.0/24 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 203.0.113.0/24 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 224.0.0.0/4 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA deny 240.0.0.0/4 le 32
R1(config)# ip prefix-list FILTRO-ENTRADA permit 0.0.0.0/0 le 24
!-- Aplicação do Filtro no Vizinho eBGP
R1(config)# router bgp 100
R1(config-router)# neighbor 203.0.113.2 remote-as 200
R1(config-router)# neighbor 203.0.113.2 prefix-list FILTRO-ENTRADA in
R1(config-router)# end
R1# clear bgp all 200 soft
É interessante aproveitar o assunto e fazer um paralelo com esse mesmo procedimento no contexto do protocolo IPv6. Na tabela abaixo o leitor encontra uma relação das redes reservadas no IPv6 e que, portanto, devem ser filtradas nos filtros de entrada do BGP. Na tabela há uma breve descrição da finalidade de cada rede reservada, além do link para as respectivas RFCs com as aplicações das redes reservadas.
|------------------|---------------|------|
| Endereço | Descrição | RFC# |
|------------------|---------------|------|
| :: /0 | Default | |
| :: /128 | Sem Endereço | 4291 |
| ::1 /128 | Loopback | 4291 |
| ::ffff:0:0 /96 | IPv4 Mapeado | 4291 |
| 0100:: /64 | Descarte | 6666 |
| 2000:: /3 | Global | 3587 |
| 2001:: /32 | Teredo | 4380 |
| 2001:10:: /28 | ORCHID | 4843 |
| 2001:db8:: /32 | Documentação | 3849 |
| 2002:: /16 | 6to4 | 3056 |
| fc00:: /7 | Unique Local | 4193 |
| fe80:: /10 | Link-Local | 4291 |
| ff00:: /8 | Multicast | 4291 |
|------------------|---------------|------|
Na sequência trago os comandos necessários para criar uma prefix-list denominada FILTRO-ENTRADA-v6 em que é negada a recepção de qulaquer uma dessas redes reservadas ou mesmo sub-redes geradas a partir delas. Observem nos comandos abaixo que nem todas as redes reservadas da tabela acima aparecem explicitamente nas regras, já que a sequência de permissões e negações apresentada é suficiente para garantir a filtragem delas. Com base no filtro abaixo, somente são permitidos prefixos IPv6 iguais ou menores do que /48, uma boa prática para evitar o recebimento de prefixos fragmentados.
ipv6 prefix-list FILTRO-ENTRADA-v6 deny 2001:db8::/32 le 128
ipv6 prefix-list FILTRO-ENTRADA-v6 permit 2001::/32
ipv6 prefix-list FILTRO-ENTRADA-v6 deny 2001::/32 le 128
ipv6 prefix-list FILTRO-ENTRADA-v6 permit 2002::/16
ipv6 prefix-list FILTRO-ENTRADA-v6 deny 2002::/16 le 128
ipv6 prefix-list FILTRO-ENTRADA-v6 deny 3ffe::/16 le 128
ipv6 prefix-list FILTRO-ENTRADA-v6 permit 2000::/3 le 48
ipv6 prefix-list FILTRO-ENTRADA-v6 deny ::/0 le 128
Caso o laboratório estivesse configurado com endereços IPv6, essa prefix-list poderia ser aplicada em um vizinho eBGP (2001:db8:cafe::40) através dos comandos abaixo. Uma diferença no contexto do IPv6 é que as políticas do BGP devem ser aplicadas no sub-modo de configuração da address-family IPv6. O leitor interessado na configuração de BGP através de IPv6 pode recorrer ao laboratório 34 do livro ou mesmo ao artigo intitulado "Peering IPv6 no Roteamento BGP".
!-- Exemplo de Aplicação do Filtro na Address Family IPv6
R1(config)# ipv6 unicast-routing
R1(config)# router bgp 100
R1(config-router)# neighbor 2001:DB8::2 remote-as 200
R1(config-router)# address-family ipv6 unicast
R1(config-router-af)# neighbor 2001:DB8::2 prefix-list FILTRO-ENTRADA-v6 in
R1(config-router-af)# neighbor 2001:DB8::2 activate
Há várias fontes de distribuição de filtros pradrões na Internet que tem por objetivo tornar a Internet um espaço mais seguro. Uma fonte interessante é do Team Cymru que atualiza sua relação de prefixos a cada 4 horas e que contempla, inclusive, aqueles prefixos alocados às autoridades regionais da Internet (RIR) que ainda não foram atribuídos para nenhum AS. Vale à pena conferir o link abaixo...
Façam seus testes...
Samuel.
Parabéns pelo artigo, Mestre Samuel!!!
ResponderExcluirMuito legal professor, parabéns.
ResponderExcluirMuito bom o artigo, Parabéns !!!
ResponderExcluirIsso é meio default pra quem tem As, para mais referências busquem BOGONS no google abs
ResponderExcluirMas ele comentou sobre os bogons no final do artigo...abç
Excluiralias ótimo post com qualidade impecável como sempre
ResponderExcluirParabéns.....ajudou-me e muito..... obrigado
ResponderExcluirÓtimo Post! Muita clareza na explicação.
ResponderExcluirValeu Samuel