domingo, 8 de junho de 2014

Configurando um proxy Squid com autenticação. Parte I (bate papo)

Olá, estou aqui de novo e novamente, como diria o "Grande Pensador Biro Biro".
Como prometido, estou aqui para adicionar mais recursos ao nosso proxy Squid. O qual, post anterior fizemos somente uma configuração básica. Lembra ?
Antes de colocarmos a mão na massa gostaria de primeiro bater um pequeno papo sobre Squid proxy no geral. Mas se você só precisa de um how-to de como configurar um proxy com autenticação simples, pode ir direto a parte II deste post.
Um servidor proxy  ou intermediário em uma tradução bem literal. 
 Seu papel é  atender e intermediar  as requisições de  acesso  a um serviço determinado feitas pelo usuário. 
 No caso do Squid estamos falando de um web Proxy ou Proxy de caching  HTTP 
Ai você me pergunta caching HTTP o  que é?  E pra que serve isto?
Vamos por partes para a explicação ficar mais simples, vamos imaginar o seguinte cenário na empresa em que você trabalha. Os usuários acessam para fazer o seu trabalho basicamente os mesmo sites. Esta empresa tem a banda limitadíssima  (Coisa que quase não acontece rsrs). 
Não seria ótimo se a cada acesso que os usuários fizessem eles não tivessem que baixar a pagina inteira da web ? Economizando sua banda e tornando o processo mais rápido. Ai eu digo seus problemas acabaram !! Um  proxy de cache HTTP como o Squid  funciona criando um cache das paginas acessadas pelos usuário
vale ressaltar que esse cache é somente dos arquivos estáticos das páginas.  
Como funciona esse processo? Cada vez que o cliente requisita uma pagina web  que recebe primeiro essa requisição, e é feita ao servidor proxy o qual recebe a pagina e a repassa imediatamente ao usuário e  copia ela em seu cache. 
Em uma segunda requisição feita desta pagina o servidor em vez de solicita-la novamente  ao servidor web o proxy desta vez envia ao cliente a cópia que ele tem salva em seu cache em um processo muito mais rápido e que ainda economiza banda de conexão. 
Como vou saber se o proxy não esta me exibindo uma pagina desatualizada ?
Pode ficar tranquilo, o squid possui um mecanismo de verificação para saber se a pagina solicitada foi atualizada.
Quais mecanismos são estes ?
Bom calma, Pequeno Gafanhoto isto é assunto para outro POST.
Agora que sabemos o que é um proxy cache HTTP, vamos descobrir o que o proxy Squid pode fazer:
Vamos agora responder umas perguntinhas sobre o Squid faz:
O Squid faz cache de paginas web ?
O Squid pode controlar o horário que os usuário acessam a internet na minha rede?
O Squid trabalha com autenticação em base de dados Ldap, mysql, SQL 
Funciona como proxy transparente ?
Podemos criar filtros baseados em regex para bloquear/liberar  paginas com o squid ?
Podemos controlar o acesso dos usuário via MAC ADDRESS ou IP
O Squid tem suporte a HTTPS, FTP e mais algum outro protocolo ?
Você vai ensinar a fazer tudo isso ? Resposta:  Sim, Sim  amigão. A resposta para todas as peguntas acima é Sim.
O Squid pode controlar as paginas que os meus usuários podem acessar através de listas  de URLs?
Resposta: Sim  mas, a experiência me traz algumas ressalvas quanto a isso. As quais explicarei em outra oportunidade.
O Squid pode gerar relatórios completos das paginas acessadas pelos usuários
Resposta: Sim em conjunto com o Squidguard, e outras ferramentas, ou através de seus logs de acesso.
 O squid Faz pipoca, pizza ou café ?  Infelizmente não. 

Vamos deixar de blá, blá blá e ir direto explicando como o Squid funciona. O funcionamento do Squid é Baseado em ACLs.
Acsess
Control
Lists

Traduzindo Listas de controle de acessos

Vou falar brevemente apenas sobre os tipos mais utilizados de ACLs no Squid
Primeiro vamos definir ACL como regras para a navegação através de um proxy.
Segundo vamos mostra abaixo como as ACLs são declaradas das seguintes formas:

acl nome_da_acl  tipo _da_acl parâmetro

acl nome_da_acl tipo_da_acl "/caminho_completo/arquivo/de_configuração_da_acl"



Vale lembrar que por default as acls são case sensitive caso precise de acls case insensitives use a opção -i
na ACL como no exemplo abaixo:

acl sua_acl_case_insensitive  tipo _da_acl -i parâmetro

Os principais tipos de ACLs do squid:

src  ACL tipo origem(source)  ela trabalha com um ip ou um range de ips os quais os clientes chegam no proxy

Exemplos:

ACL tratando de um ip específico usando este IP como parâmetro

acl DESKTOP_DIRETOR src 192.168.101.30/255.255.255.255

acl tratando de um range de ips usando estes IPs como parâmetro

acl DIRETORIA src 192.168.101.2 192.168.101.3 192.168.101.4

acl tratando de um range de ips  obtendo estes ips de um arquivo de texto

acl DIRETORIA src "/etc/squid3/ips.txt"

Vale ressaltar que quando usamos o conteúdo só arquivo de texto que vai servir como parâmetros para nossa ACL de ter somente um parâmetro por linha neste caso nosso parâmetro são os números de IPs

dstdomain   ACL tipo destino de domínio como o nome diz trata do domínio de  destino da navegação.

Exemplos:

acl SITE_A_LIBERAR_OU_BLOQUEAR dst 200.200.201.202/255.255.255.255

acl SITE_A_LIBERAR_OU_BLOQUEAR dstdomain .diaadialinux.blogspot.com.br

