Forçando o cache do Windows Update com Squid (Atualizado)

Olá ! Eu havia postado anteriormente um artigo sobre forçar o cache do Windows Update com o Squid :

(https://respirandolinux.wordpress.com/2011/04/15/forcando-o-cache-do-windowsupdate-com-squid/)

Desde então muita coisa mudou nos acessos, como as extensões dos arquivos disponibilizados, por exemplo. Na dica anterior o limite de tamanho máximo do arquivo para ser gravado em cache era aumentado de forma geral, porém agora as atualizações da Microsoft são maiores, havendo relatos de uma para o Windows 8 de 4GB.

Primeiramente, vamos criar uma regra para definir quais acessos serão tratados :

acl windowsupdate dstdomain .microsoft.com .windowsupdate.com

Obs.: É possível criar esta regra de forma mais “elegante”, relacionando aqui somente os destinos específicos que o Windows Update acessa (como download.microsoft.com, para isso monitore nos logs os acesso feitos).

Agora definimos condições específicas para estes acessos:

range_offset_limit -1 windowsupdate
quick_abort_min -1 KB windowsupdate
maximum_object_size 5 GB  windowsupdate

 

Por último, criamos as entradas para forçar o cache das atualizações:

refresh_pattern -i  microsoft.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip|psf) 4320 80%  43200 reload-into-ims

refresh_pattern -i  windowsupdate.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip|psf) 4320 80% 43200 reload-into-ims

 

Squid: Tipos de diretivas do arquivo de configuração

Olá ! Neste artigo irei falar sobre os tipos de diretivas do arquivo de configuração do Squid, que costuma gerar muitas dúvidas:

Diretivas com valor único (Single valued directives): Estas diretivas podem possuir um único valor, ou seja, devem estar presentes uma única vez em toda a
configuração, caso ocorra duplicidade, a última inserção (de cima para baixo) será aplicada.

Exemplo: logfile_rotate 7

Diretivas Booleanas (Boolean-valued directives): Estas diretivas habilitam ou desabilitam recursos, através das instruções on e off.

Exemplo: query_icmp on

Diretivas com múltiplos valores (Multi-valued directives): Estas diretivas podem possuir um ou mais valores. Podendo ser especificado todos os valores em uma única entrada (linha) ou em múltiplas entradas.

Exemplo: dns_nameservers 8.8.8.8
dns_nameservers 8.8.4.4

Diretivas com tempo como valor (Time as value directive): Estas diretivas aceitam valores com unidades de tempo, como segundos, minutos, horas,etc….

Exemplo: request_timeout 2 hours

Diretivas com tamanho de memória ou arquivo (File or memory size valued directive): Estas diretivas aceitam valores para memória ou arquivo em unidades como KB, MB ou GB.

Exemplo: cache_mem 32 MB
maximum_object_in_memory 20KB

Dica publicada no VivaoLinux

Mais uma dica minha publicada no VivaoLinux:

Quando um cliente faz alguma requisição e essa é abortada antes de sua conclusão, o Squid tenta completar essa tarefa e obter o conteúdo. Isso pode levar a banda disponível e outros recursos, como memória, processamento e disco rígido a serem desperdiçados. Para tratar esse problema, temos as seguintes diretivas:

quick_abort_min
(valor default: 16KB)

Se o conteúdo for igual ou menor do que o valor acima, o Squid continuará a baixá-lo.

quick_abort_max
(valor default: 16KB)

Se o conteúdo for igual ou maior do que o valor acima, o Squid irá interromper a requisição imediatamente.

quick_abort_pct.
(valor default: 95%)

Se o percentual do conteúdo for igual ou maior do o valor acima, o Squid continuará a baixá-lo. Se quisermos abortar todas as requisição incompletas, devemos setar o valor das duas primeiras diretivas para 0, se quisermos definir um valor ilimitado, devemos setar o valor para -1.

Os dois primeiros valores são setados em Kilobytes (KB) e o último em percentual. Se reduzirmos esses valores, iremos economizar banda e os outros recursos do equipamento, porém, se aumentarmos consequentemente podemos aumentar também nosso HIT ratio. Felizmente, podemos aplicar diferentes valores para vários conteúdos. No exemplo abaixo, vamos aumentar os valores para a acl windowsupdate :

acl windowsupdate dstdomain “/etc/squid3/sites/windowsupdate.txt”
quick_abort_min -1 windowsupdate
quick_abort_max -1 windowsupdate

Diretiva do squid 3.2: Memory cache mode

