Guia prático
Wildcard em ACL: liberar uma faixa de filiais em uma linha
O servidor do sistema de gestão precisa aceitar conexões de todas as filiais e de mais nada. São dezesseis redes /24. Dá para escrever dezesseis linhas na ACL ou uma só, se a conta da wildcard fechar. Mostramos a conta, o caso em que ela não fecha e o truque da wildcard não contígua.
O caso: uma empresa tem 16 filiais, de 10.20.0.0/24 a 10.20.15.0/24 (faixa privada da RFC 1918). O servidor do sistema de gestão, 10.0.50.10, deve aceitar HTTPS só dessas redes. A ACL fica no roteador do data center, na sintaxe do Cisco IOS.
Resposta curta: as 16 redes formam um bloco alinhado, 10.20.0.0/20. A wildcard é o complemento da máscara 255.255.240.0: 0.0.15.255. Uma linha basta: access-list 110 permit tcp 10.20.0.0 0.0.15.255 host 10.0.50.10 eq 443. Se fossem só 12 filiais, a mesma ideia exigiria duas linhas, uma para 10.20.0.0/21 e outra para 10.20.8.0/22.
1. O que é a wildcard
A wildcard, que a documentação da Cisco também chama de máscara inversa, diz quais bits do endereço a ACL deve comparar. Bit 0 na wildcard: o bit do endereço precisa ser igual. Bit 1: tanto faz.
Para um bloco contíguo, a wildcard é a máscara de sub-rede "virada do avesso". A Cisco descreve a conta assim: 255.255.255.255 menos a máscara.
Para um /24: 255.255.255.255 − 255.255.255.0 = 0.0.0.255. Para o /20 do caso: 255.255.255.255 − 255.255.240.0 = 0.0.15.255.
Duas palavras da sintaxe economizam digitação. host X é o mesmo que X 0.0.0.0, um endereço exato. any é o mesmo que 0.0.0.0 255.255.255.255, qualquer endereço.
2. Por que as 16 filiais cabem em uma linha
A linha única só funciona se as filiais formarem um bloco alinhado. Veja o terceiro octeto da primeira e da última rede em binário:
| Rede | Terceiro octeto | Binário |
|---|---|---|
| 10.20.0.0/24 | 0 | 00000000 |
| 10.20.15.0/24 | 15 | 00001111 |
Os quatro primeiros bits são iguais (0000) e os quatro últimos variam de 0000 a 1111, cobrindo todas as combinações. Somando aos 16 bits de "10.20", são 20 bits fixos: o bloco é 10.20.0.0/20, com 4.096 endereços, exatamente as 16 filiais.
A calculadora wildcard faz essa conversão nos dois sentidos e mostra a linha de ACL pronta. Informe 10.20.0.0 e 0.0.15.255 (ou /20) e confira o primeiro e o último endereço: 10.20.0.0 e 10.20.15.255.
3. A ACL completa
Uma ACL estendida para o caso, com uma linha de bloqueio explícita no fim:
access-list 110 permit tcp 10.20.0.0 0.0.15.255 host 10.0.50.10 eq 443 access-list 110 deny ip any host 10.0.50.10
Duas regras da Cisco explicam a ordem. A lista é lida de cima para baixo, e a primeira linha que casa com o pacote decide; as seguintes não são consultadas. E toda ACL termina com uma negação implícita: o que não foi permitido é bloqueado. A documentação recomenda, mesmo assim, uma linha de negação explícita, que aparece nos contadores e deixa a intenção clara para quem lê.
Pela mesma lógica, nunca comece uma lista com permit ip any any: todo o tráfego casaria na primeira linha e nada abaixo dela seria avaliado.
4. Quando a faixa não fecha: 12 filiais
Agora suponha que a empresa tenha 12 filiais, de 10.20.0.0/24 a 10.20.11.0/24. A tentação é usar o mesmo /20 e a mesma wildcard. Mas o resumo que cobre essas 12 redes é 10.20.0.0/20, com 4.096 endereços, e 3.584 deles não são de filial nenhuma: as redes 10.20.12.0 a 10.20.15.255. Se essas redes forem usadas por outra área amanhã, a ACL vai liberar quem não devia.
A saída é decompor a faixa em blocos alinhados, como faz a faixa de IP para CIDR:
| Bloco | Faixa | Wildcard | Linha da ACL |
|---|---|---|---|
| 10.20.0.0/21 | 10.20.0.0 – 10.20.7.255 | 0.0.7.255 | permit tcp 10.20.0.0 0.0.7.255 host 10.0.50.10 eq 443 |
| 10.20.8.0/22 | 10.20.8.0 – 10.20.11.255 | 0.0.3.255 | permit tcp 10.20.8.0 0.0.3.255 host 10.0.50.10 eq 443 |
Duas linhas, nenhum endereço a mais. A regra geral: uma linha de ACL com wildcard contígua só cobre blocos de tamanho potência de 2, começando em um múltiplo do próprio tamanho.
5. A wildcard não contígua
A wildcard não precisa ser contígua. Os bits 1 podem estar em qualquer posição, e isso permite casar padrões que nenhum prefixo descreve.
Só o gateway de cada filial. Se o gateway de todas as filiais é o endereço .1, a wildcard 0.0.15.0 libera os 16 gateways com uma linha: permit ip 10.20.0.1 0.0.15.0 .... O terceiro octeto pode variar nos quatro bits finais (0 a 15); o quarto octeto precisa ser exatamente 1. Teste: 10.20.7.1 casa; 10.20.7.2 não casa.
Só as filiais de número par. A wildcard 0.0.14.255 deixa livre todos os bits do terceiro octeto menos o último. Ela casa com 8 redes /24 (0, 2, 4… 14), 2.048 endereços. Em binário, 14 é 00001110: o bit final é 0, e é esse bit que fica fixo.
A calculadora aceita wildcards não contíguas e avisa quando a máscara não corresponde a nenhum prefixo. O primeiro e o último endereço que ela mostra são o menor e o maior que casam, mas nem tudo que está entre eles casa.
Conferindo um endereço à mão
A conta que o roteador faz é sempre a mesma: zera, no endereço do pacote e no endereço da linha, os bits em que a wildcard tem 1, e compara o que sobra. Se for igual, a linha casa.
Pegue o pacote vindo de 10.20.9.77 e a linha do caso, 10.20.0.0 0.0.15.255. Os bits livres são os quatro finais do terceiro octeto e o quarto octeto inteiro. Zerando esses bits, 10.20.9.77 vira 10.20.0.0, igual à base: casa. Já 10.20.17.5 vira 10.20.16.0, diferente de 10.20.0.0: não casa, porque 17 já está fora das 16 filiais.
Na versão com 12 filiais, o mesmo 10.20.9.77 não casa com a primeira linha (10.20.0.0/21) e casa com a segunda (10.20.8.0/22). Como a lista para na primeira linha que casa, a ordem das duas não muda o resultado aqui, porque os blocos não se sobrepõem.
6. Por que evitar a wildcard não contígua no dia a dia
O truque é elegante, mas tem custos.
- Leitura. Quem revisa a ACL entende 0.0.15.255 de cabeça; 0.0.15.0 exige parar e converter para binário. Regra que ninguém entende é regra que ninguém revisa.
- Dependência do plano. O exemplo do gateway só funciona porque todas as filiais usam .1. Uma filial fora do padrão fica de fora sem aviso.
- Portabilidade. Nem todo equipamento aceita wildcard; vários trabalham com objetos de rede em CIDR ou em faixa. Uma regra não contígua pode não ter tradução direta. Confira na documentação do equipamento antes de depender dela.
Use wildcard não contígua quando ela simplificar de verdade e documente o motivo ao lado da linha.
7. Quando chega a filial 17
O plano cresce, e a próxima filial recebe 10.20.16.0/24. Ela fica fora do bloco 10.20.0.0/20: o terceiro octeto, 16, é 00010000 em binário, e o quarto bit da esquerda já não é 0. Há duas saídas:
| Saída | Linhas | Endereços liberados | A mais que as filiais |
|---|---|---|---|
| Acrescentar uma linha para 10.20.16.0 0.0.0.255 | 2 | 4.352 | 0 |
| Trocar por 10.20.0.0/19 | 1 | 8.192 | 3.840 |
A segunda saída só é segura se o bloco maior estiver reservado para filiais no plano de endereçamento. Se estiver, reserve-o desde já e escreva a ACL pensando nele; se não, a linha extra é o caminho certo.
8. A mesma wildcard em outros lugares
A wildcard não é exclusiva de ACL. No OSPF do Cisco IOS, o comando network usa o mesmo formato: network 10.20.0.0 0.0.15.255 area 0 ativa o protocolo nas interfaces cujos endereços casam com o bloco. A calculadora wildcard mostra essa linha junto com a da ACL. A conta é a mesma; o efeito é outro.
9. Roteiro para escrever a linha
- Liste as redes que precisam de acesso.
- Verifique se formam um bloco alinhado; se sim, calcule a wildcard do bloco.
- Se não formarem, decomponha a faixa em blocos e escreva uma linha por bloco.
- Coloque as linhas mais específicas e mais usadas no topo.
- Feche com uma negação explícita e confira os contadores depois de aplicar.
Perguntas frequentes
Posso escrever a máscara de sub-rede no lugar da wildcard?
No Cisco IOS, não: a ACL espera a wildcard. Escrever 255.255.240.0 no lugar de 0.0.15.255 muda completamente o que a linha casa. A calculadora wildcard reconhece qual das duas você digitou e converte.
Quantos endereços uma wildcard casa?
2 elevado ao número de bits 1 da wildcard. 0.0.15.255 tem 12 bits 1 e casa 4.096 endereços; 0.0.15.0 tem 4 bits 1 e casa 16. A calculadora mostra esse número na linha "Endereços que batem".
Por que a primeira linha da ACL não deve ser a mais genérica?
Porque a lista para na primeira linha que casa. Se uma linha ampla, como a das 16 filiais, vier antes de uma exceção mais específica (bloquear uma filial, por exemplo), a exceção nunca será avaliada. Coloque as exceções primeiro e as regras amplas depois.
Qual a wildcard de um /31 ou de um /32?
Um /31 tem wildcard 0.0.0.1; um /32, 0.0.0.0, que é o mesmo que usar host.
E para liberar as 16 filiais em um firewall que só aceita CIDR?
Use o bloco 10.20.0.0/20. Para as 12 filiais, os dois blocos 10.20.0.0/21 e 10.20.8.0/22. O guia faixa de IP para CIDR na prática mostra essa decomposição para faixas de fornecedores.
O que acontece com o tráfego que não casa com nenhuma linha?
É bloqueado pela negação implícita no fim da lista. Se você quiser liberar outros acessos ao servidor, eles precisam de linhas próprias acima da negação explícita.
wildcardFaça a conta com os seus númerosMáscara ou prefixo para wildcard, com as linhas de ACL e OSPF prontas.Fontes e referências
- Cisco — Configure IP Access ListsWildcard (máscara inversa) como 255.255.255.255 menos a máscara; palavras host e any; negação implícita no fim da lista
- Cisco IOS 12.4 — Creating an IP Access List and Applying It to an InterfaceAvaliação de cima para baixo e parada na primeira linha que casa
- RFC 4632 — Classless Inter-domain Routing (CIDR)Prefixos alinhados em potência de 2, base da wildcard contígua
- RFC 1918 — Address Allocation for Private InternetsFaixa privada 10.0.0.0/8 usada no exemplo
Conferimos cada afirmação técnica nas fontes acima. Os números foram calculados com as mesmas fórmulas das ferramentas do site. Veja a metodologia e a lista completa de fontes.