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]

