segunda-feira, 9 de fevereiro de 2009

Squid - parte 06


Controle de banda


O squid oferece uam forma simples de gerenciar a banda disponível e definir o quanto cada usuário pode usar ( mantendo parte do link livre para os demais ), utilizando um recurso chamado “delay pools”. Imagine um link de 2 megabits para uma rede de 20 usuários. Se cada um puder ficar baixando o que quiser, é provável que a rede fique saturada em determinados horários, deixando a navegação lenta para todos usuários.


Pode-se evitar isso, limitando o uso da banda. É recomendado que o proxy (que combina todos os acessos via http) consuma um pouco menos do que a banda total, deixando uma parte para outros protocolos.


Um link de 2 mega (2048 kbits) corresponde a 262144 byes por segundo. Nas regras do squid, sempre usamos bytes por isso sempre temos que fazer a conversão.


Entendo a conversão


2 megabit são quantos bytes por segundo?


2048 k bits / s


2 megabit = 2048 kbits


agora em bytes


2 x 1024 = 2048 / 8 = 256 kbytes


Porque eu divido por 8?


Porque 1 byte = 8 bits


Mas eu quero em bytes...


256 kilobytes = 256 x 1024 bytes = 262144 bytes por segundo


O SQUID trabalha com bytes!!!


Como ficaria o cálculo para 3 megabits???


3 megabits = 3 x 1024 = 3072 / 8 = 384 kbytes x 1024 = 393216 bytes por segundo


Podemos então limitar a banda utilizada pelo squid em 229376



acl localhost src 127.0.0.1/255.255.255.255

acl rede_interna src 192.168.0.0/24


delay_pools 1

delay_class 1 2

delay_parameters 1 229376/229376 32768/32768

delay_access 1 allow rede_interna


http_access allow localhost

http_access allow rede_interna

http_access deny all


Eu reservei 229376 bytes por segundo para o Squid


Eu reservei 32768 bytes por segundo para outros protocolos


87% para o squid

13% para outros protocolos


A acl rede_interna está agora condicionada o três novas regras, que aplicam o uso do limite de banda. O acesso continua sendo permitido, mas agora dentro das condições especificadas na linha “delay_parameters 1 229376/229376 32768/32768”, onde vão os valores com a banda total disponível para o squid, e a banda disponível para cada usuário.


Observe que a regra só é aplicada a rede_interna atuando somente nas estações e não ao localhost (127.0.0.1) podendo assim fazer download na velocidade máxima permitida pelo link, quando acessado pelo servidor.


É possível também criar regras de exceção para determinados endereços, essas acl's não passarão pelo filtro de banda. Neste caso criamo uma acl com os endereços desejados.


acl localhost src 127.0.0.1/255.255.255.255


acl diretoria src 192.168.0.2

http_access allow diretoria


acl rede_interna src 192.168.0.0/24


delay_pools 1

delay_class 1 2

delay_parameters 1 229376/229376 32768/32768

delay_access 1 allow rede_interna


http_access allow localhost

http_access allow rede_interna

http_access deny all


Essa regras vale para as demais configurações vista acima, basta colocar a regras antes de qualquer acl,


acl diretoria src 192.168.0.2

http_access allow diretoria


Finalizando


# squid -k parse

# squid -k reconfigure


Obs: Evite usar “#/etc/init.d/squid restart” em ambientes em produção, pois ele força um reinício completo do squid, onde p proxy precisa finalizar todas as conexões abertas, finalizar todos os processos de desativar o cache, para só então ler a configuração e recarregar todos os componentes novamente. Isso faz com que o proxy fique um tempo sem responder as conexões, fazendo qom que o acesso fique fora do ar.


Obrigado pela atenção de todos, sugestões serão sempre bem vindas.


Até o próximo material


Squid - parte 05


Auditando os acessos com o SARG


O SARG Squid Analysis Report Generator é uma ferramenta desenvolvida pelo brasileiro Pedro Lineu Orso, cujo objetivo é analisar o arquivo /var/squid/log/access.log e gerar um relatório de acesso baseado no conteúdo acessado pelos usuários.


Sua instalação é bem simples, bastando apenas, no Debian, executar um aptitude:


# aptitude install sarg


Vamos observar seu arquivo de configuração. Fique a vontade e leia alguns comentários para entende as funções do SARG.


# vi /etc/squid/sarg.conf


Configure o arquivo como de acordo com sua preferencia. Aqui podemos editar as fontes, nome do arquivo gerado.