acl SITE_A_LIBERAR_OU_BLOQUEAR dstdomain "/etc/squid3/bloqueados.txt"

Com as ACLs acima estamos bloqueando domínios específicos a primeira um único IP, a segunda  a partir do domínio. e a terceira a partir de  uma lista de domínios ou IPs em um arquivos txt organizados um por linha. Aqui cabe uma ressalva muito importante, usar o Squid  para bloqueio baseado em listas, afeta diretamente o desempenho. Não recomendo usar este recurso. Ele é recomendado apenas para bloquear ou liberar  no máximo, uns poucos sites. Pois, se essa lista crescer muito o Squid em vez de acelerar sua conexão vai acabar deixando ela mais lenta, consumindo muitos recursos da sua maquina. Para bloqueio baseado em listas eu recomendo usar em conjunto com o squid,   ferramentas como o Dansguardian ou Squidguard. Ferramentas essas que se integram muito com squid facilitam a vida para ele  e para quem administra ele.  ;>) e tem opções de controle de acesso muito melhores e mais flexiveis.

proxy_auth     ACL referente a autenticação no proxy utilizada para tratar o login com o qual o cliente se autentica no proxy. Para ela funcionar a configuração de autenticação deve estar habilitada.
Uma pratica muito comum e combinar esta ACL com outras. Sim amigão, as acls podem ser combinadas,
conforme a sua criatividade. Tornando o Squid uma ferramenta muito poderosas e flexível.

Exemplo: 

acl DIRETOR proxy_auth ribeiro

time  ACL do tipo tempo ela bloquei ou libera acessos baseados em um período de tempo.
As ACLs deste tipo gerenciam o tempo baseadas em dia da semana e hora.

Exemplo:

acl ALMOCO time MTWHFA 12:00-13:00 

A ACL acima trata o horário de almoço de segunda a sábado  das 12:00 as 13:00.
Os dia da semana são escritos de forma abreviada abaixo segue a relação completa de dias da semana:

Abreviação Dia da semana 
S                  Domingo         
M                 Segunda-feira 
T                  Terça-feira      
W                Quarta-feira   
H                 Quinta-feira      
F                  Sexta-feira       
A                 Sábado            

Vale lembrar que uma ACL pode ter dois valores deny ou allow ou seja negar ou liberar.
isto será  explicado mas a frente.

url_regex  este tipo de ACL trabalha com expressões regulares encontradas nas URLs. É possível fazer expressões regulares que tratem de varias URLs porém aqui devemos ter muito cuidado.

Exemplo:

acl extensao_bloqueada url_regex -i \.mp3$

Neste exemplo tratamos URLs que fornecem download de arquivos mp3.
Vale lembrar que nem  todos os link de download de mp3 contém a expressão mp3  no seu conteúdo mas a maioria contém o que já ajuda a bloquear downloads de vários sites.

port este tipo de ACL trata de uma porta  específica de destino da navegação.
muito boa para bloquear sites de jogos  os quais você conhece a porta de conexão.

Exemplo:

acl SITE_5656 port 5656

arp   este tipo de acl faz bloqueio ou liberação de acesso baseado em MAC ADDRESS. Devemos ter muita atenção com esta ACL.  Pois para ela funcionar, o squid deve ser compilado de forma especial com o opção  –enable-arp-acl  (veremos compilação e usos desta ACL mas a frente)

acl MAC_LIBERADO arp “/etc/squid3/squid/mac_liberado.txt”

Valores e regras  para ACLs 

Acima eu disse que as ACLs tinha dois valores e que poderiam ser combinadas. Bom vamos explicar isso com calma agora que vou explicar um pouco destas feitiçarias.
Vou começar pelos valores das ACLs. Uma ACL é composta de duas linha na verdade eu até agora só mostrei uma uma ACL completa tem o seguinte formato:

Definição de nome e parâmetros da ACL:

acl DESKTOP_DIRETOR src 192.168.101.30/255.255.255.255

Definição de Valor da acl:

http_access allow DESKTOP_DIRETOR

Os valores das ACLs podem ser allow liberar ou deny negar por exemplo na linha acima estamos liberando o acesso da estação de trabalho do diretor a internet através do valor ALLOW.  Se mudarmos o valor da linha acima para deny  Bloqueamos o acesso da estação do Diretor a internet e ninguém  quer isso certo?
Agora vamos aprender a combinar as ACLs. Você já ouviu aquele ditado que "Uma andorinha só não faz verão"?  Assim são as ACLs apesar de dar para fazer muita coisa com as ACLs separadamente. Em conjunto fazem um trabalho muito melhor.

Veremos um exemplo disto abaixo:

acl BLOQUEADOS dstdomain "/etc/squid3/bloqueados.txt"

acl ALMOCO time MTWHFA 12:00-13:00 

http_access allow BLOQUEADOS ALMOCO

 As linhas acima, desbloqueiam temporariamente o acesso a lista de sites bloqueados. Somente no horário de almoço das 12:00 as 13:00 horas.
É muito importante lembrar que as ACLs são executadas na ordem em que são escritas de cima para baixo.
ou seja, se você bloquear alguma coisa com uma ACLS acima ela será bloqueada. Mesmo que tenha uma ACL abaixo liberando. Uma vez que algo foi liberado ele não será bloqueado abaixo ou vice e versa.
Por essa razão devemos ter muita atenção.

Espero que este bate papo tenha esclarecido algumas duvidas sobre a estrutura básica do Squid.
Qualquer duvida comentário ou erro que tenha  encontrado aqui é só comentar aqui que eu ficarei muito agradecido espero ter ajudado.

Referências:

Squid manpage.
Arquivo de configuração  do Squid.

Nenhum comentário:

Postar um comentário

Olá, agradeço por seu comentário aqui é o seu espaço para publicar
suas críticas desde já agradeço.