Entendendo a Importância dos Filtros BGP no MikroTik
O Border Gateway Protocol (BGP) é o protocolo de roteamento inter-sistema que mantém a internet conectada. Diferente de protocolos IGP como OSPF ou EIGRP, o BGP não confia automaticamente nas rotas recebidas. Ele opera sob o princípio de "confiança zero" e política. Para administradores de redes, sysadmins e profissionais de infraestrutura que utilizam equipamentos MikroTik, dominar os filtros de importação (import) e exportação (export) é a diferença entre uma conexão estável e segura e um colapso de roteamento ou vazamento de tráfego.
Muitos tutoriais focam apenas na configuração básica de adjacências, mas negligenciam o controle fino das rotas. Sem filtros adequados, você pode anunciar rotas internas que não deveriam estar na tabela global ou aceitar rotas maliciosas que causam blackholing. Neste tutorial técnico, vamos explorar como implementar filtros práticos no MikroTik RouterOS para controlar exatamente quais prefixos entram e saem da sua instância BGP.
Conceitos Fundamentais: Import vs Export
Antes de escrever os comandos, é crucial entender o fluxo de dados. No contexto do BGP no MikroTik, os filtros atuam em dois pontos distintos:
- Import Filter (Filtro de Importação): Aplicado às rotas recebidas do peer (vizinho). Ele decide se a rota anunciada pelo parceiro deve ser aceita na tabela de roteamento local e, consequentemente, instalada na FIB (Forwarding Information Base). É sua primeira linha de defesa contra ataques de route leak ou injeção de rotas indesejadas.
- Export Filter (Filtro de Exportação): Aplicado às rotas enviadas ao peer. Ele decide quais rotas da sua tabela local serão anunciadas para o parceiro. É essencial para evitar vazamento de tráfego ou anúncio acidental de sub-redes internas que não são globais.
A lógica de filtragem no MikroTik é baseada em scripts simples, semelhantes à sintaxe do Mangle ou Firewall Filter, mas aplicados especificamente ao protocolo BGP. Vamos utilizar uma abordagem prática, começando pela criação de listas de controle de acesso (ACLs) e terminando na aplicação aos peers.
Passo 1: Preparação das Listas de Prefixos
A maneira mais eficiente e performática de filtrar rotas no MikroTik não é escrever um script complexo em cada filtro, mas sim utilizar IP Address Lists. Essas listas são armazenadas em RAM e permitem uma verificação rápida durante o processamento do pacote ou da rota.
Suponha que sua empresa tenha o bloco de IP 192.0.2.0/24 (TEST-NET-1, usado apenas para exemplos) e que você queira anunciar apenas esse bloco específico para seus peers BGP. Além disso, suponha que você receba uma rota default (0.0.0.0/0) de um upstream.
Crie uma lista chamada BGP-ANNOUNCE-LIST contendo apenas os prefixos que você deseja anunciar:
/ip address list add name=BGP-ANNOUNCE-LIST addresses=192.0.2.0/24 comment="Prefixos permitidos para exportação BGP"
Agora, crie uma lista chamada BGP-ACCEPTED-IMPORT contendo os prefixos que você aceita receber do peer. Em muitos casos de clientes finais (CEMs), isso pode ser apenas a rota default ou rotas específicas de um parceiro de peering.
/ip address list add name=BGP-ACCEPTED-IMPORT addresses=0.0.0.0/0 comment="Rotas permitidas para importação BGP"
Você também pode adicionar múltiplos endereços na mesma lista separando-os por vírgula, ou criar listas separadas para diferentes sub-redes. O uso de listas facilita a manutenção: basta editar a lista list e o filtro passará a aplicar as novas regras imediatamente, sem necessidade de reconfigurar os scripts.
Passo 2: Criando o Script de Exportação (Export Filter)
O script de exportação deve verificar se a rota que está sendo enviada para o peer existe na sua lista de permissão. Se existir, a rota é aceita; caso contrário, é descartada.
Acesse a configuração BGP e vá até as propriedades do seu peer ou configure um filtro global. Vamos criar o script primeiro:
/ip route filter rule add chain=export-bgp action=accept match-list=BGP-ANNOUNCE-LIST comment="Aceitar rotas da lista de anúncio"
No entanto, para maior controle e clareza, é comum usar scripts inline nas propriedades do peer. A lógica segue a seguinte estrutura:
if (is-nil $route) {
return false;
}
Mas no MikroTik RouterOS v7+, a forma mais direta e recomendada para exportação simples é utilizar o parâmetro match-list diretamente na configuração do filtro, se disponível na sua versão, ou usar um script que verifica a existência do prefixo.
Vamos utilizar o método de script inline no peer para garantir compatibilidade e clareza. Defina o script de exportação nas propriedades do seu BGP Peer:
/routing bgp template set [find default=true] export-script="
# Verifica se a rota é válida
if (is-nil \$route) {
return false;
}
# Obtém o prefixo da rota
local prefix = \$route.dst-address;
# Verifica se o prefixo está na lista de permissão
if (find [/ip address list where name=BGP-ANNOUNCE-LIST and addresses~\$prefix] != -1) {
return true;
}
# Se não estiver, rejeita
return false;
"
Atenção: A sintaxe de script pode variar ligeiramente dependendo da versão do RouterOS. Em versões recentes, a forma mais otimizada e "nativa" é usar as regras de filtro de rota diretamente na seção /routing filter, que é processada antes do BGP aplicar suas políticas complexas.
Método Recomendado (Routing Filter):
O MikroTik possui uma ferramenta poderosa chamada /routing filter. Ela permite filtrar rotas antes que elas sejam processadas pelo protocolo de roteamento. Isso é muito mais eficiente do que scripts.
/routing filter rule add chain=export-bgp action=accept match-list=BGP-ANNOUNCE-LIST
/routing filter rule add chain=export-bgp action=reject
O segundo comando rejeita tudo o que não foi aceito pelo primeiro. Isso garante que apenas as rotas na lista BGP-ANNOUNCE-LIST sejam exportadas.
Passo 3: Criando o Script de Importação (Import Filter)
O filtro de importação protege sua tabela de roteamento. Você não quer, por exemplo, aceitar um prefixo /24 aleatório de um peer desconhecido se você só espera receber a rota default.
Utilizando novamente o método /routing filter, que é o padrão ouro para performance no MikroTik:
/routing filter rule add chain=import-bgp action=accept match-list=BGP-ACCEPTED-IMPORT
/routing filter rule add chain=import-bgp action=reject
Com essa configuração, qualquer rota recebida do peer que não esteja na lista BGP-ACCEPTED-IMPORT será silenciosamente descartada. Ela não aparecerá na sua tabela de roteamento e não será propagada para outros peers (a menos que você esteja fazendo iBGP ou redistribuição, o que deve ser evitado sem filtros adequados).
Passo 4: Vinculando os Filtros ao Peer BGP
Agora que temos as regras de filtro definidas, precisamos associá-las à instância específica do seu peer BGP. No MikroTik RouterOS v7, a configuração de filtros pode ser feita diretamente nas propriedades do template ou do peer.
Vamos configurar o peer específico:
/routing bgp peer set [find default=false] import-filter=import-bgp export-filter=export-bgp
Se você estiver usando templates (recomendado para múltiplos peers com a mesma política), configure no template:
/routing bgp template set [find name=default] import-filter=import-bgp export-filter=export-bgp
Essa configuração garante que, sempre que uma nova rota for recebida ou enviada através desse peer, o roteador consultará as regras definidas no /routing filter.
Passo 5: Considerações Avançadas e Melhores Práticas
Ainda que os filtros básicos resolvam 90% dos casos de uso, existem nuances importantes para ambientes profissionais.
5.1. Preferência por Prefixos Mais Específicos (Longest Match)
Em alguns cenários, você pode querer aceitar rotas específicas (ex: /24) mas rejeitar o agregado (ex: /22) se ele vier do peer errado, ou vice-versa. Os filtros de lista não diferenciam o comprimento do prefixo (mask length) por padrão. Para isso, você precisará usar scripts mais elaborados no /routing filter ou utilizar a ferramenta /ip route filter com condições de máscara.
Exemplo de script avançado para aceitar apenas /24s e rejeitar agregações:
/routing filter rule add chain=import-bgp action=accept match-list=BGP-ACCEPTED-IMPORT mask-length=24
Este comando aceita rotas da lista BGP-ACCEPTED-IMPORT apenas se o comprimento da máscara for exatamente 24. Rotas /23 ou /25 serão ignoradas por esta regra específica (e provavelmente rejeitadas pela regra de reject subsequente).
5.2. Prevenção de Loops e Loopback Advertisements
Nunca anuncie seus endereços de loopback ou sub-redes de gerenciamento para peers públicos, a menos que seja estritamente necessário para o peering (e mesmo assim, use um bloco dedicado). Use o export-filter para excluir essas redes.
Crie uma lista com suas redes internas:
/ip address list add name=BGP-EXCLUDE-LIST addresses=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
E ajuste sua regra de exportação para rejeitar o que estiver nessa lista:
/routing filter rule add chain=export-bgp action=reject match-list=BGP-EXCLUDE-LIST
/routing filter rule add chain=export-bgp action=accept match-list=BGP-ANNOUNCE-LIST
Note a ordem das regras. A primeira regra rejeita o tráfego interno. A segunda aceita o tráfego permitido. Se você inverter a ordem, o prefixo interno pode ser aceito se estiver acidentalmente na lista de anúncio (o que não deve acontecer, mas é uma defesa em profundidade).
5.3. Monitoramento e Logs
Para fins de debug, você pode querer saber quais rotas estão sendo rejeitadas. No MikroTik, o /routing filter não gera logs verbosos por padrão para cada rota rejeitada, pois isso sobrecarregaria o CPU em links com alta velocidade de atualização de rotas.
No entanto, você pode verificar o status das adjacências e as rotas instaladas:
/routing bgp connection print where peer-name=SEU_PEER
/routing table print where gateway-status~"SEU_PEER"
Se você precisa de logs detalhados, considere usar scripts no import-script e export-script do template BGP que utilizam a função log, mas tenha consciência do impacto na performance.
Passo 6: Testando e Validando a Configuração
Após aplicar as configurações, é vital validar o comportamento. Não confie apenas na ausência de erros.
- Verifique as rotas instaladas: Use
/ip route print where dynamic=yes and bgp=yespara ver quais rotas BGP estão ativas na sua tabela. - Simule anúncios: Se você tem acesso a um segundo dispositivo ou usa um simulador, tente anunciar um prefixo que não está na lista
BGP-ANNOUNCE-LIST. Ele não deve aparecer no seu roteador. - Verifique o estado da sessão: A aplicação de filtros não derruba a sessão BGP (unless você filtrar as rotas de keepalive, o que quebraria a conexão). A sessão permanece
Up, mas a tabela de roteamento reflete apenas o que foi aceito. - Use ferramentas externas: Se possível, use ferramentas como
bgpview.ioouripestat.ripe.netpara verificar se seus prefixos estão sendo anunciados corretamente na internet global.
Conclusão
A implementação de filtros BGP no MikroTik é uma etapa obrigatória para qualquer profissional de TI que leve a segurança e a estabilidade da rede a sério. Ao utilizar IP Address Lists combinadas com o /routing filter, você obtém uma solução performática, fácil de manter e altamente escalável.
Lembre-se sempre do princípio do menor privilégio: anuncie apenas o necessário e aceite apenas o esperado. Isso minimiza a superfície de ataque, evita vazamentos de tráfego e garante que sua infraestrutura de roteamento seja previsível e robusta. Com as práticas descritas neste tutorial, você está preparado para gerenciar suas adjacências BGP com confiança e precisão técnica.