Exemplo de algumas sessoes do arquivo


# linguage exibida

language Portuguese


# titulo do relatório

title "Squid User Access Reports"


# nome do arquivo e saida

output_dir /var/www/squid


Saia do arquivo e execute o sarg:


# sarg


http://192.168.0.3/squid/


O sarg pode ser configurado no crontab para ser executado varias vezes ao dias, analisando assim o log de acessos do Squid.

Squid - parte 4

Squid como proxy transparente


Uma garantia de que os usuários realmente irão utilizar o proxy é tornando o mesmo de forma transparente, economizando assim o trabalho de configurar manualmente cada estação. Mesmo que alguem tente desativar seu proxy no navegardor ele continua sendo usado. Lembre-se que para usar o proxy transparente é necessario que voce já esteje compartilhando a Internet via NAT, o proxy interceptará todo trafego que passar pela porta 80, obrigando assim passar por suas regras de controle de acesso.


Na versão utilizada neste material a configuração no squid.conf é simples basta efetuar a alteração a linha listada abaixo.


http_port 192.168.0.3:3218


alterar para


http_port 192.168.0.3:3218 transparent


ou seja, precisamos apenas adicionar o “transparent” para que o squid passe a entender as requisições redirecionadas pelo firewall.


As seguintes linhas deveram ser inseriras em seu firewall


$vIptables -A INPUT -p tcp -i $vi_Rede --dport 3128 -j ACCEPT

$vIptables -t nat -A PREROUTING -p tcp -i $vi_Rede --dport 80 -j REDIRECT --to-port 3128

$vIptables -t nat -A PREROUTING -p tcp -i $vi_Rede --dport 8080 -j REDIRECT --to-port 3128


Onde:


1 linha - libera a porta 3128 no firewall

2 linha - direciona o trafego que chega da interface $vi_Rede na porta 80 para a porta 3128

3 linha - direciona o trafego que chega da interface $vi_Rede na porta 8080 para a porta 3128

$vIptables - variável que indica o caminho do iptables /sbin/iptables

$vi_Rede - variável que indica sua interface de rede


O restante das regras será abordado no material sobre iptables


Em caso de se usar versões anteriores à 2.6 é necessário adicionar algumas outras configurações no squid.cond, são elas:


httpd_accel_host virtual

httpd_accel_port 80

httpd_with_proxy on

httpd_accel_uses_host_header on


Em resumo, ao usar proxy transparente você vai ter a conexão compartilhada via NAT no servidor e configurará os clientes para acessar através dela, configurando assim nos clientes o servidor como gateway padrão da rede.


Uma observação muito importante é que essa configuração de proxy transparente não funciona com o sistema de autenticação incluso no squid.


Em um próximo material será abordado uma solução para que não seja necessário configuração em clientes e que se possa usufruir do sistema de autenticação.


Squid - parte 3

Criando acl's com bloqueio por horário

# vi squid.conf


acl extensoes_bloqueadas url_regex -i "/etc/squid/acl/extensoes_bloqueadas.acl"

acl horario time MTWHF 12:00-13:00

acl url_horario dstdomain "/etc/squid/acl/url_horario.acl"



http_access allow rede horario url_horario

http_access deny !rede


# squid -k parse

# squid -k reconfigure


Com exceção das acl's de trabalho todos outros acesso serão necessários sua autenticação, caso o usuário não se autentique uma mensagem de ACESSO NEGADO será enviada ao navegador.


Squid - parte 2

Filtrando acessos com Squid


Uma das obrigações de um Administrador de Sistemas em alguns ambientes é controlar o que deve ou não deve ser acessível na internet a partir da rede interna.


Criando as acl's (access control list's)


As acl's são listas de controle de acesso onde pode facilitar muito a administração do arquivo de configuração, por exemplo, imagina o administrador tendo que escrever 1000 palavras que serão bloqueadas, url's que surgem a cada dia, liberar novas url's que por ventura venham ser bloqueadas, conhecidas como falso positivo. As acl's neste caso facilitam muito na administração, pois basta criar uma arquivo, inserir o que se deseja bloquear ou liberar e indicar o mesmo no arquivo de configuração.


# mkdir acl

# cd acl

# touch palavras_bloqueadas.acl

# touch extensoes_bloqueadas.acl

# touch url_bloqueadas.acl

# touch url_liberadas.acl

# touch url_trabalho.acl

# touch url_horario.acl


Com um editor de texto de sua escolha insira as seguintes linhas


# vi squid.conf


