[FUG-BR] [OT?] Firewall em uma máquina, Squid em outra (transparente) - QUASE MALUCO! =)

Welkson Renny de Medeiros welkson em focusautomacao.com.br
Quarta Junho 16 09:30:29 BRT 2010


Welkson Renny de Medeiros escreveu:
> Welkson Renny de Medeiros escreveu:
>   
>> Alessandro de Souza Rocha escreveu:
>>   
>>     
>>> da uma olhada.
>>> http://www.free.bsd.com.br/noticia.php3?CAD=1&NOT=159
>>>   
>>>     
>>>       
>> Alessandro,
>>
>> Como expliquei pelo Talk... eu fiz testes com essa solução e outras que encontrei...
>>
>> Funciona tudo perfeito.. navego normalmente e vejo o proxy funcionando (tail -f acccess.log)... o problema é que no access.log aparece o IP do GATEWAY e não do terminal que está usando a net.
>>
>> Já procurei MUITA coisa na net... já li a documentação do squid, testei  (x_forward_for, entre outras)... sem sucesso... fiz testes com squid 2.6 e 2.7... decidi então compilar o mais atual (3.1)... tive que adaptar algumas coisas on squid.conf, mas consegui levantar o serviço... mas o mesmo erro ocorre (compilei com pf+transp, x_fowardfor, etc).
>>
>> Acredito ser uma boa prática instalar o proxy em uma máquina DIFERENTE do gateway... alguém deve ter ambiente parecido funcionando... se postar o squid.conf e o trecho do pf.conf que faz o rdr já me ajuda muito.
>>
>> Help-me!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>>   
>>     
>
> Encontrei alguma coisa, mas pra Linux... abaixo estou postando as regras 
> (adaptei de acordo com o pouco que conheço de IPGambiTables =)
> http://www.faqs.org/docs/Linux-mini/TransparentProxy.html#s6
>
> ################### pf.conf do GATEWAY (192.168.0.254) 
> ##########################
> # NAT usado no proxy transparente
> nat on $int_if from $int_if:network to 192.168.0.250 port { 80,8080 } -> 
> $int_if
>
> # redireciona todo tráfego que chegar na porta 80 para o servidor proxy 
> (192.168.0.250)
> rdr inet proto tcp from !192.168.0.250 to any port www  -> 192.168.0.250 
> port 8080
>
> # libera a saída do pacote (só para desencargo, pois em outra regra eu 
> libero toda a saída)
> pass in quick on $int_if proto tcp from any to 192.168.0.250 port { 80, 
> 8080 }keep state
> ################### FIM do pf.conf do GATEWAY (192.168.0.254) 
> ###################
>
>
>
> ############### squid.conf na máquina do PROXY (192.168.0.250 <---- 
> OUTRA máquina) ##############
>
> [root em services:/usr/local/etc/squid] # sed '/^$/d' squid.conf
> http_port 8080 transparent
> log_fqdn off
> hierarchy_stoplist cgi-bin ?
> acl QUERY urlpath_regex cgi-bin \?
> cache_dir diskd /usr/local/squid/cache 15000 30 256
> cache_access_log /usr/local/squid/logs/access.log
> cache_store_log /usr/local/squid/logs/store.log
> cache_log /usr/local/squid/logs/cache.log
> emulate_httpd_log on
> acl manager proto cache_object
> acl webserver src 192.168.0.254/32
> acl localhost src 127.0.0.1/32 192.168.0.254/32
> acl to_localhost dst 127.0.0.0/8
> acl SSL_ports port 443 563
> acl Safe_ports port 80          # http
> acl Safe_ports port 81          # http (merda do dominio sistemas)
> acl Safe_ports port 4976        # banco real
> acl Safe_ports port 21          # ftp
> acl Safe_ports port 443 563     # https, snews
> acl Safe_ports port 70          # gopher
> acl Safe_ports port 210         # wais
> acl Safe_ports port 1025-65535  # unregistered ports
> acl Safe_ports port 280         # http-mgmt
> acl Safe_ports port 488         # gss-http
> acl Safe_ports port 591         # filemaker
> acl Safe_ports port 777         # multiling http
> acl CONNECT method CONNECT
> # acesso administrativo (usar squidclient)
> acl purge method PURGE
> http_access deny purge !localhost
> always_direct allow all
> http_access allow Safe_ports
> http_access allow SSL_ports
> http_access allow manager webserver
> http_access deny manager
> http_access deny !Safe_ports
> http_access deny CONNECT !SSL_ports
> http_access deny all
> http_reply_access allow all
> icp_access allow all
>
> # Usuario sob o qual ira rodar o Squid.
> cache_effective_user squid
>
> # Grupo sob o qual ira rodar o Squid.
> cache_effective_group squid
> cache_mgr webmaster em focusautomacao.com.br
> visible_hostname services.focusautomacao.com.br
>
> # necessario para proxy transparente
> forwarded_for on                                                 <---- 
> FIZ VÁRIOS TESTES com esse parâmetro
> #follow_x_forwarded_for allow webserver
> #acl_uses_indirect_client
> #log_uses_indirect_client on
> #follow_x_forwarded_for deny all
> log_icp_queries off
> buffered_logs on
> strip_query_terms off
> logfile_rotate 4
> coredump_dir none
> client_persistent_connections off
> server_persistent_connections off
> ie_refresh on
>
> ############### FIM do squid.conf na máquina do PROXY (192.168.0.250) 
> ##########################
>
>
> O proxy funciona normalmente... o problema é que no log (access.log) 
> mostra o ip do GATEWAY (192.168.0.250), e não do usuário que está 
> tentando acessar algum site.
>
> Se alguém tiver ambiente parecido por favor, poste o pf.conf e squid.conf
>
> Vou continuar aqui lendo alguns livros e materiais da internet... 
> qualquer novidade eu comunico.
>   

Pessoal,

Uma dúvida "teórica"... quando faço o NAT na porta 80 ele altera o 
cabeçalho do ip, mudando o ip de origem (source)?

Vou tentar explicar melhor:

Tenho uma máquina com Windows XP (192.168.0.200), tento acessar um site 
na porta 80... o gateway intercepta (192.168.0.254).... faz o NAT e 
depois o RDR para a máquina 192.168.0.250 (proxy)... no cabeçalho do IP 
que chega na 250 vai está 0.200 ou 0.254 como origem/source?

Talvez seja esse meu problema... eu acho que o NAT faz exatamente isso 
(vou tentar investigar com tcpdump)... teria como fazer esse RDR sem 
fazer NAT? (redirecionar tráfego da porta 80 sem alterar nada/ip origem 
no pacote?)

-- 
Welkson Renny de Medeiros
Desenvolvimento / Gerência de Redes
Focus Automação Comercial
FreeBSD Community Member


Mais detalhes sobre a lista de discussão freebsd