On Sun, Mar 25, 2012 at 1:30 AM, Mrk3004 <[email protected]> wrote:
> Uso squid transparente junto com dhcp para repassar a rede aqui em
> casa, porém sempre tive problemas com páginas seguras.

<ofttopic>
 "Seguras", entre aspas mesmo, porque qualquer governo e sabe-se lá
quantas pessoas não podem fazer man in the middle (MITM) com todos
estes CAs porcos que têm por ai. Vide fiascos da Diginotar e os cados
do Comodo hacker. ;)
</offtopic>


> Hoje eu passo
> todas as paginas https por fora do squid, já que não tenho muita
> necessidade de bloquear esse tipo de página.

O Squid é excelente pra cache, nem tanto pra controle de acesso. Se o
que tu quer fazer é controlar o acesso, tem soluções muito mais
eficientes, algumas que trabalham junto com o Squid, inclusive:
DansGuardian, SquidGuard, Privoxy, firewall, zonas "nulas" no DNS (ex.
aponta tudo no dominio .xxx.com para 127.0.0.1) e etc.



> Porém isso não é uma
> pratica muito boa, digamos, e eu gostaria de aprender como fazer.

Se é boa ou não é subjetivo. Eu não bloqueio site algum. Temos um
contrato com diretrizes bem claras do que pode e o que não pode ser
acessado; se violar o contrato é punido, simples assim.



> Atualmente a configuração está assim:
>
> modem (conexão direta, ip dinâmico) (eth0) -> servidor com 4 placas de
> rede -> dhcp -> squid transparente na porta 3128 -> iptables
> redireciona porta 80 para 3128  em eth1, eth2 e eth3.
>
> Os ips de eth1, eth2 e eth3 são fixos ao lado do server e atribuidos
> por dhcp ao lado do cliente.
>
> Assim tudo funciona bem, o problema acontece se eu tentar redirecionar
> a porta 443 a 3128 (squid). Assim recebo essa mensagem em todas as
> paginas https:
>
> O SSL recebeu um registro que excedia o comprimento máximo permitido.
> (Código do erro: ssl_error_rx_record_too_long)
>
> No log de acesso do squid:
>
> 1332648898.409      0 189.100.203.72 TCP_DENIED/400 1464 NONE NONE://
> - NONE/- text/html
>
> No log de cache do squid:
>
> 2012/03/25 01:15:50| parseHttpRequest: Unsupported method '   '
> 2012/03/25 01:15:50| clientTryParseRequest: FD 18
> (189.100.203.72:37190) Invalid Request

Acho que um dos desenvolvedores do Squid é mais convincente que eu
para responder isto:
http://www.squid-cache.org/mail-archive/squid-users/200907/0073.html


> Eu já li algo sobre inserir um certificado genérico no squid, ou algo
> assim, mas não entendo muito dessa parte, e ao tentar não tive bons
> resultados, agradeço se alguém poder ajudar com isso.

