|
S E Ç Õ E S |
|
|
B U S C A |
|
|
|
D E S T A Q U E |
|
|
 |
|
|
 |
|
|
 |
|
E N Q U E T E |
|



|
- 2001
Todos os direitos reservados
|
|
|
H O W T O
|

|
|
|
|
26/05/02 19:18 - IPFW e Proxy Transparente com Squid em um servidor separado
Christopher Giese e Erwin Liesemberg
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)
caifaz_cypher@hotmail.com - chris@irapida.com.br
Erwin Liesemberg
erwin@infomark.com.br
Christopher Giese e Erwin Liesemberg
|
|