acl rede src 192.168.0.0/24

acl url_bloqueadas dstdomain "/etc/squid/acl/url_bloqueadas.acl"

acl url_liberadas dstdomain "/etc/squid/acl/url_liberadas.acl"

acl url_trabalho dstdomain "/etc/squid/acl/url_trabalho.acl"

acl palavras_bloqueadas dstdom_regex -i "/etc/squid/acl/palavras_bloqueadas.acl"

acl extensoes_bloqueadas url_regex -i "/etc/squid/acl/extensoes_bloqueadas.acl"


dstdomain e url_regex - Quanto ao dstdomain e url_regex, o dstdomain vc bloqueia um domínio (.orkut.com), e o url_regex você bloqueia por pedaços da URL. Por exemplo se vc quer bloquear o dominio todo do terra, você pode usar o dstdomain colocando ".terra.com.br". Mas se vc quiser bloquear todos os portais que tenham CHAT, você bloqueia no URL_REGEX a palavra chat, aí ele bloqueia o chat do Terra, do Uol, da Globo, etc.. (Terra Chat, Bate-papo UOL, etc.)
Em suma, dstdomain bloqueia DOMINIOS, url_regex bloqueia PALAVRAS contidas na url toda.


dstdom_regex - O uso desta regra é um pouco mais problemático, pois bloqueará todas páginas que contenham qualquer uma das palavras listadas na URL. Esta opção sempre levará a alguns falsos positivos e por isso deve ser usada com mais cuidado.

Uma vantagem é que ela permite bloquear facilmente páginas dinâmicas, onde a palavra é passada como parâmetro da URL. Um exemplo é o Orkut, onde, depois da transferência para o Google, os domínios principais passaram a encaminhar para URLs dinâmicas dentro do domínio do Google, como em:

https://www.google.com/accounts/ServiceLogin?service=orkut&continue=http%3A%2F%2Fwww.orkut.com%2FRedirLogin.aspx%3Fmsg%3D0%26page%3Dhttp%253A%252F%252Fwww.orkut.com%252FHome.aspx&hl=pt-BR&rm=false&passive=true

Você não poderia simplesmente bloquear o domínio "google.com" usando uma regra url_regex, mas poderia muito bem usar o dstdom_regex para bloquear a palavra "orkut" e assim bloquear o acesso ao site sem bloquear o acesso a outros serviços do Google.


-i - Indica que não será respeitado o case-sensitive.


http_access deny !rede

http_access deny rede url_bloqueadas

http_access deny rede palavras_bloqueadas

http_access deny rede extensoes_bloqueadas

http_access allow rede url_trabalho

# libera tudo pra rede exceto as url_bloqueadas e palavras_bloqueadas

http_access allow rede !url_bloqueadas !palavras_bloqueadas

http_access allow rede url_liberadas

http_access allow rede

http_access deny all

icp_access allow all



Salve e saia do arquivo de configuração


É necessário preencher as acl's antes de reiniciar o squid, use um editor de texto de sua preferencia e preencha cada arquivo antes criado.


# echo “.jpeg$” > extensoes_bloqueadas.acl

# echo “.microsoft.com” > url_bloqueadas.acl

# echo “.orkut.com” > url_horario.acl

# echo “.bb.com.br” > url_trabalho.acl

# echo “.caixa.com.br” >> url_trabalho.acl

# echo “sexo” > palavras_bloqueadas.acl

# echo “sexy” >> palavras_bloqueadas.acl


A mensagem abaixo é mostrada quando é encontrado uma acl vazia.


# squid -k parse

2009/02/05 00:19:39| aclParseAclLine: WARNING: empty ACL: acl url_liberadas dstdomain "/etc/squid/acl/url_liberadas.acl"

2009/02/05 00:19:39| ACL name 'autenticados' not defined!

FATAL: Bungled squid.conf line 48: http_access allow autenticados

Squid Cache (Version 2.6.STABLE18): Terminated abnormally.


Preencha a acl e reconfigure o squid.


# squid -k parse

# squid -k reconfigure

Squid - parte 1

Neste meterial será mostrado a instalação e configuração básica do squid, bloqueio de conteúdo utilizando acl's, proxy transparente, autenticação, auditoria como sarg e controle de banda. A versão utilizada será a 2.6.STABLE18, todos os testes foram feitos no Ubuntu 8.04 kernel 2.6.24-22


O Squid é um servidor proxy que suporta HTTP, HTTPS, FTP e outros. Ele reduz a utilização da conexão e melhora os tempos de resposta fazendo cache de requisições freqüentes de páginas web numa rede de computadores.


