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

Forçando o cache do Windowsupdate com squid

Olá, essa dica é para forçar o cache dos arquivos do WindowsUpdate, certamente não é a solução correta,que seria implantar o WSUS no ambiente, mas ajuda muito quem não tem como utilizar essa solução

No arquivo de configuração do squid adicione as seguintes linhas:

Primeiro, vamos setar as políticas de reposição do nosso cache:

#politicas de reposicao
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA

Não esquecer de definir o tamanho máximo do arquivo em cache, nos meus ambientes costumo definir 300MB:

#Tamanho maximo do objeto para ser armazenado em cache
maximum_object_size 300 MB

Informar os endereços e arquivos para forçar o cache:

#Cache windowsupdate
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi|psf) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi|psf) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.download.microsoft.com/.*\.(cab|exe|dll|msi|psf) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.microsoft.com/.*\.(cab|exe|dll|msi|psf) 10080 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi|psf) 4320 100% 43200 reload-into-ims
refresh_pattern download.windowsupdate.com/.*\.(cab|exe|dll|msi|psf) 4320 100% 43200 reload-into-ims
refresh_pattern cache.pack.google.com/.*\.(cab|exe|dll|msi|psf) 4320 100% 43200 reload-into-ims
refresh_pattern http://www.update.microsoft.com/.*\.(cab|exe|dll|msi|psf) 10080 100% 43200 reload-into-ims
refresh_pattern wwww.download.windowsupdate.com/.*\.(cab|exe|dll|msi|psf) 10080 100% 43200 reload-into-ims

Efetue um reload no squid

Aqui um exemplo de estações obtendo os arquivos do cache:

1302852973.216      0 192.168.100.39 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab? – NONE/- application/octet-stre
am
1302852979.740      0 192.168.100.39 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab? – NONE/- application/octet-stre
am
1302853316.290      0 192.168.100.12 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab? – NONE/- application/octet-stre
am
1302853523.151      0 192.168.100.11 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab? – NONE/- application/octet-stre
am
1302853539.457      0 192.168.100.11 TCP_MEM_HIT/200 407 HEAD http://download.windowsupdate.com/v9/microsoftupdate/redir/muv4muredir.cab? – NONE/- application/octet-st
ream
1302853952.972      0 192.168.100.11 TCP_MEM_HIT/200 407 HEAD http://download.windowsupdate.com/v9/microsoftupdate/redir/muv4muredir.cab? – NONE/- application/octet-st
ream
1302853953.344      0 192.168.100.11 TCP_MEM_HIT/200 407 HEAD http://download.windowsupdate.com/v9/microsoftupdate/redir/muv4muredir.cab? – NONE/- application/octet-st
ream
1302853962.309      1 192.168.100.11 TCP_HIT/206 9492 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccdef
c08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302853964.399      1 192.168.100.11 TCP_HIT/206 10039 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccde
fc08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302853965.429      1 192.168.100.11 TCP_HIT/206 9485 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccdef
c08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302853966.453      2 192.168.100.11 TCP_HIT/206 21016 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccde
fc08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302853967.459      4 192.168.100.11 TCP_HIT/206 43112 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccde
fc08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302853968.477      7 192.168.100.11 TCP_HIT/206 87345 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccde
fc08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302853969.507     14 192.168.100.11 TCP_HIT/206 176664 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccd
efc08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302853970.519     21 192.168.100.11 TCP_HIT/206 260214 GET http://download.windowsupdate.com/msdownload/update/software/defu/2011/04/am_delta_patch3_fb4b9506d3c5f6ccd
efc08a67d46bfccb54f155e.exe – NONE/- application/octet-stream
1302854557.026      0 192.168.100.38 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab? – NONE/- application/octet-stre
am
1302854563.738      0 192.168.100.38 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/microsoftupdate/redir/muv4muredir.cab? – NONE/- application/octet-st
ream
1302854629.207      0 192.168.100.34 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab? – NONE/- application/octet-stre
am
1302854634.247      0 192.168.100.34 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab? – NONE/- application/octet-stre
am
1302855837.559      0 192.168.100.11 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/microsoftupdate/redir/muv4muredir.cab? – NONE/- application/octet-st
ream
1302855838.175      0 192.168.100.11 TCP_MEM_HIT/200 408 HEAD http://download.windowsupdate.com/v9/microsoftupdate/redir/muv4muredir.cab? – NONE/- application/octet-st
ream

Squid: Liberar o MSN para usuários determinados (atualizado)

Segue uma dica minha publicada no VivaoLinux:

http://www.vivaolinux.com.br/dica/Liberar-o-MSN-para-usuarios-determinados

Essa dica é para quem utiliza o Squid para controle do acesso à internet, iremos liberar o acesso ao MSN para alguns usuários da rede e bloquear para o restante.

Para garantir o funcionamento de todas as versões, inclusive o MSN 2011, na minha dica altere a linha:

acl msnmessenger url_regex -i gateway/gateway.dll? login.live.com

PARA

acl msnmessenger url_regex -i gateway/gateway.dll? live.com msn.com msads.net atdmt.com serving-sys.com hotmail.com

Liberar o MSN para usuários determinados

Personalizar mensagem de erro no Squid

Recentemente o VivaoLinux publicou essa minha dica para personalizar a mensagem do squid após aplicação de uma acl:

http://www.vivaolinux.com.br/dica/Personalizar-mensagem-de-erro-no-Squid

Segue aqui também o conteúdo:

Quando se configura muitas ACLs no Squid fica difícil identificar algum problema de bloqueio indevido. Por exemplo, um usuário não está conseguindo acessar um determinado site e apenas recebe a mensagem padrão de “Acesso negado” ou “Access Denied”, como identificar qual regra bloqueou o acesso?

Para isso se deve utilizar a diretiva “deny_info” e informar qual será a mensagem de erro que será exibida para a ACL, como no exemplo abaixo:

#Regra que bloqueia os sites incluídos no arquivo informado
acl semprebloqueados url_regex “/etc/squid/sites/semprebloqueados”
#Informa qual será a mensagem apresentada ao bloquear esse conteudo
deny_info ARQUIVO_DA_MENSAGEM semprebloqueados

Assim que você aplicar a regra (http_acess deny semprebloqueados) e um usuário acessar algum conteúdo que esteja restrito nessa regra ele verá a mensagem definida como erro.

Obs.: Crie o arquivo no diretório que o Squid utiliza para as mensagens, geralmente há um link em /etc/squid/errors. Também é possível utilizar uma URL como mensagem de erro:

deny_info http://sitedesejado semprebloqueados