Escolar Documentos
Profissional Documentos
Cultura Documentos
Este artigo visa mostrar algumas das formas de uso do servidor proxy Squid, assim como as configuraes para os casos apresentados. No proposta analisarmos todas as possveis implementaes com uso do Squid, fato este impossvel de ser realizado, dado a grande flexibilidade que este software oferece, mas sim mostrar as maneiras mais comuns de sua utilizao e configurao.
1 - Objetivos
O objetivo principal deste documento proporcionar o entendimento do funcionamento do servidor proxy Squid e como so realizadas suas configuraes. No ser abordado aqui o processo de instalao, tendo em vista tratar-se de tarefa muito simples, j que estamos falando de um software muito popular e presente em praticamente todas as distribuies Linux atuais, portanto podendo ser instalado atravs de pacotes da prpria distribuio com muita facilidade. Mesmo que seja feita a escolha de instalao atravs do cdigo fonte, provavelmente no ser necessrio muito mais do que os comandos ./configure, make all e make install, j velhos conhecidos de todos. Falaremos do uso das ACL's, recurso que faz com que o Squid seja to flexvel e eficiente, apresentado alguns exemplos mais usados e possveis erros que podem ser cometidos na construo das regras de acesso. Ser abordado tambm a utilizao de softwares geradores de relatrios baseados na anlise dos logs gerados pelo Squid, dado ao fato deste tema ser muito importante para a abordagem do trabalho, j que tais softwares so fundamentais para o processo de administrao do servidor proxy. Esta no uma abordagem definitiva, que visa esgotar o tema ou apresentar todas as possibilidades de uso e configuraes, o que queremos apresentar formas de implementar um servidor proxy eficiente de maneira fcil, rpida e com qualidade. O sistema operacional Linux ser a base para o desenvolvimento deste trabalho, onde ser utilizada a distribuio nacional Conectiva, verso 9, com kernel 2.4.21-28872cl, e a verso 2.5.125760cl do Squid.
2 - O que o Squid?
Atualmente o acesso internet tem se tornado praticamente obrigatrio, principalmente no ambiente corporativo, tendo em vista o dinamismo que as novas tecnologias da comunicao podem trazer para este ambiente. Entretanto surgem vrios problemas quanto a definio de como implementar esse acesso de computadores das redes corporativas internet de forma segura e eficiente. No conjunto de medidas a serem tomadas para implementar esse acesso temos a utilizao de servidores proxy. Um servidor proxy funciona como um intermedirio no contato dos computadores da rede local com outras mquinas fora dela, como por exemplo na internet. Ele recebe as requisies de acesso externo dos hosts locais e as repassa a outros computadores fora da rede local, retornando as respostas aos computadores que as solicitaram. O Squid um dos servidores proxy mais utilizados no mundo, dado a sua robustez, segurana e recursos que oferece. Apesar dos poucos protocolos que ele consegue trabalhar, no caso apenas o HTTP, HTTPS, FTP e gopher, ainda uma alternativa muito interessante, j que estes so os principais protocolos da internet, e alm do mais, muitos dos aplicativos que usam outros protocolos tem capacidade de usar o Squid atravs de um dos protocolos suportados por ele. O proxy Squid funciona ouvindo requisies numa determinada porta padro, ou numa outra porta que pode ser configurada pelo administrador da rede.
O Squid um software livre, o que implica dizer que ele est licenciado nos termos da GPL (General Public License), com isso temos uma garantia a mais (ao nosso ver, sem sombras de dvidas muito mais seguro que ter o software nas mo de uma nica corporao que pode fechar as portas de uma hora para outra, como j vimos por vrias vezes) de que nenhuma corporao vai descontinuar o projeto e deixar os seus usurios sem rumo, j que a prpria comunidade de usurios que contribui com o desenvolvimento e avanos deste software.
4 - Proxy transparente
Cada software que precise acessar a internet e esteja atraz de um proxy, precisa ter configuradas as informaes de endereamento e porta onde o proxy da rede esteja ``ouvindo''. Entretanto, usurios mais ``espertos'' podem querer fugir do controle do proxy e utilizar uma outra maneira de acesso internet, sem que este possa ser auditado e controlado. Caso as configuraes relativas ao proxy sejam retiradas do browser ou outro utilitrio pelo usurio, por exemplo, ele poder se utilizar de um outro meio para se conectar internet sem nenhum controle, colocando em risco a segurana da rede. Uma das maneiras mais eficientes de implementao de um proxy, levando-se em considerao a necessidade de controle, com uso da tcnica denominada proxy transparente. Isto feito com a utilizao de uma regra no firewall que efetua o redirecionamento das requisies destinadas internet ao servidor proxy. Esse redirecionamento faz com que no mais precisem ser configurados os softwares com as informaes do proxy, pois o firewall se encarrega de redirecionar as requisies redes externas para o Squid, independente da vontade ou configurao do usurio. Alm disso realizar a configurao dos parmetros do servidor proxy
numa meia dzia de mquinas pode ser fcil e rapidamente feito, mas isto no interessante quando temos uma rede com uma quantidade muito grande de mquinas a serem configuradas. Para implementarmos esse redirecionamento precisamos apenas inserir no Iptables, que o software para criao de firewall em Linux, a seguinte regra: Se o redirecionamento for para uma mquina diferente #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.16.10:3128 Se o redirecionamento for para a mesma mquina #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 Estas regras dizem ao firewall que todas a requisies que entrarem pela interface eth0 (interface usada neste caso apenas como exemplo), no nosso caso esta a interface onde est ligada nossa rede interna, destinadas a porta 80, que a porta padro do servio WWW, e que o protocolo seja o TCP, devem ser redirecionadas para a porta 3128, que onde nosso servidor proxy est ouvindo. No primeiro caso como o Squid no est instalado na mesma mquina onde est o firewall este redirecionamento feito para a mquina com IP 192.168.16.10. Feito o redirecionamento o Squid assume o controle da conexo e aplica suas regras de forma que sejam liberados os acessos apenas de acordo com as regras nele definidas. Uma observao importante que este recurso de proxy transparente no funciona com a autenticao de usurio, portanto cabe uma anlise de qual dos dois ser mais interessante para cada caso, j que deveremos fazer uma escolha entre eles. Alm do mais, alguns navegadores podem no funcionar corretamente com o uso deste recurso, ento sua adoo deve ser avaliada antes da implementao, visto que alguns usurios podero ter problemas caso estejam usando estes navegadores que no atendem aos padres. Outro detalhe importante com relao ao fato de que mais barato em termos de ciclos de CPU e uso da memria ter os navegadores configurados explicitamente para usar um proxy, do que redirecionar o trfego como vimos. tambm mais barato em termos de ciclos de CPU e uso da memria bloquear a porta 80 ao invs de redirecionar o trfego. O bloqueio tem menos overhead que a redireo, e pode forar as pessoas a utilizar um proxy. O uso do proxy transparente deve sempre que possvel ser evitado e usado apenas se no houver uma outra maneira mais prtica e eficiente de se fazer o que se pretende com o uso deste recurso.
5 - Autenticao no Squid
Por padro, o controle de acesso feito por mquina, entretanto o Squid fornece mecanismos para ser efetuado um controle por usurio, dessa forma cada usurio que deseje ter acesso internet dever antes de tudo se autenticar no proxy, para que seu acesso seja liberado. A autenticao poder ser feita de vrias maneiras, como por exemplo, no formato NCSA (geralmente associado ao utilitrio htpasswd, o mesmo utilizado pelo Apache), ou ainda atravs de um servidor LDAP, um PDC Windows NT/2000, ou mdulos PAM, etc. A maneira mais comum de realizar autenticao com o uso do formato NCSA que usa o mdulo ncsa_auth. Para este trabalho nossa implementao foi baseada neste mtodo. O cadastro dos usurios para acesso ao Squid feito com o uso do utilitrio htpasswd, conforme podemos ver no exemplo abaixo, lembrando apenas que a opo -c deve ser usada apenas caso o arquivo de senhas ainda no exista, pois ela instrui o utilitrio a cri-lo. # htpasswd -c arquivo_de_senhas usuario Para que o Squid fornea suporte a autenticao devemos habilitar estas configuraes no arquivo squid.conf atravs da TAG auth_param. nela que so realizadas as mudanas necessrias para que o esquema de autenticao comece a funcionar, j que por padro ele no vem habilitado. No
prprio arquivo tem comentrios que mostram como isso deve ser feito para cada tipo escolhido. Como vamos utilizar o mtodo bsico, nossa configurao ficou assim. auth_param auth_param auth_param auth_param basic basic basic basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd children 5 realm Servidor Proxy Squid ARL credentialsttl 2 hours
A linha auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd especifica qual mdulo ser usado, no caso /usr/lib/squid/ncsa_auth onde se encontra o arquivo com os usurios e senhas gerado conforme comentado acima. Em auth_param basic children 5 estamos definindo quantos processos filhos do mdulo de autenticao podero existir, esse nmero o padro do Squid, entretanto em redes maiores pode haver a necessidade de um incremento deste, devido ao nmero provavelmente maior de usurios que precisaro se autenticar simultaneamente. Em auth_param basic realm Servidor Proxy Squid ARL configura-se a mensagem que aparecer na tela onde so fornecidas as informaes do usurio para autenticao. Esta opo interessante para que possamos personalizar este mensagem da tela de login do nosso servidor. E por ltimo auth_param basic credentialsttl 2 hours especifica a validade de uma autenticao bem sucedida. Com estas configuraes j temos nosso proxy habilitado a trabalhar com autenticao de usurios, bastando para isso que sejam feitas ACL's para isso e definidas as regras de acesso.
cache_dir ufs /var/cache/squid 300 64 64 - Esta TAG determina onde e como ser feito o cache, neste caso o diretrio de cache /var/cache/squid, com o tamanho de 300 MB, tendo 64 diretrios com 64 outros diretrios em cada um deles; auth_param auth_param auth_param auth_param basic basic basic basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd children 5 realm Servidor Proxy ARL credentialsttl 2 hours
- TAG's referentes ao processo de autenticao. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 - Estas opes so o padro do Squid e configuram como sero tratados os tempos de vida dos objetos no cache, isto , o Squid faz uso destes valores para verificar se os objetos armazenados so os mais recentes ou h a necessidade de atualiz-los. No h necessidade de mudana nestes valores; acl acl acl acl acl acl acl acl acl acl acl acl acl acl acl all src 0.0.0.0/0.0.0.0 manager proto cache_object localhost src 127.0.0.1/255.255.255.255 to_localhost dst 127.0.0.0/8 SSL_ports port 443 563 acl Safe_ports port 80 # http Safe_ports port 21 # ftp Safe_ports port 443 563 # https, snews Safe_ports port 70 # gopher Safe_ports port 210 # wais Safe_ports port 1025-65535 # unregistered ports Safe_ports port 280 # http-mgmt Safe_ports port 488 # gss-http Safe_ports port 591 # filemaker Safe_ports port 777 # multiling http CONNECT method CONNECT
- Estas ACL's fazem parte da configurao padro do Squid e o mnimo recomendvel para seu uso, no sendo necessria nenhuma alterao nas mesmas; acl acl acl acl acl MINHA_REDE src 192.168.16.0/24 USUARIOS proxy_auth REQUIRED PORNO url_regex -i ``/etc/squid/porn'' PORNO1 url_regex -i ``/etc/squid/porn1'' NAO_PORNO url_regex -i ``/etc/squid/noporn''
- Seo do arquivo com ACL's definidas pelo usurio, alm das anteriormente comentadas que j vm configuradas por padro.. http_access http_access http_access http_access allow manager localhost deny manager deny !Safe_ports deny CONNECT !SSL_ports
- Definio de regras de acesso referentes as ACL's da parte da configurao padro do Squid, tambm no necessria nenhuma alterao, portanto apenas acrescente as suas prprias regras a estas;
http_access allow USUARIOS NAO_PORNO MINHA_REDE http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE - Estas regras de acesso foram feitas com o uso das ACL's criadas anteriormente na rea designada ao usurio, como podemos observar elas foram feitas pelo prprio usurio;
http_access deny all - Esta regra de acesso recomendada para uso como ltima regra da lista define o acesso ao proxy. Ela diz ao Squid que se nenhuma das regras anteriores for aplicada o acesso ser ento negado, portanto seu uso vai impedir acessos indesejados ao proxy. muito importante que esta seja a ltima regra da sua lista, pois o Squid tem uma regra implcita que inverte a ltima regra da lista caso nehuma delas seja aplicada. Isto pode trazer consequncias indesejveis principalmente se for usado negao ou liberao explcita como por exemplo http_access deny PORNO ou http_access allow NAO_PORNO; icp_access allow all - Permite o acesso a porta icp de acordo com a configurao feita na ACL all, que no nosso caso representa qualquer origem. Est porta usada para troca de informaes entre servidores proxy; cache_mgr email_administrador
- Opo para configurao do e-mail do administrador do proxy que vai aparecer nas mensagens de erro. Isto importante para que os usurios tenham informaes de como interagir com o responsvel pelo servidor em caso de problemas, como por exemplo um acesso bloqueado de forma errada; visible_hostname www.meu_seite.com.br - Mostra o nome do servidor configurado nas mensagens de erro, caso contrrio o Squid vai tentar descobrir o nome. Deve ser registrado o FQDN do servidor e no apenas o hostname; error_directory /usr/share/squid/errors/Portuguese - Com o uso dessa opo podemos determinar em qual linguagem sero apresentadas as mensagens de erro. Seu uso recomendado, pois por padro as mensagens so em ingls. Em /usr/share/squid/errors/ existem vrios subdiretrios com as linguagens suportadas pelo Squid. E estas mensagens, inclusive, podem ser facilmente personalizadas, pois esto em arquivos no formato html; coredump_dir /var/cache/squid - Local onde o Squid gravar seus arquivos core em caso de falhas. Estes arquivos so comuns em sistemas UNIX e representam o estado do software no momento em que o erro que provocou sua finalizao ocorreu. Algumas outras opes tambm so interessantes, como no caso das apresentadas abaixo para serem usadas quando estamos com o recurso de proxy transparente habilitado. Estas opes vo fazer com que o Squid se comporte como um servidor web, de forma que o cliente no perceba que est ``conversando'' com um proxy. httpd_accel_port 80 httpd_accel_host virtual httpd_accel_with_proxy on httpd_accel_uses_host_header on Existem vrias outras opes interessantes para serem exploradas, entretanto como no nosso objetivo aqui dissecar cada uma delas, vamos deixar isso como proposta para uma outra oportunidade.
7 - ACL's
As ACL's - (Access Control Lists) ou listas de controle de acesso, constituem-se na grande flexibilidade e eficincia do Squid, atravs delas que podemos criar regras para controlar o
acesso internet das mais diferentes formas. Praticamente todo o processo de controle do Squid feito com o seu uso. O uso das listas de controle de acesso a parte mais importante da configurao de um servidor proxy Squid, pois se bem configuradas podem trazer um nvel de segurana muito bom para a rede, entretanto se mau configuradas podem ter resultado oposto, j que alm da falsa sensao de segurana no ser aproveitada a grande capacidade e funcionalidade do Squid. Uma dica para se fazer boas ACL's testar, testar e testar, e depois quando achar que est bom, continue testando e monitorando seus logs para identificar algum problema que possa ocorrer. A primeira coisa que devemos saber que o Squid interpreta as ACL's de cima para baixo, portanto muito importante que seja observada esta regra no momento em que esto sendo construdas as regras de acesso. As ACL's so case-sensitive, isto , site_porno diferente de Site_porno, portanto cuidado com isso. Caso seja usada o opo -i elas deixaro de ser casesensitive. Uma outra regra muito importante que caso uma das regras coincida, as demais no sero mais verificadas. Isso independe da quantidade de regras que ainda faltam para atingir o fim da lista.
/pasta/sexo.html. Ela tambm case-sensitive, para que seja case-insensitive deve ser usada a opo -i; port - Realiza o controle pela porta de destino do servidor, neste tipo deve ser especificado o nmero da porta; proto - Serve para especificar o protocolo, como por exemplo FTP ou HTTP; method - Especifica o tipo de mtodo usado na requisio, como por exemplo GET, CONNECT ou POST; browser - Usa uma expresso regular para tentar ``casar'' com os dados do cabealho HTTP e combinando ento com o navegador utilizado pelo cliente; ident - Realiza o controle de acesso baseado no nome do usurio. Este tipo requer um servidor Ident rodando na mquina do cliente; ident_regex - Semelhante a ident, mas utilizando expresso regular; proxy_auth - Tipo usado para implementar autenticao de usurios no proxy. A autenticao feita com uso de softwares externos. Podem ser passados os nomes dos usurios ou usada a opo REQUIRED para que seja autenticado qualquer usurio vlido; snmp_community - Tipo usado para especificar o nome da comunidade SNMP, para que se possa monitorar o Squid atravs deste protocolo; maxconn - Especifica um limite de conexes vindas de um determinado cliente, interessante para uso com outras ACL's de forma a limitar quantidades de conexes para determinados endereos especficos; req_mime_type - Especifica uma expresso regular para ser verificada no cabealho da requisio em busca de um tipo MIME que coincida com o especificado; arp - Tipo usado para construir lista de acesso baseada no MAC Address da interface de rede do cliente, ou seja, em vez de endereo IP da placa, usa-se o seu endereo MAC.
possa provocar algum dissabor, pois negaremos qualquer acesso que no tenha uma regra especfica. Apresentamos abaixo alguns exemplos de como construir regras de acesso: 1. Controlando acesso pela origem:
2. acl localnet src 192.168.16.0/24 3. http_access allow localnet http_access deny all
Com estas regras estamos especificando que requisies vindas da rede 192.168.16.0/24 sero aceitas, nos demais casos o acesso ser negado; 4. Controlando o acesso pelo destino:
5. acl outra_rede dst 192.168.17.0/24 6. http_access allow outra_rede http_access deny all
Com estas regras estamos limitando o acesso apenas rede 192.168.17.0/24, desta forma qualquer acesso para outro destino ser negado; 7. Controlando acesso pela origem e destino:
8. acl localnet src 192.168.16.0/24 9. acl outra_rede dst 192.168.17.0/24 10. http_access allow localnet outra_rede http_access deny all
Aqui juntamos as duas anteriores e estamos especificando que requisies vindas da rede 192.168.16.0/24 e que sejam destinadas rede 192.168.17.0/24 sero aceitas, nos demais casos o acesso ser negado; 11. Controlando acesso pela nome de domnio de origem e destino:
12. acl meu_dominio srcdomain .meudominio.com.br 13. acl mundo_lafora dstdomain .lafora.com.br 14. http_access allow meu_dominio mundo_lafora http_access deny all
Estas regras so semelhantes as acima, onde usamos src e dst, entretanto aqui verificado o domnio, neste caso requisies vindas de .meudominio.com.br e com destino a .lafora.com.br sero liberadas, nos demais casos o acesso ser negado. muito importante no esquecer o ``.'' (isso mesmo, o ponto) antes do nome do domnio, sob pena da regra no funcionar; 15. Controlando o acesso usando autenticao de usurio:
16. acl usuarios proxy_auth REQUIRED 17. http_access allow usuarios http_access deny all
Esta regra faz com que o acesso seja liberado apenas para usurios que sejam vlidos, dado ao uso da opo REQUIRED, e que se autentiquem no Squid. Para que a autenticao funcione devem ser configuradas as TAG's que informam ao Squid como esta ser feita, j que ela realizada por softwares externos, mas isto j foi visto na seo 5; 18. Controlando acesso pela origem, destino e autenticao de usurio:
acl localnet src 192.168.16.0/24 acl outra_rede dst 192.168.17.0/24 acl usuarios proxy_auth REQUIRED http_access allow localnet outra_rede usuarios
acl localnet src 192.168.16.0/24 acl outra_rede dst 192.168.17.0/24 acl usuarios proxy_auth REQUIRED acl expediente time MTWHF 8:00-18:00 http_access allow expediente localnet outra_rede usuarios http_access deny all
Apenas acrescentamos o controle baseado no horrio. Veja tambm a ordem em que as ACL's so verificadas, observe que a verificao dos usurios feita por ltimo, pois no vamos forar o usurios a se autenticarem para s depois negar o acesso por um outro motivo. Isto no obrigatrio, apenas no nosso caso fica melhor desta forma, pois se, por exemplo, o horrio no est dentro do permitido, o acesso ser negado imediatamente sem nem mesmo tentar checar as outras ACL's;
acl MINHA_REDE src 192.168.16.0/24 acl USUARIOS proxy_auth REQUIRED acl PORNO url_regex -i "/etc/squid/porn" acl PORNO1 url_regex -i "/etc/squid/porn1" acl NAO_PORNO url_regex -i "/etc/squid/noporn" http_access allow USUARIOS NAO_PORNO MINHA_REDE http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE http_access deny all
Este sem dvida o tipo de controle mais usado, pois com ele podemos fazer o bloqueio de contedo considerado imprprio de maneira muito fcil. No nosso caso estamos fazendo o uso de arquivos que contm as listas de palavras ou sites que consideramos inadequados, no caso /etc/squid/porn e /etc/squid/porn1 e outro arquivo com sites e palavras que podem ser barradas por alguma regra dos arquivos anteriores, mas que na verdade no representam contedo imprprio, no caso /etc/squid/noporn. Por exemplo, nem sempre a palavra sexo representa necessidade de bloqueio, pois podemos ter sites de contedo educativo que contenham essa palavra na sua URL, por exemplo www.ministeriodealgumacoisa.gov.br/sexoseguro.html. As palavras ou sites devem ser colocados no arquivo uma por linha. Ento aqui estamos fazendo o seguinte: primeiramente vamos liberar usurios que desejem acessar sites listados no arquivo /etc/squid/noporn e que pertenam a nossa rede, no caso 192.168.16.0/24 ou usurios que queiram acessar sites com contedos diferentes (! significa diferente) do listado nos arquivos /etc/squid/porn e /etc/squid/porn1 e que pertenam a nossa rede, em ambos os casos dever ser feita a autenticao.
As regras so sempre interpretadas de cima para baixo; As expresses regulares so case-sensitive, ou seja, maisculas so diferenciadas de minsculas, para que seja case-insensitive deve ser usada a opo -i; Se uma das regras da lista de acesso for aplicada, as demais sero ignoradas, isto , apenas uma das regras da lista vai ser aplicada por vez; As regras so interpretadas da seguinte forma: http_access allow ACL1 AND ACL2 AND ACL3 OR http_access allow ACL4 AND ACL5AND ACL1 OR ... Este o tipo mais comum de erro, por isso devemos ter sempre isto em mente ao montarmos nossas regras.
Existe uma regra implcita no Squid que utilizada caso nenhuma das regras da lista seja aplicvel ao acesso. Esta regra faz com que seja invertida a ltima regra da lista, de forma que se ela por exemplo for deny ser transformada em allow e aplicada ao acesso, ou o contrrio. extremamente recomendvel que a ltima regra da lista seja http_access deny all, pois com isso todo acesso que chegar at ela ser negado, evitando surpresas com essa inverso que o Squid faz.
Vejamos alguns casos de erros: 1. Queremos que o acesso seja restrito a determinada origem e destino simultaneamente, isto , a conexo dever ser originada na nossa rede e ter como destino uma rede especfica.
2. 3. 4. 5.
acl localnet src 192.168.16.0/24 acl outra_rede dst 192.168.17.0/24 http_access allow localnet http_access allow outra_rede http_access deny all
Aparentemente estas regras esto corretas, entretanto se forem analisadas com mais calma podemos verificar que elas no vo funcionar de acordo com o que esperamos. Os dois operadores deveriam na verdade ser apenas um, pois da forma que est se o acesso vier da rede 192.168.16.0/24 j suficiente para que o aceso seja liberado, no sendo verificada a segunda regra que determina que o destino deve ser a rede 192.168.17.0/24. A segunda regra vai ser aplicada somente se a origem for diferente de 192.168.16.0/24, portanto um resultado totalmente diferente do que realmente queramos. Desta forma o correto seria ter apenas um operador escrito da seguinte maneira http_access allow localnet outra_rede;
6.
Queremos controlar o acesso pela origem e destino, como j visto no caso anterior, s que agora com o uso de autenticao de usurios.
7. acl localnet src 192.168.16.0/24 8. acl outra_rede dst 192.168.17.0/24 9. acl usuarios proxy_auth REQUIRED 10. http_access allow usuarios 11. http_access allow localnet outra_rede http_access deny all
Aqui foi cometido o mesmo erro do caso anterior, pois se o usurio conseguir se autenticar j ser suficiente para que o acesso seja liberado, ento a origem e o destino no sero mais verificados, pois uma regra j foi satisfeita;
12. Queremos controlar o acesso pela origem, com verificao de contedo imprprio atravs de expresses regulares, para usurios autenticados.
13. acl MINHA_REDE src 192.168.16.0/24 14. acl USUARIOS proxy_auth REQUIRED
acl PORNO url_regex -i "/etc/squid/porn" acl PORNO1 url_regex -i "/etc/squid/porn1" acl NAO_PORNO url_regex -i "/etc/squid/noporn" http_access allow USUARIOS NAO_PORNO http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE http_access deny all
Nestas regras apenas foi cometido um pequeno erro, pois na linha http_access allow USUARIOS NAO_PORNO no foi feita a restrio com base na origem, est ento faltando a ACL MINHA_REDE, e sem isso caso o usurio consiga se autenticar e o site esteja na lista do arquivo /etc/squid/noporn j suficiente para ter o acesso autorizado, independente de qual rede esteja sendo originada a requisio.
8.1 Calamaris
O Calamaris um software escrito em Perl que efetua a gerao de relatrios bem detalhados do uso da internet usando os arquivos de logs de vrios servidores proxy, como o NetCache, Inktomi Traffic Server, Oops! proxy server, Novell Internet Caching System, Compaq Tasksmart, Netscape/iplanet Web Proxy Server e claro o Squid. Os relatrios gerados so bem simples na apresentao, entretanto muito ricos em detalhes extrados dos arquivos de logs, eles podem ser gerados no formato HTML ou mesmo em texto para ser enviado via e-mail. A utilizao deste software muito simples, primeiramente temos que baixar a verso mais recente dele emhttp://cord.de/tools/squid/calamaris/Welcome.html.en , descompactar o arquivo no diretrio de sua preferncia, no nosso caso /usr/local/calamaris, aps isso j podemos us-lo. Abaixo temos um exemplo simples de comando necessrio para gerao dos relatrios do log do Squid. #/usr/local/calamaris/calamaris -a -F html /var/log/squid/access.log >/srv/www/default/html/calamaris/index.html O comando acima j suficiente para gerao de relatrios excelentes da anlise dos logs. Neste caso usamos a opo -a que diz ao Calamaris para serem gerados todos os relatrios, -F html especifica o formato do relatrio que queremos, no caso em HTML, /var/log/squid/access.log onde est localizado o arquivo de log do Squid e >/srv/www/default/html/calamaris/index.html a localizao do relatrio gerado, neste caso uma pasta na rvore do Apache de forma que possa ser analisado de qualquer estao da rede. O ideal que seja desenvolvido um script para que possamos programar a execuo do Calamaris pelo cron, mas isso no ser tratado aqui dado ao fato que isto dever ser feito de acordo com as necessidades da cada um, assim como o prprio software j traz alguns exemplos de como fazer isto.
8.2 - SARG
O SARG um dos mais usados e eficientes softwares para gerao de relatrios dos logs do Squid. Ele foi escrito por um brasileiro e tem recursos muito interessantes, como listagem de sites mais visitados, sites que o acesso foi negado, falhas na autenticao, caso este recurso esteja sendo utilizado, listas de sites acessados por usurios e horrios em que foram acessados, etc. Alm do mais, cada um destes relatrios esto recheados de informaes como datas e horrios dos acessos, tempo de gasto na visita ao site, quantidades de dados trafegados e outras mais. Uma outra vantagem deste software que ele est disponvel em vrias lnguas, inclusive o portugus claro, alm do mais tem um arquivo de configurao relativamente simples e bem comentado, alm de est disponvel em pacotes da maioria das distribuies. No nosso caso utilizamos o pacote rpm disponvel na nossa distribuio, no caso a vero 9 do Conectiva. Mas caso voc opte por instalar usando os fontes no havero maiores problemas, siga apenas os passos tradicionalmente usados para instalao usando este mtodo, como mostraremos a seguir. Aps ter baixado a verso mais recente do sitehttp://web.onda.com.br/orso/, no nosso caso sarg-1.4.1.tar.gz e executar os comando abaixo na ordem apresentada, o SARG estar pronto para uso, quer dizer, para ser configurado para uso. # # # # # tar zxvf sarg-1.4.tar.gz cd sarg-1.4/ ./configure make make install
Para gerao dos relatrios necessrio apenas a execuo do comando sarg. Assim como o Calamaris a execuo do SARG fica mais interessante se programada atravs do cron, isso pode ser implementado com o uso dos scripts que o acompanham (geralmente /usr/sbin/sarg.daily, sarg.weekly e sarg.monthly) e permitem automatizar a gerao de relatrios dirios, semanais e mensais, mas isso no quer dizer que no possamos extrair relatrios mais personalizados e de acordo com nossas necessidades.
8.3 - Squid-Graph
O Squid-Graph, assim como o Calamaris, escrito em Perl, entretanto como o prprio nome menciona, um gerador de grficos da utilizao do servidor proxy. Ele se atem a apresentar informaes mais sintticas dos acessos e transferncias de dados, mas nem por isso deixa de ser mais uma alternativa interessante e pode complementar o rol de ferramentas de administrao. Ele pode ser conseguido em http://squid-graph.securlogic.com/files/stable/squid-graph3.1.tar.gz, sendo esta a ltima verso disponvel neste momento. importante lembrar que necessrio que seja instalado o mdulo perl GD, que com certeza deve est nos CD's de sua distribuio favorita. O processo de instalao muito simples, pois trata-se apenas de descompactar os arquivos no diretrio escolhido, j que no precisamos compilar nada. No nosso caso instalamos em /usr/local/squid-graph/, conforme mostra o comando abaixo. # tar xzvf squid-graph-3.1.tar.gz -C /usr/local/ # mv squid-graph-3.1 squid-graph # chmod +x /usr/local/squid-graph/bin/* A execuo do comando para gerao dos grficos vai depender de como e quais devero ser gerados, entretanto uma boa maneira de se executar este comando de maneira que seja gerados os grficos de forma cumulativa apresentada abaixo. #/usr/local/squid-graph/bin/squid-graph -c -n -o=/srv/www/default/html/squid-graph/ -title="Grfico de uso do proxy" < /var/log/squid/access.log No comando acima usamos a opo -c, desta forma estamos gerando os grficos cumulativos, isto , vamos ter dois grficos para os acessos e transferncias TCP, respectivamente, e mais dois grficos para os acessos e transferncias UDP. A opo -n faz com que no sejam ``ecoadas'' na tela as informaes do processamento do log do Squid, -o=/srv/www/default/html/squid-graph/
representa o local onde os arquivos sero gravados (html e imagens), -title=``Grfico de uso do proxy'' personaliza o ttulo da pgina html, onde so mostrados os grficos, e por fim temos o arquivo de log dos Squid. Existem outras opes interessantes, como gerar grficos para uma URL especfica ou um determinado usurio, como podemos ver com o uso do comando abaixo: # cat /var/log/squid/access.log | grep "ginux.comp.ufla.br" | /usr/local/squid-graph/bin/squidgraph -c -n -o=/srv/www/default/html/squid-graph/ --title="Grfico de uso do proxy" Para gerar um grfico dos acessos de um determinado usurio, precisaramos apenas substituir o comando grep mostrado acima, por grep ``192.168.16.3 '', supondo que 192.168.16.3 o IP do seu usurio. Podemos ainda usar o mesmo recurso para grficos de determinados tipos de arquivos, usando a extenso como parmetro, por exemplo grep ``.mp3 '' um bom comeo. Como j deu pra perceber, podemos combinar o uso do Squid-Graph com outros comandos do Linux, de forma que podemos ter uma infinidade de opes para seu uso, alm disso existem outras opes interessantes que no foram tratadas aqui.
9 - Concluso
A configurao e o uso de servidores proxy um assunto muito interessante e ao mesmo tempo muito extenso. Temos vrias maneiras de implementar solues deste tipo, que vo apresentar um certo grau de complexidade de acordo com o porte, recursos e finalidade do que queremos usar. Nosso objetivo aqui foi apresentar algumas das maneiras de utilizao do proxy Squid de modo que fosse possvel elaborar uma viso do processo de configurao e utilizao deste servidor proxy. Este sem dvidas um software livre com qualidade excepcional. A robustez e flexibilidade oferecidas pelo Squid um diferencial muito bom em relao a solues fechadas. Ao mesmo tempo podemos notar a facilidade no seu uso, o que faz dele uma excelente alternativa para uso em qualquer ambiente.
Referncias Bibliogrficas
Bastos, 2003 Bastos, E. R. (2003). Configurando um squid ``ninja'' http://www.linuxman.pro.br/squid/. Acesso em setembro/2003. Campos, 2003 Campos, A. (2003). Linux in brazil - http://www.linux.trix.net. Acesso em setembro/2003. Marcelo, 2003 Marcelo, A. (2003). Squid. Brasport Livros e Multimdia Ltda. Pearson, 2003 Pearson, O. (2003). Squid - A User's Guide. Qualica Technologies (Pty) Ltd. Sica et al., 2003 Sica, F. C., Ucha, J. Q., and Simeone, L. E. (2003). Administrao de Redes Linux. UFLA/FAEPE. Vesperman, 2003 Vesperman, J. (2003). Installing and configuring squid http://linux.oreillynet.com/pub/a/linux/2001/07/26/squid.html. Acesso em setembro/2003. ViSolve.com, 2002 ViSolve.com (2002). Squid configuration manual. ViSolve.com. Wessels, 2001 Wessels, D. (2001). SQUID Frequently Asked Questions. www.squid-cache.org.
# Principais diretivas estão comentadas e algumas # foram mantidos os comentários originais # Definição da linguagem language Portuguese # Localização do arquivo de log do squid access_log /var/log/squid/access.log # título do relatório title "Relatórios de uso do proxy Squid" # Definicoes da estética do relatorio (cores, fontes) font_face Arial header_color darkblue header_bgcolor blanchedalmond header_font_size -1 background_color white text_color black text_bgcolor beige title_color green logo_image none logo_text_color black background_image none password none # diretório temporário temporary_dir /tmp # Local onde os relatórios serão gravados output_dir /srv/www/default/html/sarg # e-mail para envio dos relatórios output_email none resolve_ip no user_ip yes # classificação do relatório topuser topuser_sort_field BYTES reverse # classificação do relatório user user_sort_field BYTES reverse # arquivo com usuario que serao excluidos do relatorio exclude_users none # arquivo com usuario que serao excluidos do relatorio # Ex.: ip 192.168.10.10, rede 192.168.10.0, # host s1.acme.foo e domínio acme.foo exclude_hosts none useragent_log none # formato da data: e (Europe=dd/mm/yy), u # (USA=mm/dd/yy), w (Weekly=yy.ww) date_format e # TAG: per_user_limit file MB # Save userid on file if download exceed n MB. # # This option can be used to disable user access # if user exceed a download limit. per_user_limit none lastlog 0 remove_temp_files yes index yes # subscrever relatórios caso já existam overwrite_report yes # o que fazer com registros sem usuário records_without_userid ignore # use_comma yes => 23,450,110 use_comma no => 23.450.110 use_comma no # utilitário usado para envio do e-mail com o relatório mail_utility mail # quantidade de sites mais visitados para listar no relatório topsites_num 100 # TAG: topsites_sort_order CONNECT|BYTES A|D # Sort for topsites report, where A=Ascendent, # D=Descendent # topsites_sort_order CONNECT D # Arquivo de códigos HTTP para serem ignorados no relatório exclude_codes /etc/sarg/exclude_codes max_elapsed 28800000 # Tipo de Relatórios # topsites - Mostra o site, conexão e bytes
# sites_users - Mostra que usuários estavam # acessando um site # users_sites - Mostra sites acessados # pelo usuário # date_time - Mostra quantidade de bytes # usados por dia e hora # denied - Mostra todos os sites negados # com URL completa # auth_failures - Mostra falhas de autenticação # site_user_time_date - Mostra os horários que um # usuário acessou determinado # site # report_type topsites sites_users users_sites date_time denied auth_failures site_user_time_date # usado para mostrar o nome do usuário e não o ip # formato: 192.168.10.1 claudio usertab /etc/squid/usernames # TAG: long_url yes|no # If yes, the full url is showed in report. # If no, only the site will be showed # # YES option generate very big sort files and reports. # long_url no # TAG: date_time_by bytes|elap # Date/Time reports will use bytes or elapsed time? # date_time_by bytes # TAG: charset name # ISO 8859 is a full series of 10 standardized # multilingual # single-byte coded (8bit) # graphic character sets for writing in # alphabetic languages # You can use the following charsets: # Latin1 - West European # Latin2 - East European # Latin3 - South European # Latin4 - North European # Arabic # Greek # Hebrew # Latin5 - Turkish # Latin6 # Windows-1251 # Koi8-r charset Latin1 # Fim do arquivo sarg.conf
acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews 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 CONNECT method CONNECT acl MINHA_REDE src 192.168.16.0/24 acl USUARIOS proxy_auth REQUIRED acl PORNO url_regex -i "/etc/squid/porn" acl PORNO1 url_regex -i "/etc/squid/porn1" acl NAO_PORNO url_regex -i "/etc/squid/noporn" http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow USUARIOS NAO_PORNO MINHA_REDE http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE http_access deny all http_reply_access allow all icp_access allow all visible_hostname www.meu_seite.com.br error_directory /usr/share/squid/errors/Portuguese coredump_dir /var/cache/squid # Fim do arquivo squid.conf
Como o squid as l: A primeira regra que o squid l (http_access allow acesso_total) diz que ser LIBERADO acesso a quem estiver com o ip cadastrado no arquivo "/etc/squid/acesso_total". Ento, quem ele encontra aqui j liberado e no passa mais pelas outras acls seguintes. Por isso o acesso direto e total. A segunda regra que ele encontra (http_access deny bloqueado) diz que ser NEGADO o acesso s URLs que coincidirem com as palavras que esto no arquivo "/etc/squid/bloqueado". Se, por exemplo, neste arquivo tiver a palavra sexo qualquer site que tenha esta palavra na sua URL no ser acessado, como em www.uol.com.br/sexo, www.sexomais.com.br, etc. Mas ateno neste detalhe. O squid vem lendo o arquivo de cima para baixo e s chegar a segunda regra quem no cair na primeira, ou seja quem no tiver o ip cadastrado no arquivo de acesso total. A terceira regra que o squid l (http_access allow acesso_restrito) diz que ser LIBERADO acesso a quem tiver com o ip cadastrado no arquivo "/etc/squid/acesso_restrito". Como na terceira regra s chega quem no caiu na regra anterior, o acesso pode ser liberado tranquilamente. A quarta e ltima regra (http_access deny all) nega o acesso a qualquer ip de qualquer mscara (0.0.0.0/0.0.0.0), pois ela j vem declarada no incio das acls (acl all src 0.0.0.0/0.0.0.0). Voc deve estar se perguntando: Mas como pode negar acesso a todos os ips se tenho que liberar o meu? A resposta simples e est no que eu enfatizei at agora. O segredo est na sequncia como o squid l as acls. Se ele l a primeira (acesso_total) e ningum se aplicar a ela, ento passar para a segunda. Se nesta tb ningum se aplicar ele passar para a terceira. bvio concluir que se o cliente no est cadastrado no acesso_total, nem est no acesso_restrito ento ele no faz parte da rede e deve ser bloqueado. (Deve ser algum espertinho mudando de ip, hehehe!!!). S chegar a ltima quem no caiu em nenhuma das anteriores. Por issso, divida sua rede em quem pode ter acesso tota e restrito e cadastre os clientes em seus respectivos arquivos.
Contedo: sexo hardcore ninfeta penis suruba playboy revistasexy Descrio: Palavras para restrio de urls. Arquivo: /etc/squid/liberado Contedo: abcdasaude sexoesaude medicinanatural uol.com.br/sexo Descrio: Excees aos bloqueios. O que for colocado aqui, mesmo que esteja na lista de bloqueios ser liberado.
Agora vamos prtica: Declare as acls: acl acl acl acl acl acesso_total src "/etc/squid/acesso_total" acesso_restrito src "/etc/squid/acesso_restrito" liberado url_regex -i "/etc/squid/liberado" download url_regex -i "/etc/squid/download" bloqueado url_regex -i "/etc/squid/blouqeado"
Depois de declarar, ative as acls na mesma sequncia doexemplo abaixo: http_access http_access http_access http_access http_access http_access allow acesso_total allow liberado deny download deny bloqueado alow aceso_restrito deny all
Agora vamos s explicaes e as anlises dos casos. Caso 1 - O cliente com ip 192.168.1.2 vai acessar o site www.uol.com.br. Por estar cadastrado no acesso total ele cair logo na primiera regra e ser LIBERADO o acesso a qualque site. Nenhuma das regras seguintes sero aplicadas a elee tanto o uol.com.br como qualquer outra pgina estar liberada. Caso 2 - O cliente com ip 192.168.1.6 vai acessar o site www.uol.com.br. Por estar no acesso restrito, ele "passar ileso" pela primeira regra. Encontrar ento a segunda (liberado), que so as excees dos bloqueios. Como o site www.uol.com.br no est na lista de excees ele tambm passar ileso por esta regra. Chegar ento, terceira regra (download) que limita os downloads. Nesta tambm no encontrar nada, pois no estamos fazendo download de nenhum arquivo. Chegar ento a quarta (bloqueado) e mais perigosa regra, mas como nela no tem nehuma restrio para o site uol ele tambm passar ileso. Cair ento na quinta regra,
onde o acesso ao seu ip (192.168.1.6) est LIBERADO (allow) podendo assim acessar o site www.uol.com.br. Caso 3 - O cliente com ip 192.168.1.6 vai acessr o site www.sexomais.com.br. Por estar no acesso restrito, ele passa pela primeira regra. Encontrar a segunda, na qual h excees para os bloqueios, mas noh nenhuma exceo para o site sexomais.com.br. Ento ele prossegue, passando ileso pelo download e caindo na regra bloqueado, pois o site sexomais.com.br contm uma palavra (sexo) que est na lista de bloqueios. Mesmo estando cadastrado no acesso_restrito este cliente no chegar a acl que lhe d permisso de acesso, pois antes ele j caiu no bloqueio de sites e (como j disse) o squid pra de ler quando aplica alguma regra. Caso 4 - O cliente com ip 192.168.1.6 vai acessar o site www.medicinanatural.com.br/sexo. (Mas que cara teimoso...) J sabemos que este cliente pular a primeira regra, pois sei ip do acesso restrito, mas cair logo na segunda, onde h uma exceo para acessar todo o contedo do site medicinanatural. Mesmo que em sua url (www.medicinanatural.com.br/sexo) tenha a palavra sexo, a regra de bloqueio no ser aplicada, pois antes mesmo de chegar nela foi encontrada uma adequao na regra de excees e o squid parou de ler o resto das regras para este ip. Caso 5 - O cliente com ip 192.168.1.6 (coitado dese cara...) vai acessar o site www.superdownloads.com.br. Ele pular a primeira regra. No se enquadrar na segunda, mas cair na terceira se tentar fazer qualquer download de arquivos com extenses definidas na lista /etc/squid/download. Se no tentar fazer downloads, poder navegar tranquilamente pelo site, afinal, no h nenhuma restrio para a URL dele. Espero que este exemplo tenha ficado claro. Na pgina seguinte montaremos um outro tipo de restries de acesso.
Contedo: 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 Descrio: Mquinas que tero acesso restrito internet. Passaro por bloqueios. Arquivo: /etc/squid/liberado Contedo: .gov. .edu. .org. ufc uece unifor minhaempresa.com.br bb.com.br bradesco.com.br Descrio: Excees aos bloqueios. Declare as acls: acl acesso_total src "/etc/squid/acesso_total" acl acesso_restrito src "/etc/squid/acesso_restrito" acl liberado url_regex -i "/etc/squid/liberado" Ative as acls: http_access http_access http_access http_access allow acesso_total allow liberado deny acesso_restrito deny all
Agora vamos ao estudo dos casos. A primeira regra LIBERA o acesso dos ips cadastrados no acesso_total. A segunda regra libera o acesso apenas aos contedos do arquivo /etc/squid/liberado. E as demias negam os acessos da rede local e de todos os outros ips tambm. Caso 1 - O cliente com ip 192.168.1.2 vai acessar o site www.uol.com.br. Por estar cadastrado no acesso total ele cair logo na primiera regra e ser LIBERADO o acesso a qualque site. Nenhuma das regras seguintes sero aplicadas a elee tanto o uol.com.br como qualquer outra pgina estar liberada. Caso 2 - O cliente com ip 192.168.1.6 vai acessar o site www.uol.com.br. Por no estar no acesso total, ele pular esta regra. Como no h nehuma exceo para o site www.uol.com.br ele tambm passar ileso pela segunda regra. Da terceira em diante ele no faz mais nada, pois elas negam qualquer tipode acesso. O site www.uol.com.br ser bloqueado para este ip. Caso 3 - O cliente com ip 192.168.1.6 vai acessar o site www.detran.ce.gov.br. J sabemos que ele pular a primeira regra. Encontrar ento a segunda, que em sua lista possui (.gov.) uma referncia URL que ele est tentando acessar. Como a regra est liberando (allow) o acesso a qualquer URL que contenha .gov. o cliente poder acessar normalmente todo o site
www.detran.ce.gov.br. Como vimos este exemplo bem mais simples que o anterior e a abrangncia dos bloqueios bem maior. ideal para escolas, bancos e instituies pblicas, onde o contedo da internet altamente restrito. Na ltima pgina mostrarei como redirecionar as pginas (para um aviso por exemplo) quando o cliente cair em algum bloqueio.
4. Redirecionando
Depois de montada a rede com o modelo de sua preferncia, falta apenas redirecionar as mensagens, afinal havero inmeras reclamaes de clientes dizendo que esto sem internet e na verdde esto tendo seus sites blouqeados. Nada mais bvio do que colocar um aviso informando isso, concorda? bem simples. Vamos ento prtica. Procure no seu squid.conf a linha error_directory. Ela informa o doretrio onde o squid vai buscar os arquivos html de erro. No meu conectiva, por exemplo, o referido diretrio fica em /usr/share/squid/errors/Portuguese. 1. Crie ento uma pgina html comum informando que o usurio est tentando acessar um site proibido. 2. Salve-a dentro do diretrio informado acima para que o squid a encontre quando algum for bloqueado. Procure no squid.conf a linha deny_info. Nesta linha voc define qual erro vai acionar qual pgina. Veja um exemplo: deny_info block.html bloqueado Neste exemplo o cliente ser redirecionado para a pgina block.html quando ocorrer algum bloqueio de sites. Voc pode tambm acrescentar outras pginas de acordo com a quantidade de bloqueios que voc possui. Para isso basta repetir as linhas, como no exemplo abaixo: deny_info block.html bloqueado deny_info down.html download deny_info all.html all Se quiser tambm pode redirecionar para um site: deny_info http://www.google.com.br bloqueado.
5. Final
Espero que este artigo possa ajudar algum de alguma forma. Escrevi pensando no que eu queria ter encontrado quando estava aprendendo a usar as acls, por isso acho que deva ter alguma utilidade. Procurei exemplificar nos mnimos detalhes para no deixar nenhuma dvida. Se mesmo assim, houverem dvidas, dicas ou sugestes estarei inteira disposio.
Depois de disponibilizar o arquivo, falta apenas configurar os clientes para obterem a configurao de proxy atravs dele. No Firefox, o endereo vai no "Editar > Preferncias > Avanado > Rede > Configuraes > Endereo para configurao automtica de proxy", enquanto no IE vai no
"Ferramentas > Opes da Internet > Conexes > Configuraes da LAN > Usar script de configurao automtica":
Depois de feita a configurao, voc pode checar o uso do proxy pelos clientes monitorando o arquivo "/var/log/squid/access.log" do servidor. Voc ver vrias entradas referentes aos acessos feitos pelos clientes.
Essa a configurao mais elementar, onde os clientes so manualmente configurados para utilizarem o arquivo. O degrau seguinte o WPAD (Web Proxy Auto-Discovery protocol), que permite automatizar a configurao dos clientes, permitindo que eles localizem o arquivo automaticamente. Para usar o WPAD, precisaremos configurar tambm o servidor DHCP e o servidor DNS da rede para orientarem os clientes a utilizarem o arquivo. A alterao do servidor DHCP consiste em adicionar duas linhas no arquivo "/etc/dhcp3/dhcpd.conf", a primeira contendo a diretiva "code 252 = text" e a segunda contendo a localizao do arquivo wpad.dat: option wpad-url code option wpad-url "http://192.168.1.1/wpad.dat\n"; 252 = text;
A primeira linha includa na seo global da configurao, enquanto a segunda includa na seo correspondente subnet, como em: ddns-update-style default-lease-time max-lease-time authoritative; option wpad-url code 252 = text; subnet 192.168.1.0 netmask range 192.168.1.100 option routers option domain-name-servers option broadcast-address option wpad-url } none; 600; 7200; 255.255.255.0 { 192.168.1.199; 192.168.1.1; 208.67.222.222; 192.168.1.255; "http://192.168.1.1/wpad.dat\n";
O "/n" na ltima linha insere uma quebra de linha. Ele um workaround para um bug do IE 6.0, que no l a configurao se o \n no estiver presente. Depois de alterar o arquivo, no esquea de reiniciar o servio para que a alterao entre em vigor. Depois de configurar o DHCP, voc pode configurar os clientes com a opo "Detectar automaticamente as configuraes" na configurao do proxy, em vez de especificar a localizao do arquivo manualmente:
Atualmente, apenas o Internet Explorer compatvel com a configurao automtica via proxy. Voc pode selecionar a opo "Autodetectar as configuraes de proxy para esta rede" no Firefox, mas voc perceber que os clientes continuaro tentando acessar a web diretamente, sem lerem o arquivo wpad.dat e sem utilizarem o proxy:
Isso nos leva configurao do DNS, que complementa a configurao, atendendo a mquinas com o Firefox, Opera e outros navegadores. A configurao do DNS um pouco mais complexa, pois necessrio configurar tambm um domnio para a rede local e ajustar (novamente) tambm a configurao do servidor DHCP para que os clientes utilizem o domnio. Mais adiante teremos um captulo dedicado configurao de servidores DNS utilizando o Bind, onde veremos mais detalhes sobre a configurao de domnios. Por enquanto, vou apenas me limitar a uma receita rpida para que voc coloque o domnio no ar e possa assim ativar a configurao automtica do proxy. O primeiro passo instalar o Bind usando o gerenciador de pacotes, como em: # apt-get install bind O arquivo de configurao padro o "/etc/bind/named.conf". A configurao do domnio feita em duas partes. Primeiro adicionamos uma entrada referente ao domnio no arquivo principal, indicando a localizao de um arquivo externo (onde vai a configurao) e em seguida adicionamos a configurao propriamente dita neste segundo arquivo. Como estamos configurando um domnio local, voc pode especificar qualquer domnio, no necessrio que ele esteja realmente registrado. No exemplo, estou usando o domnio "gdhn.com.br". Comece adicionando a configurao referente a ele no final do arquivo "/etc/bind/named.conf" (no Debian voc pode tambm utilizar o arquivo "/etc/bind/named.conf.local", que carregado como um include): zone type file }; "gdhn.com.br" IN { master; "/etc/bind/db.gdhn";
Veja que na terceira linha especificamos o arquivo externo (db.gdhn), onde ir a configurao do domnio. Esse arquivo precisa ser criado na mesma pasta do arquivo principal, ou seja, ser o arquivo "/etc/bind/db.gdhn". O contedo do arquivo ser o seguinte (veja mais detalhes sobre o significado das opes no captulo sobre DNS): @ IN SOA etch.gdhn.com.br. hostmaster.gdhn.com.br. ( 2008030645 3H 15M 1W 1D ) NS etch.gdhn.com.br. gdhn.com.br. A 192.168.1.1 wpad IN A 192.168.1.1 O "etch" no exemplo o nome do servidor, enquanto o "192.168.1.1" o endereo IP usado por ele. Isso cria o domnio "gdhn.com.br" e o "wpad.gdhn.com.br", ambos apontando para o
endereo IP do servidor. Dessa forma, ao tentarem baixar o arquivo "http://wpad.gdhn.com.br/wpad.dat", os clientes baixaro na verdade o "http://192.168.1.1/wpad.dat". Depois de terminar, no esquea de reiniciar o Bind para que a alterao entre em vigor: # /etc/init.d/bind restart Naturalmente, para que o domnio seja utilizado, necessrio tambm configurar os clientes para utilizarem o servidor DNS interno que acabamos de configurar. Isso feito especificando o endereo IP do servidor como nico servidor DNS na opo "domain-name-servers" da configurao do DHCP e adicionando duas novas opes na seo global do arquivo: ddns-domainname option domain-name "gdhn.com.br."; "gdhn.com.br.";
Este um exemplo de arquivo "/etc/dhcp3/dhcpd.conf", depois das alteraes: ddns-update-style none; default-lease-time 600; max-lease-time 7200; authoritative; option wpad-url code 252 = text; ddns-domainname "gdhn.com.br."; option domain-name "gdhn.com.br."; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.199; option routers 192.168.1.1; option domain-name-servers 192.168.1.1; option broadcast-address 192.168.1.255; option wpad-url "http://192.168.1.1/wpad.dat\n"; } Com essa configurao, os clientes Linux recebero a seguinte configurao de DNS (salva no arquivo "/etc/resolv.conf") do servidor DHCP: search nameserver 192.168.1.1 gdhn.com.br.
Veja que includa a linha "search gdhn.com.br", que especifica que eles devem fazer pesquisas dentro do domnio e que o endereo do servidor usado como DNS primrio. Naturalmente, a mesma configurao fornecida aos clientes Windows configurados via DHCP. Veja um exemplo:
Com isso, voc pode configurar o Firefox para localizar o proxy automaticamente e, graas configurao do DNS, ele ser capaz de encontrar o arquivo wpad.dat e utilizar a configurao definida por voc. Uma pequena exceo fica por conta de verses antigas do Firefox para Linux, que possuem um bug na varivel usada para localizar o arquivo. Em vez de procurarem o arquivo wpad.dat no host "wpad" dentro do domnio da rede (que leva ao nosso servidor), elas tentam sempre baixar o arquivo a partir da URL "http://wpad/wpad.dat", sem respeitar a configurao do DNS.
Ao usar clientes Linux rodando alguma das verses afetadas pelo bug, voc ver uma srie de entradas como essa no log do Squid: 192.168.1.183 TCP_MISS/503 1479 GET http://wpad/wpad.dat - DIRECT/wpad text/html A soluo nesses casos editar o arquivo "/etc/hosts" nos clientes afetados, adicionando uma entrada relacionando o host "wpad" com o endereo do seu servidor, como em: 192.168.1.1 wpad Com isso, as requisies passam a ser destinadas ao endereo correto, solucionando o problema.