Verificando se o pacote está instalado.


# dpkg -l | squid


O programa 'squid' não está instalado atualmente. Você pode instalá-lo digitando: apt-get install squid


Instalando o Squid


# apt-get install squid


# squid -v

Squid Cache: Version 2.6.STABLE18


Após confirmar a instalação do squid, verifique o conteúdo dos diretórios mencionados.


# ls /var/spool/squid

# ls /var/log/squid

# ls /etc/squid


O arquivo de configuração se encontra no diretório /etc/squid


# cd /etc/squid


Antes de fazer qualquer alteração faça uma copia do arquivo original


# cp squid.conf squid.conf.original


A configuração padrão do squid não permite nenhum tipo de navegação, por medidas de segurança. A primeira coisa que devemos fazer é especificar qual rede o squid deve ouvir, e também devemos especificar uma ACL do tipo origem que case com o nosso endereço IP. Vamos fazer isso.


Para que o squid ouça apenas uma rede, troque o valor do parâmetro "http_port 3128" para:


http_port 192.168.0.3:3128


Outra configuração importante é o parâmetro visible_hostname. Este parâmetro diz qual será o hostname que o squid irá utilizar para resolver seu endereço local e também é o endereço que será apresentado nas páginas de informação


visible_hostname proxy.seunome.com.br


Seu arquivo é muito extenso, após a instalação removi todos os comentários, deixando apenas a configuração padrão, facilitando assim a adaptação a nossa realidade.


# vi squid.conf


# WELCOME TO SQUID 2.6.STABLE18


acl all src 0.0.0.0/0.0.0.0

acl manager proto cache_object

acl localhost src 127.0.0.1/255.255.255.255

acl to_localhost dst 127.0.0.0/8

acl SSL_ports port 443 # https

acl SSL_ports port 563 # snews

acl SSL_ports port 873 # rsync

acl Safe_ports port 80 # http

acl Safe_ports port 21 # ftp

acl Safe_ports port 443 # https

acl Safe_ports port 70 # gopher

acl Safe_ports port 210 # wais

acl Safe_ports port 1025-65535 # unregistered ports

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 Safe_ports port 631 # cups

acl Safe_ports port 873 # rsync

acl Safe_ports port 901 # SWAT

acl purge method PURGE

acl CONNECT method CONNECT


http_access allow manager localhost

http_access deny manager

http_access allow purge localhost

http_access deny purge

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports


# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS


http_access allow rede

http_access deny all

icp_access allow all


hierarchy_stoplist cgi-bin ?


access_log /var/log/squid/access.log squid


acl QUERY urlpath_regex cgi-bin \?

cache deny QUERY


#Suggested default:

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern . 0 20% 4320


acl apache rep_header Server ^Apache

broken_vary_encoding allow apache


extension_methods REPORT MERGE MKACTIVITY CHECKOUT

hosts_file /etc/hosts


Localize a sessão ( # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS ) e insira as linhas abaixo.


acl rede src 192.168.0.0/24


http_access allow rede

http_access deny all

icp_access allow all


http_port 192.168.0.3:3128


visible_hostname ubuntu


hierarchy_stoplist cgi-bin ?


# Ajuste do cache em disco: Iremos especificar 512MB de cache, com 128

# diretórios e 256 subdiretórios:

cache_dir ufs /var/spool/squid 512 128 256

# Definindo o cache que será armazenado em memória:

cache_mem 16 MB

# Define o tamanho máximo de um arquivo que será armazenado no cache na memória # RAM, se passar disso aí (128 KB) vai parar no disco rígido.

maximum_object_size_in_memory 128 KB

# Define o tamanho máximo de um arquivo armazenado.

maximum_object_size 256 MB

# Define o tamanho mínimo do arquivo em cache.

minimum_object_size 0 KB

# Essas diretivas definem em porcentagem que se o limite de 85% do cache for

# utilizado os arquivos antigos começam descartados até chegar a 80%.

cache_swap_low 80


Agora, iremos parar o squid, verificar a sintaxe do arquivo de configuração,gerar o cache e então reiniciaremos o squid.


# invoke-rc.d squid stop

# squid -k parse

# squid -z

# invoke-rc.d squid start


Toda vez que você mudar as ACL's você deve executar os comandos:


# squid -k parse

# squid -k reconfigure


Até seu squid já estará funcionando, porém sem nenhum tipo de filtro.