A coisa é bem mais complicada do que isso. Primeiro, tu tem que
entender como que os certificados são usados (ex. a relação da "chave
pública" com a "chave privada") e qual o papel dos Certificate
Authorirty (CA) neste processo.

Depois que tu entender bem isso, tu vai perceber que o que tu quer
fazer requer que os teus clientes terão de confiar no teu CA, o que
manda pro espaço essa idéia de que proxy transparente é a melhor coisa
do mundo -- até onde eu sei, não existe forma automágica de deployar
certificados em ambientes heterogêneos. Não tem nem como fazer isso de
uma forma simples numa rede que só tenha Windows e use Firefox, que
usa um mecanismo próprio para gerenciar os seus certificados.

Assim que tu resolver o problema de ter o teu CA nos clientes e
continuar com o proxy transparente, tu tem que fazer a intercepção
propriamente dita. Isto é fácil, mas tem um porém: o Squid que vai
passar a validar os certificados digitais e com isso vários sites que
usam certificados "self-signed" vão simplesmente parar de funcionar, a
menos que tu libere todos os certificados, mas ai por que de se usar
https?

Se ainda assim tu acha que vale a pena, tu pode começar lendo o
próprio wiki do Squid:

http://wiki.squid-cache.org/Features/HTTPS
http://wiki.squid-cache.org/Features/SslBump


> A minha configuração do squid é bem simples, segue abaixo:
>
> # SquidConf 3 GIT
> # Autor: Vinycius Maia <[email protected]>
> # Versão: 0.5
>
> # -------------- CONFIG -------------- #
> http_port 3128 transparent
> visible_hostname viny-server
>
> detect_broken_pconn on
> pipeline_prefetch on
> negative_ttl 0
>
> cache_mem 300 MB
Eu acho que tu não sabe o que cache_mem faz. Não tem porque usar um
valor como 300MB num ambiente tão pequeno.

Nos meus maiores sites (como proxy reverso) eu não uso mais que 16MB.
Na verdade, na maioria eu *diminuo* para 2 ou 4MB e consigo taxas de
transferencia muito superiores, cerca de 120 mil requests/segundo
quando pega tudo do cache.

Mais uma vez, o wiki do Squid ajuda:
http://wiki.squid-cache.org/SquidFaq/SquidMemory?highlight=%28cache_mem%29#I_set_cache_mem_to_XX.2C_but_the_process_grows_beyond_that.21

> maximum_object_size_in_memory 500 KB
> maximum_object_size 3 MB
> minimum_object_size 0 KB
>
> cache_dir ufs /etc/squid/cache 1000 16 256
Só 1GB de cache? Em casa eu uso 8 e vive rotacionando... Qual a
porcentagem de hits que tu tem com 1GB?

E por que ufs quando tem soluções assincronas que escalam melhor com
todos estes processadores cheios de cores/threads de hoje?


> coredump_dir /etc/squid/cache/squid
>
> refresh_pattern ^ftp:           1440    20%     10080
> refresh_pattern ^gopher:        1440    0%      1440
> refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
> refresh_pattern .               0       20%     4320
>
> cache_mgr [email protected]
> cache_effective_user squid
>
> cache_log /etc/squid/logs/cache.log
> access_log /etc/squid/logs/acesso.log
> cache_store_log /etc/squid/logs/store.log
>
> # ------------------------------------ #
>
> # -------------- REGRAS -------------- #
>
> acl all src all
> acl Safe_ports port 443    # https
> acl Safe_ports port 80          # http
> #acl Safe_ports port 21         # ftp
> #acl Safe_ports port 70         # gopher
> #acl Safe_ports port 210                # wais
> acl Safe_ports port 1025-65535  # msn
> #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 purge method PURGE
> acl CONNECT method CONNECT
> http_access deny !Safe_ports
> http_access deny CONNECT !Safe_ports
> http_access allow purge
>
> acl WhiteList url_regex -i "/etc/squid/WhiteListWeb.list"
> acl BlackList dstdomain "/etc/squid/BlackListMini.list"
> acl BlackContents url_regex -i "/etc/squid/BlackContentsWeb.list"
> http_access allow WhiteList
> http_access deny BlackList
> http_access deny BlackContents
Tenta fazer o deny antes, é mais rápido. Talvez tu precise fazer uma
negação para conseguir isso:

http_access deny BlackList !WhilteList
http_access deny BlackListContents !WhiteList
http_access allow WhiteList

A lógica é basicamente a seguinte: o número de requisições que são
negadas é, num ambiente não dracônico, muito inferior ao de
requisições aceitas. Se tu negar a requisição logo no  começo, o Squid
passa por menos regras, logo, o Squid responde mais rapidamente.

> http_access allow all
>
> # ----- Extra Redirects ----- #
> http_reply_access allow all
> always_direct allow all
> icp_access allow all
> forwarded_for off
>
>
> Lembrando que essa rede é caseira, não tem necessidade de grande
> segurança, só precisa funcionar. Não posso retirar a transparência do
> squid pois eu tenho um pequeno servidor http que executa algumas
> funções em php e bash e repassa o resultado as outras maquinas.
> Retirar a transparência do squid quebraria todo esse sistema que levei
> semanas para concluir.

Tu pode fazer com que o proxy seja transparente apenas para o servidor
HTTP ou, melhor ainda, começar a usar $http_proxy no teu shell script
e definir os contextos de conexões no PHP de tal forma que tu use um
proxy.

Tem tamém o problema de publicar o CA que eu falei antes...

-- 
GUS-BR - Grupo de Usuários de Slackware Brasil
http://www.slackwarebrasil.org/
http://groups.google.com/group/slack-users-br

Antes de perguntar:
http://www.istf.com.br/perguntas/

Para sair da lista envie um e-mail para:
[email protected]

Responder a