mask

O meu foco não é abordar conceitos básicos sobre máscara de rede, portanto, aos que necessitam de maiores informações, recomendo a leitura do artigo “Entendendo as máscaras de sub-rede” de Carlos E. Morimoto. É evidente que não podemos configurar uma rede usando máscaras inválidas, mas o netfilter permite que façamos isto como forma de coringa para filtragem IP.

Poucos administradores trabalham com este tipo de filtro porque é comum interpretar que máscaras inválidas não podem ser processadas. Não é bem assim. É evidente que uma rede não pode ser definida sem uma configuração de máscara adequada que contemple o endereçamento desejado. Mas, sua utilização em regras filtragem pode atuar como coringa. Infelizmente, poucos firewalls permitem isto (mesmo soluções comerciais).

Imagine que você trabalha em uma matriz, com filiais espalhadas pelo Brasil e, em uma determinada cidade (10.1.0.0/16), com vários escritórios (distantes geograficamente), as redes foram subdivididas como 10.1.x.0/24 (10.1.1.0/24, 10.1.2.0/24, 10.1.3.0/24 e assim por diante). Suponhamos que a matriz adquiriu uma solução de relógio de ponto, convencionando que os equipamentos serão configurados com endereço IP 10.1.x.110 e socket TCP/1234.

Como você configuraria o firewall, na matriz, para acessar estes equipamentos?

– A configuração mais comum é baseada em lista de acesso. Você poderia cadastrar várias regras tratando cada rede individualmente ou definir uma única regra baseada em hash de destino (com ipset, por exemplo).

iptables -A FORWARD -s 10.0.0.0/24 -d 10.1.1.110 -p tcp --dport 1234 -j ACCEPT
iptables -A FORWARD -s 10.0.0.0/24 -d 10.1.2.110 -p tcp --dport 1234 -j ACCEPT
iptables -A FORWARD -s 10.0.0.0/24 -d 10.1.3.110 -p tcp --dport 1234 -j ACCEPT
...

ou

ipset create ip_rponto hash:ip
iptables -A FORWARD -s 10.0.0.0/24 -d 10.1.0.0/16 -p tcp --dport 1234 -m set --match-set ip_rponto dst -j ACCEPT

ipset -A ip_rponto 10.1.1.110 -exist
ipset -A ip_rponto 10.1.2.110 -exist
ipset -A ip_rponto 10.1.3.110 -exist
...

O segundo exemplo é mais flexível e possibilita a construção de listas dinâmicas (via scripts). Mas, não é a forma mais eficiente para atender esta demanda de acesso.

– Manipulando a máscara de rede é possível configurar uma única regra que atenda qualquer variação em “10.1.x.110/24:1234“.

iptables -A FORWARD -s 10.0.0.0/24 -d 10.1.0.110/255.255.0.255 -p tcp -m tcp --dport 1234 -j ACCEPT

Por incrível que pareça, poucos appliances permitem este tipo de configuração. Mais um pontinho para o netfilter! 😉