Tuning no Squid

junho 5, 2008

Tuning no Squid

Continuando meus posts sobre Squid, hoje vou mostrar como deixar seu Squid mais “parrudo”. Iremos apenas modificar alguns parâmetros no arquivo de configuração que podem surtir um efeito satisfatório na navegação dos usuários. Vamos lá!

Começando pela memória utilizada pelo squid.

A contagem é bem simples. O squid utiliza 10MB de memória RAM para cada 1GB setado no parâmetro do Cache_dir, adicionado ao valor estipulado no cache_mem e por fim adicionando um valor de gordura de 20MB.

Exemplo :

Tenho um cache_dir com 10GB e um cache_mem de 512. Assim terei utilização na memória de 100MB + 512 + 20 = 632MB de utilização. Isso com uma memória de 1GB aguenta perfeitamente, pois uma maquina com o SO otimizada não utiliza mais 50MB de RAM, no fim ainda teríamos sobra para possíveis picos de utilização de outras aplicações.

Obs: Não é aconselhável ter cache_dir maior que 10GB, se necessário for ter cache maior que isso, é indicado criar partições separadas, pois com partições maiores que essa quantidade existe uma latência no retorno de informações, por conta do grande espaço a ser consultado. (Isso é um mito!!!)

Agora vamos para políticas de troca do cache:

Com o squid compilado “bonitinho” temos as seguintes políticas de troca:

lru : Squid’s original list based LRU policy

Mantém em cache os arquivos abertos recentemente.

heap GDSF : Greedy-Dual Size Frequency

Otimiza o HIT Ratio de objetos mantendo os arquivos menores e populares no cache, para obter uma melhor chance de acontecer um HIT.

heap LFUDA: Least Frequently Used with Dynamic Aging

Procura manter no cache arquivos populares, independente do tamanho otimizando assim o Byte HIT em detrimento do HIT

heap LRU : LRU policy implemented using a heap

Mantém em cache os arquivos abertos recentemente utilizando-se a política heap

Então pude concluir que:

A melhor política para memória é o GDSF, pois manipula pequenos arquivos. Muito interessante para cenários com muitos usuários.

Para guardar arquivos no disco a melhor é LFUDA, pois tem como função aumentar o bit HIT e assim economizar banda, sem falar na manipulação de grandes arquivos, que todo mundo sabe que é bem mais rápido no disco.

Temos os seguintes parâmetros:

memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA

Obs : Aumente o parâmetro maximum_object_size para ganhar vantagem do LFUDA. (100MB para ambiente com atualizações grandes na internet).

Sistema de arquivos do cache:

No parâmetro cache_dir é o local utilizado para especificar o filesystem e informar os detalhes do mesmo.

O melhor sistema de arquivos em minha opinião é o diskd, que tem uma performance de 160 requisições por segundo.

O meu cache_dir ficaria da seguinte forma:

cache_dir diskd /var/spool/squid 10000 64 256 Q1=64 Q2=72
O primero parametro depois do local é o tamanho maximo do diretorio de cache.
O Segundo parametro é o numero maximo de pastas criadas no primeiro nível do cache_dir.

O terceiro parametro é o numero maximo de pastas criadas no segundo nível do cache_dir.
O Q1 e Q2 representam :

Q1 é o numero maximo de requisições para que o proxy pare de abrir novos arquivos.
Q2 é o numero maximo de requisições para que o proxy bloquei novas requisições.

Então:

Quando Q1 > Q2 (o padrão) tem um menor tempo de resposta, por conta do bloqueio antes que o máximo seja realmente excedido . Trocando a ordem (Q1 < Q2)  ganhamos performance, pois com o processamento rápido do cache para requisições não serão facilmente bloqueadas.
Numeros de arquivos que o squid pode abrir:

O kernel, junto ao squid, tem um limite de arquivos que pode ser aberto para manipular o cache e o repasse de paginas para os clientes.

Qual o limite do seu kernel?

# cat /proc/sys/fs/file-max

Deseja Aumentar?

# sysctl -w fs.file-max=100000

No squid isso é feito no ato da compilação com o parâmetro –with-maxfd=<numero>

PS: Cuidado com o numero de arquivos, para que não tenhamos um sobrecarga no seu sistema. Eu utilizo 16384, que veio no padrão do rpm no CentOS 5. Achei um bom numero.

Fechando conexões “meio encerradas”:

O squid mantem algumas conexões que não foram encerradas pelo cliente, mas não estão em uso. Sendo assim o parametro half_closed_clients deve ser setado como off.

Obs : Todos essas dicas foram testadas na distribuição CentOS 5.1 em ambiente virtualizado com 2 GB de RAM dedicados.

Fonte


SquidClamav

janeiro 26, 2008

Primeiro você precisa ter instalado em sua maquina o Clamd (O daemon do Antivirus Clamav).

No meu caso que uso o CentOS 5.0 usei o yum para instalar.

yum install clamav