Na versão 3.2 do Squid podemos controlar quais objetos serão mantidos no cache em memória RAM, com a diretiva maximum_object_size_in_memory já podiamos definir o tamanho máximo de um objeto para ser mantido em memória. Agora,com a diretiva memory_cache_mode, podemos definir qual critério o Squid deve utilizar para ocupar a memória ram disponível.

Os três metodos são estes:

always : O modo always irá manter todos os objetos recentemente acessados que podem ser alocados em memória. É o metodo padrão.

disk: Quando setamos o modo disk, somente os objetos que foram guardados em cache, e receberam um HIT, serão mantidos na memória RAM. Desta forma se presume que estes objetos sejam acessados constantemente após o cache.

network: Somente os objetos que foram obtidos através de outros servidores da rede serão mantidos na memória.

Considero o metodo disk muito interessante, pois com o mecanismo always muitos objetos pequenos são mantidos na memória sem serem acessados frequentemente.

Referências:

http://www.squid-cache.org/Doc/config/memory_cache_mode/

Squid Proxy Server 3.1, editora Packt Publishing

Convertendo o timestamp de logs do Squid

Por padrão, o squid apresenta em seus logs o horário seguindo a “marca temporal UNIX”, para maiores informações veja a explicação em: http://pt.wikipedia.org/wiki/Era_Unix

Certamente não é interpretável por humanos, portanto para facilitar a visualização podemos converter o horário para o “padrão normal”, já tive experiência onde os logs de acesso à internet precisaram ser auditados por um perito, e o mesmo solicitou que os  horários fossem convertidos antes de serem enviados:

perl -p -e ‘s/^([0-9]*)/”[“.localtime($1).”]”/e’ < access.log > access.log.normal

Nesse exemplo, access.log é nosso arquivo de origem e access.log.normal o arquivo com o horário normal.

Referência: Squid Proxy Server 3.1, editora Packt Publishing

Aproveitando o post, você costuma manter os arquivos com os logs do acesso à internet? É muito importante definir uma política de rotatividade dos logs,   estou efetuando uma pesquisa sobre se é obrigatorio, e qual seria o prazo mínimo para se manter os registros, assim que concluir irei compartilhar aqui assim como a configuração a ser feita no squid.

Controlar tamanho máximo do download com squid: reply_body_max_size

As vezes é útil limitar o tamanho máximo  dos arquivos para download,  restringindo desta forma a obtenção de músicas, filmes, jogos, etc…., além de gerenciar melhor a banda disponível.

Para isso podemos utilizar a diretiva reply_body_max_size no Squid, a sintaxe é essa:

reply_body_max_size SIZE UNITS ACLNAME

O “reply_size” é calculado através do header http CONTENT-LENGTH, que é informado pelo servidor.

Vamos utilizar esse exemplo (utilizei os grupos no meu tutorial de controle de acesso à internet como referência) :

acl acessocontrolado src “/etc/squid3/estacoes/acessocontrolado.txt”
acl acessototal src “/etc/squid3/estacoes/acessototal.txt”
acl semacesso src “/etc/squid3/estacoes/semacesso.txt”

Acima temos três grupos: acessocontrolado, acessototal e semacesso, vamos agora definir o tamanho máximo do download para cada grupo:

reply_body_max_size 10 MB semacesso !servicos
reply_body_max_size 20MB acessocontrolado !servicos
reply_body_max_size 50 MB acessototal  !servicos

Definimos 10MB para o grupo sem acesso, 20MB para o grupo e 50mb para o grupo acessototal, observe que utilizamos o “!servicos” após a regra, esta acl podemos definir sites onde esse limite não será aplicado, por exemplo windoswupdate, atualização de anti-vírus,etc…

Referência na documentação do squid: http://www.squid-cache.org/Doc/config/reply_body_max_size/

Forçando o cache de atualizações do skype e google chrome com squid

Em um ambiente onde as estações utilizam o Skype e o navegador Chrome observei que o consumo de banda estava muito alto, analisando os logs identifiquei que os “vilões do momento” eram os aplicativos Skype e Chrome efetuando atualizações. Aproveitando, porque será que o Chrome baixa tantas vezes por dia a mesma versão do navegador??? Acho que o correto seria identificar a versão atual e baixar os patches, os arquivos ficariam muito menores.

No squid.conf adicione as seguintes linhas:

#cache skype
refresh_pattern download.skype.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims

#cache chrome
refresh_pattern cache.pack.google.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims

Aqui o exemplo do log do squid mostrando que o chrome obteve o arquivo a partir do cache:

1302858818.024      0 192.168.100.33 TCP_MEM_HIT/302 523 GET http://cache.pack.google.com/edgedl/chrome/install/648.205/chrome_installer.exe – NONE/- text/html