Firewall invisível com Proxy ARP
Como construir um firewall com apenas um endereço IP na mesma sub-rede, desaparecer com esta dos demais computadores e não criar um possível obstáculo no caso de uma falha do mesmo.
Introdução
Suponha que você tenha um pequeno escritório onde possua algumas máquinas com sistemas operacionais Linux ou Windows, que estão conectadas diretamente a Internet usando um modem xDSL/Cabo ou roteador.
Você quer permitir o acesso a um servidor Web em sua rede e também quer implementar algumas regras de filtragem que você já aprendeu anteriormente.
Suponha que seu ISP lhe concedeu um range de endereços para conexão a Internet seguindo como exemplo o range: x.y.z.32/27.
Você tem uma máquina em sua rede usando o endereço x.y.z.35 como seu gateway que permite que cada máquina dentro da rede interna envie e receba pacotes para, e da Internet. Agora você tem duas opções para construir seu firewall.
1. Implementar um Firewall entre sua rede e a Internet (um lugar típico para instalar um Firewall).
2. Usar um Firewall transparente baseado em Proxy-ARP.
Neste caso, o Firewall é um potencial obstáculo para a conexão a Internet de sua empresa. Se a máquina Firewall falhar, você pode simplesmente desconectar o cabo conectado à interface eth0 no Firewall e reconectá-la ao Switch ou Hub que está no lado da interface eth1. Feito isto, você terá restaurado novamente a sua conexão com a Internet. Talvez você tenha que atualizar a sua cache ARP ou reiniciar algumas de suas máquinas, mas mesmo assim você terá restabelecido sua conexão em um prazo curto de tempo.
O objetivo deste tipo de configuração é o seguinte: a máquina Firewall Linux possui duas interfaces: eth0 e eth1, que estão configuradas com o mesmo endereço IP (x.y.z.50) e tem o ip_forwarding e proxy_arp habilitados. Isto permite que ela veja todos os pacotes que são originados ou que são recebidos para sua LAN da Internet através de seu provedor. Entretanto, você pode usar a filtragem de pacotes normalmente, assim como um sistema de firewall tradicional.
A única vantagem deste tipo de firewall é que se o mesmo se tornar inoperante (fora de operação), ou outras razões não abordadas aqui, você pode facilmente recuperar sua conectividade em um prazo muito menor de tempo do que teria em uma configuração tradicional de firewall, onde você deve possuir um endereço IP privado para o lado da sua LAN, outro endereço público para o lado da WAN e todos seus hosts apontando para o firewall como seu gateway para a Internet.
Nesta configuração abordada os hosts nem mesmo sabem que seus pacotes estão sendo scaneados e roteados por este tipo de man-in-the-middle de firewall baseado em proxy-arp.
Bom, assumindo que você tem um sistema Linux instalado com duas placas de rede (eth0, eth1), nas próximas páginas descreverei como construir este firewall.
Você quer permitir o acesso a um servidor Web em sua rede e também quer implementar algumas regras de filtragem que você já aprendeu anteriormente.
Suponha que seu ISP lhe concedeu um range de endereços para conexão a Internet seguindo como exemplo o range: x.y.z.32/27.
Você tem uma máquina em sua rede usando o endereço x.y.z.35 como seu gateway que permite que cada máquina dentro da rede interna envie e receba pacotes para, e da Internet. Agora você tem duas opções para construir seu firewall.
1. Implementar um Firewall entre sua rede e a Internet (um lugar típico para instalar um Firewall).
2. Usar um Firewall transparente baseado em Proxy-ARP.
Neste caso, o Firewall é um potencial obstáculo para a conexão a Internet de sua empresa. Se a máquina Firewall falhar, você pode simplesmente desconectar o cabo conectado à interface eth0 no Firewall e reconectá-la ao Switch ou Hub que está no lado da interface eth1. Feito isto, você terá restaurado novamente a sua conexão com a Internet. Talvez você tenha que atualizar a sua cache ARP ou reiniciar algumas de suas máquinas, mas mesmo assim você terá restabelecido sua conexão em um prazo curto de tempo.
O objetivo deste tipo de configuração é o seguinte: a máquina Firewall Linux possui duas interfaces: eth0 e eth1, que estão configuradas com o mesmo endereço IP (x.y.z.50) e tem o ip_forwarding e proxy_arp habilitados. Isto permite que ela veja todos os pacotes que são originados ou que são recebidos para sua LAN da Internet através de seu provedor. Entretanto, você pode usar a filtragem de pacotes normalmente, assim como um sistema de firewall tradicional.
A única vantagem deste tipo de firewall é que se o mesmo se tornar inoperante (fora de operação), ou outras razões não abordadas aqui, você pode facilmente recuperar sua conectividade em um prazo muito menor de tempo do que teria em uma configuração tradicional de firewall, onde você deve possuir um endereço IP privado para o lado da sua LAN, outro endereço público para o lado da WAN e todos seus hosts apontando para o firewall como seu gateway para a Internet.
Nesta configuração abordada os hosts nem mesmo sabem que seus pacotes estão sendo scaneados e roteados por este tipo de man-in-the-middle de firewall baseado em proxy-arp.
Bom, assumindo que você tem um sistema Linux instalado com duas placas de rede (eth0, eth1), nas próximas páginas descreverei como construir este firewall.
Porque não fazer firewall transparente pela técnica de Bridge? É ainda mais transparente pois eth0 e eth1 nem precisam ter ips (terão para possibilitar o login e gerenciamento).
Assim tu coloca ela entre a rede e o verdadeiro roteador, ou entre a saída do roteador e a Internet.
Ela atua como se fosse um Switch (bridge), apenas repassando quadros de um dominio de colisão para outro (nem o MAC address de suas placas sao expostos), porém podem filtrar (sempre com DROP, pois se ela não tiver IP como responderia com um ICMP?)
Pra mim isto sim é firewall transparente.
Pacote bridge-utils:
ifconfig eth0 down
ifconfig eth1 up
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig eth0 0.0.0.0
ifconfig eth1 0.0.0.0
# Opcionalemente, colocando um IP para poder se logar
#ifconfig br0 10.1.0.4
#route add default gw 10.1.0.1
Depois, segue o mesmo de sempre no iptables, com regras na chain FORWARD da tabela filter!