FreeBSD PROXY TRANSPARENTE E FIREWALL EM SERVERS SEPARADOS O problema apareceu quando precisavamos configurar nosso Firewall/Nat para fazer proxy transparente, sendo que o servidor proxy estava instalado numa maquina separada. Fizemos nossas primeiras tentativas com o ipfw, tentando redirecionar tudo que tentasse passar pela porta 80 atraves do Firewall. Varias tentativas frustradas. Ate que decidimos colocar um redirecionador de porta rodando na maquina. Primeiramente tentamos o rinetd, mas na primeira hora, o Firewall, onde rodava o rinetd, ja nao aguentou o processamento, e a carga da CPU chegava a 100%. Entao, enquanto um de nos testava algumas alternativas para redirecionador, como o tcpxd e o tproxy, outro ficou inssistindo na idéia original de fazer esta configuracao usando somente o ipfw, pois acreditavamos que qualquer daemon seria mais pesado do que se usassemos somente o ipfw. E depois de muitas tentativas, conseguimos colocar no ar o famoso proxy transparente somente usando ipfw. Chega de historia, e vamos colocar a mzo na massa. Vamos especificar as mzquinas da rede como exemplo: - Interfaces do Firewall: - xl0: ip 200.195.195.3 (conectado ao roteador); - xl1: ip 200.195.196.65 (DMZ); - xl2: ip 10.10.10.1 (rede interna de IPs inválidos); - Interface do servidor Proxy: - xl0: ip 200.195.196.66 (DMZ); Regras do Firewall: 00010 skipto 0100 tcp from any to any 80 # Não fazer nat do fluxo HTTP . . 00030 divert 8668 ip from 10.0.0.0/8 to any via xl0 # Fazer nat para rede interna . . 00100 outras regras . . 05000 allow tcp from 200.195.196.66 to any 80 # Permitir a saída do proxy a internet 05010 fwd 200.195.196.66 tcp from any to any 80 # Desviar todo o fluxo HTTP para o proxy . . Agora, as regras do Servidor Proxy: 00010 allow tcp from me to any 80 # Permitir a saida do proxy z internet 00020 fwd 127.0.0.1,3128 tcp from any to any 80 # Redirecionar todo o fluxo da porta 80 para a maquina local, na porta 3128 . . A última regra que colocamos no firewall, que foi fundamental, foi a regra 00010. Explico: As requisições de HTTP sofriam um nat antes de serem direcionadas ao proxy, pois o comando fwd do ipfw so avalia o pacote no momento que este estiver para sair da mzquina. Com isso, os pacotes chegavam no proxy com o endereco de origem do nat do Firewall, e quando retornavam, o pacote nao sabia para onde voltar. Isso foi descoberto depois de muito tcpdump nas mzquinas. Entao, incluimos esta regra para que o Firewall nao faca nat para requisicoes HTTP, ignorando as regras de numero menor que 100 para o fluxo HTTP. Outro erro nosso foi tentar executar num so forward a mudança de maquina e de porta, colocando no Firewall o "ipfw add 5010 fwd 200.195.196.66,3128", mas depois descobrimos (man ipfw, vejam soh) que isso nao funciona quando redirecionamos para outras maquina. Entao decidimos somente mudar o fluxo HTTP para o proxy, e depois no proxy eh que efetuamos a mudanca de porta. Acredito que as outras regras nao sao nenhum segredo. Nao se esqueca de verificar se o proxy realmente esta funcionando, chegando o access.log do squid. Ate mais, e boa sorte a todos!!! P.S.: O seu squid deve estar configurado para rodar como proxy transparente, incluindo as seguintes clausulas no squid.conf: httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on Christopher Giese (SkyWarrior) skywarrior@bsdux.com.br Erwin Liesemberg (Mariner) erwin@infomark.com.br