[MASOCH-L] Squid (transparente) + IPFW no FreeBSD 6

Renato Frederick frederick at dahype.org
Fri Jan 5 09:03:27 BRST 2007


> 
> Obrigado pela ajuda Renato. Vou tornar mais claro meu problema.
> Já possuo o squid configurado como proxy, podendo ser acessado quando
> configurado manualmente qualquer browser em alguma das subredes do
> firewall. Um dos howto's que utilizei foi o do www.free.bsd.com.br. No
> entanto existe algo estranho nas regras mencionadas.
> 
> ipfw add 49  allow tcp from any to any
> ipfw add 50  fwd 127.0.0.1,3128 tcp from any to any 80
> 
> Nenhum pacote entra na regra 50, pois ficam na 49. Isto foi verificado
> com o ipfw show. Tentando utilizar apenas a 50, o fwd acontece com
> alguns pacotes, mas não navega. Estranho que as vezes, algumas páginas
> abrem, como o google (não é cache, pois é possível fazer algumas
> buscas).

Certo.. no tutorial tem isto porque o padrão lá é firewall fechado.
Daí o primeiro match do pacote é contado(49) e a 2a regrada descartada.
Se você retira a 1a, ele cai na 2a(50), mas a política do firewall(65535) é
fechada, daí o pacote não sai!
Mais embaixo eu explico melhor...


> 
> O squid.conf está ajustado para ser transparente, com as diretivas
> mencionadas (por enquanto sem diskd):
> 
>    http_port 3128
>    httpd_accel_host virtual
>    httpd_accel_port 80
>    httpd_accel_with_proxy on
>    httpd_accel_uses_host_header on


Tudo certo, o diskd só melhora performance, é pra funcionar com o sem ele.
Estou considerando que você colocou uma acl dentro do squid liberando acesso
pras subredes, certo? :)
> 
> Possuo 4 interfaces, das quais 3 devem receber pacotes http(s)(etc) e
> encaminhá-los ao Squid. Estas 3 são os gateways de cada subnet.
> 
> em0 - interface ligada ao roteador (200.145.aaa.yyy/30)
> em1 - interface ligada à DMZ (200.145.aaa.bbb/26) gw
> bge0 - interface da subnet 1 (200.145.aaa.ccc/26) gw
> bge2 - interface ligada à subnet 2 (200.145.aaa.ddd/25) gw

OK

Então, tudo que vier da bge0 e bge2 com destino à internet saindo pela em0
deve ser "cacheada".


> 
> Pensei regras como:
> 
> ipfw add 50  fwd 127.0.0.1,3128 tcp from 200.145.aaa.bbb/26 to any 80
> ipfw add 51  fwd 127.0.0.1,3128 tcp from 200.145.aaa.ccc/26 to any 80
> ipfw add 52  fwd 127.0.0.1,3128 tcp from 200.145.aaa.ddd/26 to any 80
> ...

Estão certas sim, mas você está "cacheando" quando o destino for a dmz
também.
> 
> Sem sucesso.
> 
> No rc.conf possuo:
> 
> gateway_enable="YES"
> firewall_enable="YES"
> arpproxy_all="YES"
> forward_sourceroute="YES"
> accept_sourceroute="YES"
> squid_enable="YES"
> ...
> 
Tudo certo, mas você pode tirar

> arpproxy_all="YES"
> forward_sourceroute="YES"
> accept_sourceroute="YES"

Não irão influenciar no seu cenário.



> No kernel:
> 
> options         IPFIREWALL
> options         IPFIREWALL_FORWARD
> ...
> 
> O fwd não funciona :/ Os pacotes parecem não chegar no squid.
> Alguma coisa errada ou faltando?
> 


Você poderia adicionar:

options         IPFIREWALL_DEFAULT_TO_ACCEPT


O que vai deixar o firewall aberto por padrão.

Daí é so colocar as regras assim

#ipfw add fwd 127.0.0.1,3128 tcp from subnet_1 to not dmz 80
#ipfw add fwd 127.0.0.1,3128 tcp from subnet_2 to not dmz 80

Aonde subnet_1 e subnet_2 são os ederenços das subredes ligadas à bge0 e
bge2
E dmz é a subrede aonde a DMz está, ligada na em1.

Isso porque estou sugerindo que você não quer proxy transparente pra qunado
o destino for sua DMZ. Pois se alguém atualizar uma página lá, pode ficar no
cachê do squid.

Daí, com o firewall aberto por default, você não precisa da regra de allow,
apenas do forward. Quando o pacote chega na regra de forward, é jogado pro
squid e depois o pacote cai na regra 65535 que permite tudo.


Você ainda pode aglutinar as regras todas:

#ipfw add fwd 127.0.0.1,3128 tcp from { subnet_1 or subnet_2 or subnet_3 }
to not dmz 80


Certo?

abraços





More information about the masoch-l mailing list