(Se não tiver em seus repositorios, pode utilizar o rpmforge – http://dag.wieers.com/rpm/FAQ.php#B).

Depois baixe o SquidClamav

Agora descompacte e instale

# tar xvzf squidclamav-3.2.tar.gz

# cd squidclamav-3.2

# ./configure && make && make install

Copie o arquivo de configuração

# cp squidclamav.conf.dist /etc/squidclamav.conf

Crie o arquivo de log

# touch /var/log/squidclamav.log

# chown squid /var/log/squidclamav.log

Agora edite o arquivo a seu gosto

# vi /etc/squidclamav.conf

O meu está assim:

# Endereço do proxy, no meu caso mesma maquina

proxy http://127.0.0.1:3128/

# Endereço do arquivo de log

logfile /var/log/squidclamav.log

# Pagina que será redirecionado ser encontrar virus, eu mesmo criei essa pagina (veja mais abaixo como criar a sua)

redirect http://127.0.0.1/squidclamav/index.html

# Valor do Debug

debug 0

# Forçar a verificação de cabeçalhos mal formados

force 1

#Mostra as estatisticas do processamento do squidclamav no log.

stat 1

# Se o Clamav estiver na mesma maquina que o squidclamav, informe a linha abaixo (verifique se o arquivo está lá mesmo).

clamd_local /tmp/clamd.socket

# Endereço do Servidor do Clamav (No meu caso, a mesma maquina).

clamd_ip 127.0.0.1

# Porta onde está funcionando o Clamav (Essa porta é default, pode ser mudada no clamav).

clamd_port 3310

# Tempo de espera para encontrar o clamav

timeout 60

# A sintaxe abort informa quais tipos de arquivos não devem ser verificados, no caso do aborti são utilizados para imagens.

abort ^.*\.gz$
abort ^.*\.bz2$
abort ^.*\.pdf$
abort ^.*\.js$
abort ^.*\.html$
abort ^.*\.css$
abort ^.*\.xml$
abort ^.*\.xsl$
abort ^.*\.js$
abort ^.*\.ico$
aborti ^.*\.gif$
aborti ^.*\.png$
aborti ^.*\.jpg$
aborti ^.*\.swf$

# no manual do squidclamav informa que serve para visualizar tipo de conteúdo, juro que não entendi, mas esse valor vem no default do arquivo de configuração.

content ^.*application\/.*$

# Quais domínios não devem ser verificados
whitelist .*google\.com
Adicione essas linhas ao seu squid.conf

# Configuracao do Squidclamav

http_access deny to_localhost
http_access allow localhost
url_rewrite_access deny localhost

# Essas três linhas acima são para evitar loop no squidclamav

url_rewrite_program /usr/local/bin/squidclamav
url_rewrite_children 15

# As duas linhas acima servem para chamar o squidclamav para verificação

Criando sua propria pagina de informe de vírus no squidclamav

# mkdir /var/www/html/squidclamav

# vi /var/www/html/squidclamav/index.html

Coloque o seguinte conteúdo nesse arquivo:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;
<HTML><HEAD><META HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=iso-8859-1″>
<TITLE>ERRO: A URL solicitada não pode ser recuperada</TITLE>
<STYLE type=”text/css”><!–BODY{background-color:#ffffff;font-family:verdana,sans-serif}PRE{font-family:sans-serif}–></STYLE>
</HEAD><BODY>
<H1>ERRO</H1>
<H2>A URL solicitada não pode ser recuperada</H2>
<HR noshade size=”1px”>
O seguinte erro foi encontrado:
<UL>
<LI>
<STRONG>
PAGINA INFECTADA
</STRONG>
<P>
Essa pagina está infectada!
</UL>
</P>

Pronto! Agora somente iniciar seu Apache, Squid e Clamd

Quem quiser testar, pode acessar esse site e tentar baixar alguns trojans (POR SUA CONTA EM RISCO), infelizmente o squidclamav não pega todos.


Lançamento do Proxy Squid 3.0 Stable

dezembro 21, 2007

A algum tempo todos que apenas usam o squid proxy sempre acessavam a pagina do Squid e contavam os segundos para o lançamento da nova versão estável do pacote, claro que alguns usuários colaboradores já estavam trabalhando em testes e desenvolvimento, mas muitos apenas esperavam o “estava por vir”.

Squid

Então és que lançam a versão 3.0 do Squid Proxy e nos perguntamos, o que mudou?

Olhem o Changelog, mas adianto algumas delas:

Melhor tratamento de arquivos maiores que 2GB (nunca percebi esse problema, mas…)

O código foi rescrito em C++

Compatibilidade com client ICAP (Possibilita a integração com Anti-vírus e outros…)

Suporte a ESI

E uma mudança na organização do arquivo de configuração (Squid.conf)

Eu ainda não efetuei testes. Irei “levantar” um amanhã mesmo!


Bloqueando downloads grandes no Squid

junho 27, 2007

Com posse de um squid configurado corretamente podemos bloquear downloads de acordo com a nossa necessidade, incluse é tratado como Acl. O que é melhor, pois assim podemos dar tratamento diferente a diferentes ips e macs*. Sendo assim vamos as explicações:

Dentro do squid.conf temos uma infinidade de parametros comentados que podem ser usados após uma rapida leitura em um pequeno resumo explicativo que o acompanha.

Dentre eles temos o reply_body_max_size

Esse parametro estipula o tamanho maximo do corpo de uma requisição a ser liberado naquela acl.

Veja os exemplos:

reply_body_max_size 10485760 allow all

Aqui é informado que será liberado apenas 10Mb para todo mundo e qualquer coisa além disso será bloqueado. A parte do bloqueando fica implicita.

Para quem achou estranho o valor de 1048576, saiba que aqui tem que ser colocado em byte e assim 10 megabytes = 10485760 bytes = 2 elevado a 20.

Então… Nesse caso aindo podemos bloquear em niveis conforme os usuários.

reply_body_max_size 3145728 allow src 10.0.0.3

reply_body_max_size 10485760 allow src 10.0.0.2

reply_body_max_size 1048576 allow all

nesse caso teremos 3 mb para o ip 10.0.0.3, 10 mb para 10.0.0.2 e apenas 1 mb para o resto dos ips.

A ORDEM NESSE CASO É IMPORTANTE 

Coloque os valores menores primeiro e então o valor global por ultimo.

Façam seus testes, mas não abusem dos usuários, pois você já foi um…