O caso: no escritório do guia Como dividir a rede de uma pequena empresa em sub-redes, o Wi-Fi de visitantes ficou em 192.168.10.64/26 e vendas em 192.168.10.128/27. O técnico escreveu uma lista de acesso (ACL) para o servidor e ninguém mais entendeu o que ela faz.
Resposta curta: a ACL bloqueia os 64 endereços dos visitantes, libera os 32 endereços de vendas e libera um único computador, 192.168.10.10. Todo o resto é negado, porque toda ACL termina com uma negação que não aparece escrita.
A lista que vamos ler
Esta é a lista, no formato das ACLs numeradas do Cisco IOS:
access-list 10 deny 192.168.10.64 0.0.0.63 access-list 10 permit 192.168.10.128 0.0.0.31 access-list 10 permit 192.168.10.10 0.0.0.0
Cada linha tem três partes: a ação (permit libera, deny bloqueia), um endereço e uma máscara wildcard. A wildcard diz quais partes do endereço o roteador precisa conferir.
A regra de ouro: 0 confere, 1 tanto faz
A wildcard parece uma máscara de rede ao contrário, e é isso mesmo. A documentação da Cisco define a leitura bit a bit (Cisco):
- bit 0: o bit do IP tem de ser igual ao do endereço da linha;
- bit 1: o bit do IP pode ser qualquer coisa.
O nome ajuda a lembrar: wildcard quer dizer "curinga" em inglês. Os bits 1 são os curingas, que valem qualquer coisa; os bits 0 são as cartas que precisam ser iguais.
Para achar a wildcard de uma sub-rede, faça 255 menos cada octeto da máscara. Vendas usa /27, máscara 255.255.255.224:
A calculadora de máscara wildcard faz essa conta e mostra a faixa que a linha pega.
Linha 1: deny 192.168.10.64 0.0.0.63
Os três primeiros octetos da wildcard são 0: o IP tem de começar com 192.168.10. No último octeto, 63 em binário é 00111111: os 2 primeiros bits são conferidos e os 6 últimos ficam livres.
O resultado é a faixa de 192.168.10.64 a 192.168.10.127, 64 endereços: exatamente a sub-rede /26 dos visitantes. Qualquer pacote vindo dali é bloqueado.
Linha 2: permit 192.168.10.128 0.0.0.31
Agora o último octeto da wildcard é 00011111: 3 bits conferidos e 5 livres. Vamos testar dois IPs do escritório, comparando só os 3 primeiros bits do último octeto:
| IP | Último octeto em binário | 3 primeiros bits | Linha da ACL (100) | Casa? |
|---|---|---|---|---|
| 192.168.10.140 | 10001100 | 100 | 100 | sim |
| 192.168.10.170 | 10101010 | 101 | 100 | não |
O 192.168.10.140 é de vendas e passa. O 192.168.10.170 é uma câmera (a sub-rede das câmeras vai de 192.168.10.160 a 192.168.10.175) e não casa com esta linha. A linha 2 pega a faixa de 192.168.10.128 a 192.168.10.159, 32 endereços.
Linha 3: um único computador
A wildcard 0.0.0.0 manda conferir todos os 32 bits. Só um IP casa: o próprio 192.168.10.10, que é o computador do técnico. A Cisco aceita um atalho com o mesmo efeito: escrever host 192.168.10.10. Do outro lado, any quer dizer "qualquer endereço", o mesmo que a wildcard 255.255.255.255.
A linha que ninguém escreveu
O roteador lê a lista de cima para baixo e para na primeira linha que casa. Se nenhuma casar, o pacote é negado: toda ACL termina com uma negação implícita, que não aparece no texto (Cisco IOS). Por isso uma lista precisa ter pelo menos um permit, senão bloqueia tudo.
Testando cinco IPs do escritório contra a lista inteira:
| IP de origem | Primeira linha que casa | Resultado |
|---|---|---|
| 192.168.10.140 | linha 2 (permit) | liberado |
| 192.168.10.100 | linha 1 (deny) | bloqueado |
| 192.168.10.170 | nenhuma linha: negado no fim | bloqueado |
| 192.168.10.10 | linha 3 (permit) | liberado |
| 192.168.10.30 | nenhuma linha: negado no fim | bloqueado |
O 192.168.10.30 está no administrativo. Ele não aparece em nenhuma linha e cai na negação implícita. Se o administrativo também precisar do servidor, falta uma linha de permit para ele.
Escrevendo a linha que falta
O administrativo usa 192.168.10.0/26. A wildcard sai da mesma conta de sempre: máscara 255.255.255.192, wildcard 0.0.0.63. A lista nova fica assim:
access-list 10 deny 192.168.10.64 0.0.0.63 access-list 10 permit 192.168.10.128 0.0.0.31 access-list 10 permit 192.168.10.0 0.0.0.63 access-list 10 permit 192.168.10.10 0.0.0.0
Agora o 192.168.10.30 cai na linha 3 (permit). O computador do técnico, 192.168.10.10, também está dentro do administrativo, então a linha 4 ficou redundante: ele já é liberado pela linha 3. Ela pode ficar, sem prejuízo, ou sair para deixar a lista mais curta. Como as faixas dos visitantes e do administrativo não se cruzam, a ordem entre essas duas linhas não muda nada.
Por que a ordem importa
Imagine que alguém, para "simplificar", coloque uma linha liberando a rede toda no topo:
access-list 10 permit 192.168.10.0 0.0.0.255 access-list 10 deny 192.168.10.64 0.0.0.63
Um visitante, como 192.168.10.100, casa logo com a primeira linha (sim, ela pega os 256 endereços de 192.168.10.0 a 192.168.10.255). O roteador para ali e libera. A linha do deny nunca é lida. A regra prática: linhas mais específicas em cima, mais gerais embaixo.
O erro clássico: digitar a máscara no lugar da wildcard
Quem está acostumado com máscara de rede às vezes escreve:
access-list 10 permit 192.168.10.128 255.255.255.224
Numa ACL, o segundo número é lido como wildcard. Com 255.255.255.224, quase todos os bits viram "tanto faz" e só os 5 últimos são conferidos. A linha passa a casar com 134.217.728 endereços espalhados pela internet inteira, um a cada 32. E o pior: o próprio 192.168.10.140, que é de vendas, não casa com ela, enquanto 10.0.0.32 casa.
A calculadora de máscara wildcard do vpsa percebe quando você digita uma máscara (um número que começa com bits 1) e converte sozinha. O roteador não faz essa gentileza: na ACL, o que você digita é a wildcard.
Wildcard "esquisita": quando os bits não são contínuos
Diferente da máscara de rede, a wildcard pode misturar zeros e uns. Um exemplo clássico de estudo:
access-list 20 permit 10.1.0.0 0.0.254.255
O terceiro octeto da wildcard é 11111110: só o último bit dele é conferido, e ele tem de ser 0. Ou seja, a linha pega 10.1.x.y com o terceiro octeto par: 10.1.4.7 casa, 10.1.5.7 não casa. São 32.768 endereços. Isso não dá para escrever com uma máscara de rede comum, e a calculadora avisa quando a wildcard não é contínua.
Como ler qualquer linha em quatro passos
- Separe endereço e wildcard. O primeiro número com pontos é o endereço; o segundo, a wildcard.
- Ache os octetos 0 e 255. Octeto 0 na wildcard: o octeto do IP tem de ser igual. Octeto 255: qualquer valor serve.
- Abra em binário só o octeto do meio-termo. Se a wildcard tiver um octeto como 63 ou 31, escreva em binário e veja quantos bits ficam livres no fim.
- Conte os endereços. Cada bit 1 da wildcard dobra a quantidade: 2 elevado ao número de bits 1.
Se a wildcard for "contínua" (zeros e depois só uns), ela corresponde a um prefixo comum:
| Prefixo | Máscara | Wildcard | Endereços |
|---|---|---|---|
| /24 | 255.255.255.0 | 0.0.0.255 | 256 |
| /25 | 255.255.255.128 | 0.0.0.127 | 128 |
| /26 | 255.255.255.192 | 0.0.0.63 | 64 |
| /27 | 255.255.255.224 | 0.0.0.31 | 32 |
| /28 | 255.255.255.240 | 0.0.0.15 | 16 |
| /29 | 255.255.255.248 | 0.0.0.7 | 8 |
| /30 | 255.255.255.252 | 0.0.0.3 | 4 |
| /32 | 255.255.255.255 | 0.0.0.0 | 1 |
Perguntas frequentes
Qual a wildcard de uma rede /24?
0.0.0.255. Faça 255 menos cada octeto de 255.255.255.0. A tabela completa de máscaras está na página inicial e em máscara /24.
A wildcard 0.0.0.3 pega quantos endereços?
4: os 2 últimos bits ficam livres, e 2 × 2 = 4. É a wildcard de uma rede /30, comum em ligações entre roteadores.
Dá para testar uma linha antes de colocar no roteador?
Dá. Digite o endereço e a wildcard da linha na calculadora de máscara wildcard: ela mostra o primeiro e o último endereço que a linha pega e quantos são. Depois confira se os IPs que você quer liberar ou bloquear estão dentro dessa faixa. Para a lista inteira, faça como na tabela deste guia: pegue alguns IPs reais da rede e veja, de cima para baixo, qual é a primeira linha que casa com cada um.
O que quer dizer 0.0.0.0 255.255.255.255?
É "qualquer endereço": a wildcard toda em 1 manda ignorar todos os bits. Na Cisco, a mesma coisa pode ser escrita como any.
Onde colocar a ACL, na entrada ou na saída da interface?
Depende do que você quer filtrar e de onde vêm os pacotes. A mesma lista aplicada no lugar errado pode não filtrar o tráfego que você queria. Confira o caminho dos pacotes e a documentação do seu equipamento antes de aplicar em produção.
Outros fabricantes usam wildcard?
Cada fabricante tem a sua sintaxe. Alguns usam a máscara normal ou a barra (/27) nas regras de firewall. Este guia segue a sintaxe das ACLs numeradas do Cisco IOS.
Teste qualquer linha de ACL na calculadora de máscara wildcard, que já vem preenchida com a linha de vendas logo abaixo.
Leia também: Máscara wildcard na ACL: liberar só a faixa da TI