squid

9
Configurando um Squid "Ninja" Mini HOW-TO 1. Introdução 1.1 Sobre o autor 1.2 Requisitos 2. Instalando o Squid 2.1 Baixando o código-fonte 2.2 Baixando em binário 2.3 Configurações básicas - ACLs 2.4 Referências 3. Transparent Proxy 3.1 Configurando o squid 3.2 Configurando o iptables 3.3 Configurando o PF (OpenBSD) 3.4 Configurando o IPFilter (FreeBSD) 3.5 Referências 4. Bloqueando sites indesejados 4.1 Criando os arquivos necessários 4.2 Editando o squid.conf 4.3 Referências 5. Bloqueio de banners 5.1 Baixando e instalando o Banner Filter 5.2 Editando o squid.conf 5.3 Referências 6. Autenticando usuários 6.1 ncsa_auth 6.2 Editando o squid.conf 6.3 Referências 7. Controle de Banda 7.1 Editando o squid.conf 7.2 Referências 8. Utilidades Públicas 8.1 Resetando o cache do squid 9. Outras referências 1. Introdução Classificamos aqui como Squid Ninja um squid com serviços de proxy transparente, controle de acesso a páginas, bloqueio de banners, autenticação e controle de banda. 1.1 Sobre o autor Eri Ramos Bastos trabalha com Linux desde 1998, passando por diversas distribuições e fases

Upload: tiago-santos

Post on 29-Dec-2015

3 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Squid

Configurando um Squid "Ninja" Mini HOW-TO

1. Introdução 1.1 Sobre o autor 1.2 Requisitos 2. Instalando o Squid 2.1 Baixando o código-fonte 2.2 Baixando em binário 2.3 Configurações básicas - ACLs 2.4 Referências

3. Transparent Proxy 3.1 Configurando o squid 3.2 Configurando o iptables 3.3 Configurando o PF (OpenBSD) 3.4 Configurando o IPFilter (FreeBSD) 3.5 Referências

4. Bloqueando sites indesejados 4.1 Criando os arquivos necessários 4.2 Editando o squid.conf 4.3 Referências

5. Bloqueio de banners 5.1 Baixando e instalando o Banner Filter 5.2 Editando o squid.conf 5.3 Referências

6. Autenticando usuários 6.1 ncsa_auth 6.2 Editando o squid.conf 6.3 Referências

7. Controle de Banda 7.1 Editando o squid.conf 7.2 Referências

8. Utilidades Públicas 8.1 Resetando o cache do squid 9. Outras referências

1. Introdução

Classificamos aqui como Squid Ninja um squid com serviços de proxy transparente, controle deacesso a páginas, bloqueio de banners, autenticação e controle de banda.

1.1 Sobre o autor

Eri Ramos Bastos trabalha com Linux desde 1998, passando por diversas distribuições e fases

Page 2: Squid

diferentes do pinguim. Atualmente trabalha como consultor em soluções Linux / Unix e está disponível para ajudar a sua empresa a implantar Linux em todos os setores. [email protected]

1.2 Requisitos

A maior parte das configurações depende apenas do Squid. O proxy transparente também dependedo sistema operacional e do firewall, sendo que irei citar aqui somente a dupla Linux/Iptables, masjá deixo avisado de ante-mão que é possível em outros Unix*.A instalação padrão do squid, disponível na maior parte das distribuições, não consegue lidar com ocontrole de banda, sendo necessário recompilar o Squid.

2. Instalando o Squid

Não é muito difícil ter o squid funcionando na máquina, sendo que a maioria das distribuições já odisponibilizam na instalação padrão. Caso queira o controle de banda, DESINSTALE o squid queveio na sua distribuição e instale a partir do código, como descrito abaixo.

2.1 Baixando o código-fonte

Na data de criação desse documento, a versão mais recente (estável) do squid era a 2.4STABLE7.Verifique a versão mais recente em: http://www.squid-cache.org/Versions/v2/.

# groupadd squid# useradd -g squid -s /dev/null squid >/dev/null 2>&1# wget http://www.squid-cache.org/Versions/v2/2.4/squid-2.4.STABLE7-src.tar.gz# tar zxvf squid-2.4.STABLE7-src.tar.gz# cd squid-2.4.STABLE7# ./configure --enable-delay-pools --enable-cache-digests --enable-poll --disable-ident-lookups --enable-truncate --enable-removal-policies# make all# make install# cd auth_modules/NCSA# make# make install

2.2 Baixando em binário No site do próprio Squid existe referência a distribuições em binário. Para instalação no Debian, oclássico apt-get install squid resolve. No freebsd, basta ir aos ports e lá está também o squid.

2.3 Configurações básicas - ACLsComo comentado mais tarde, toda a estrutura do Squid é baseada em listas de acessos. Por isso vamos criar uma lista de acesso básica para nossos usuários.Vamos supor que nossa rede interna seja 192.168.5.0/24. Crie a seguinte linha no squid.conf, na seção de ACLs (TAG: acl):

• acl rede_interna src 192.168.5.0/24

E a seguinte linha na seção de acesso (TAG: http_access)• http_access allow rede_interna

2.4 ReferênciasDocumentação oficial do Squid

3. Transparent Proxy

Page 3: Squid

Esse recurso é muito útil para evitar que seus usuários "burlem" o proxy removendo asconfigurações do browser. Eles serão obrigados a passar pelo proxy, mesmo que as máquinas nãoestejam configuradas para tal. Extremamente recomendado, principalmente em casos de bloqueiode sites ou limitação de banda.

3.1 Configurando o SquidO arquivo de configuração do squid é o squid.conf, normalmente ele se encontra em /etc/squid.conf ou em /usr/local/squid/etc/squid.conf. Caso não encontre o seu em nenhum desses lugares, procure-o com o comando locate squid.conf ou da forma que preferir.

Vamos editar as seguintes linhas:

• httpd_accel_host virtual • httpd_accel_port 80 • httpd_accel_with_proxy on • httpd_accel_uses_host_header on

Essas linhas estão comentadas no squid.conf original. Descomente-as. Caso não as encontre, insira os dados acima.

3.2 Configurando o iptablesProvavelmete você já tenha seu script de inicialização do firewall, sendo assim a unica coisa necessária inserir essa linha nele:

• iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

3.3 Configurando o PF (OpenBSD)Adicione a seguinte linha ao seu /etc/nat.conf (levando em consideração que sua interface interna seja fxp1)

• rdr on fxp1 from any to any port 80 -> 127.0.0.1 port 3128

3.4 Configurando o IPFilter (FreeBSD)Adicione as seguintes linhas ao seu /etc/rc.conf

• ipfilter_enable="YES" • ipnat_enable="YES" • ipmon_enable="YES" • ipfs_enable="YES"

Adicione as seguintes linhas ao seu /etc/ipnat.rules (levando em consideração que o rl0 é suainterface interna)

• rdr rl0 0/0 port 80 -> 127.0.0.1 port 3128 tcp

3.5 ReferênciasLDP - Transparent Proxy with Linux and Squid mini-HOWTO

4. Bloqueando Sites indesejados

Todas as configurações de usuários, grupos, horários e SITES são configuradas em ACLs (Access Control Lists) do Squid. Portanto, vamos criar 2 ACLls que irão fazer o bloqueio dos sites indesejados. A ordem em que as ACLs aparecem é muito importante, por isso a ACL que bloqueia os sites deve ser a primeira a aparecer.

Procure no seu squid.conf onde começam a ser descritas as ACLs. Geralmente a primeira

Page 4: Squid

ACL a aparecer é:

acl all src 0.0.0.0/0.0.0.0

4.1 Criando os arquivos necessários:

Vamos fazer o seguinte:

# mkdir /etc/squid/bloqueadosou# mkdir /usr/local/squid/etc/bloqueados

# touch /etc/squid/bloqueados/block.txtou# touch /usr/local/squid/etc/bloqueados/block.txt

# touch /etc/squid/bloqueados/unblock.txtou# touch /usr/local/squid/etc/bloqueados/unblock.txt

O Arquivo block.txt irá conter todos os sites e palavras que você deseja bloquear e o unblock.txttodas as excessões. Como assim, você pergunta.Vamos supor que você tenha bloqueado a palavra sexo. Então você não poderá entrar emwww.sexo.com.br, mas também não poderá entrar em www.sexoesaude.com.br. Ora, mas essesegundo site é inofensivo, portanto não deveria ser bloqueado. Basta colocá-lo no unblock.txt

4.2 Editando o squid.conf

Vamos ao squid.conf

Insira as linhas abaixo logo antes de acl all src 0.0.0.0/0.0.0.0:

• acl blockedsites url_regex -i "/etc/squid/bloqueados/block.txt"• acl unblockedsites url_regex -i "/etc/squid/bloqueados/unblock.txt"

ou

• acl blockedsites url_regex -i "/usr/local/squid/etc/bloqueados/block.txt"• acl unblockedsites url_regex -i "/usr/local/squid/etc/bloqueados/unblock.txt"

Agora procure no seu squid.conf a linha http_access deny all e coloque antes dela:

• http_access deny blockedsites !unblockedsites

4.3 ReferênciasSquid Blocking FilesSquid and Web Utilities

5. Bloqueio de Banners

Banner é uma coisa chata! Que me perdoem os anunciantes, mas eu não suporto banner nem pop-up. Mas o pior de tudo é que elas consomem banda e quase nunca ajudam o Squid, pois estão em

Page 5: Squid

constante mudança. Com a solução mostrada aqui, todos os banners serão substituidos por umaimagem pré-definida, podendo inclusive ser personalizada. Muito legal em empresas ou provedoresde acesso em conjunto com o proxy transparente.

5.1 Baixando e instalando o Banner Filter

Baixe o Banner Filter do seu site oficial.

# tar zxvf bannerfilter-1.05.tar.gz# cd bannerfilter-1.05

• Mova o conteúdo do diretório www para algum lugar acessível em seu Web server. Esses arquivos PRECISAM estar acessíveis ao squid via HTTP.

• Mova todo o resto para /etc/squid/bannerfilter ou /usr/local/squid/etc/bannerfilter• Edite o redirector.pl. Se você não tem o perl no local padrão (/usr/bin/perl), mude a primeira

linha (ou crie um symlink).• Mude as variáveis $DATA e $WWW como indicado nos comentários.• Opcionalmente, mude também $LOG e $BANNERGIF como indicado.• Teste o redirector.pl rodando-o (perl redirector.pl), digite alguma coisa e veja se recebe essa

coisa de volta.. Pressione Crtl-C para parar. Não pule esse passo, pois nele você poderá descobrir erros.

5.2 Editando o squid.confProcure pela seção que fala sobre redirect (TAG: redirect_program) e insira a linha:

• redirect_program /etc/squid/bannerfilter/redirector.plou

• redirect_program /usr/local/etc/bannerfilter/redirector.pl5.3 ReferênciasBannerFilter

6. Autenticando usuários

É um recurso bem interessante para controle pessoal de usuários. Isso permite que você crie ACLsindividuais e gere LOGs de qualidade bem superior.

6.1 ncsa_authUsaremos o ncsa_auth por ser simples e já vir com o código do squid, mas não podemos deixar decitar o ncsa_plus do Pedro Orso e o smb_auth de Richard Huveneers.Se você fez a instalação do Squid como recomendamos acima, o ncsa_auth já está instalado. Casoesteja usando a instalação padrão da sua distribuição procure pelo mesmo (locate ncsa_auth)

6.2 Editando o squid.confProcure pela seção que fala sobre autenticação (TAG: authenticate_program) e insira as linhas:

• authenticate_program /usr/local/squid/bin/ncsa_auth /etc/passwd• authenticate_children 5

ATENÇÃO!!Dependendo da sua distribuição, o ncsa_auth pode estar em vários lugares, como /usr/bin, /usr/sbine assim por diante! Verifique onde está a sua e coloque as linhas acima de acordo!

Page 6: Squid

Quanto ao authenticate_children 5, é o suficiente se sua rede não é muito grande. Mude o valor deacordo com suas necessidades.

Agora vamos editar novamente a ACL de nossa rede interna (aquela da seção 2.3)

• acl rede_interna src 192.168.5.0/24 proxy_auth REQUIRED6.3 ReferênciasViSolve - Squid Configuration ManualNCSA PlusSMB proxy authentication

7. Controle de BandaEsse é um feature muito útil para quem tem uma banda estreita, ou simplesmente tem prioridadespara sua banda.O recurso do squid que usamos aqui é chamado de delay pools. É necessário que o squid tenha sidocompilado com essa opção ativa, conforme instruções da seção 2.

7.1 Editando o squid.confVamos adicionar algumas linhas. A primeira vai evitar que haja restrição de banda internamente, porisso não deixe de colocá-la.

• acl controle1 url_regex -i 192.168.5• acl controle2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg

.qt .ram .rm .iso .raw .wav .mov• delay_pools 2• delay_class 1 2• delay_parameters 1 -1/-1 -1/-1• delay_access 1 allow controle1• delay_class 2 2• delay_access 2 allow rede_interna• delay_access 2 allow controle2

7.2 ReferênciasBandwidth Limiting HOWTO

8. Utilidades PúblicasAqui estão alguns comandos que podem ser úteis em alguns casos. Espero incluir mais coisas aqui em breve.

8.1 Resetando o cache do squidPode ocorrer do squid travar alguma vez. Para tentar resolver isso, pare o squid e execute:

#squid -z

O que é Squid e porque utilizá-loHá pouco tempo eu resolvi entrar no mundo Linux e minha maior dificuldade era entender o que o pessoal falava. Neste artigo vou explicar como montar um servidor Squid passo a passo, explicando cada etapa. Estou usando Debian Netinst, disponível para download no site oficial do Debian.

Page 7: Squid

Desculpem, mas não será possível divulgar o material bibliográfico, pois ao longo da pesquisa este referencial não foi salvo. Mas uma coisa é certa, o pessoal do VOL está sempre disposto a ajudar, 80% do aprendizado foi pesquisando no www.vivaolinux.com.br e google.com/linux.

Squid Web Proxy CacheSquid é um proxy, o mesmo tem como principal utilidade filtrar e definir regras para o acesso a web. Uma grande vantagem de usar o Squid é a sua função cache, a mesma guarda no cache os sitesacessados, e quando o acesso a um site presente no cache é solicitado, automaticamente é retornado ao usuário o site do cache. Sendo assim uma parte da banda é liberado. Tem dois tipos de cache, na memória principal e na secundaria. Com base na explicação passada recomenda-se um computador com HD de rápido acesso e uma quantia considerável de memória RAM.

Obs: Neste artigo será necessário acesso a internet para instalação dos pacotes.

Instalando o SquidO apt é um comando de instalação remoção e modificação de programas, muito simples de usar.

Obs.: Sempre que o "#" estiver a frente de um comando, isto significa que tem que ser executado como root.

# apt-get install squid3

O arquivo de configuração padrão do Squid fica em /etc/squid/squid.conf, porém como estamos instalando o squid3, o caminho altera para /etc/squid3/squid.conf.

Vamos editar o squid.conf:

# vi /etc/squid3/squid.conf

Optei por utilizar o arquivo padrão do squid fazendo apenas as alterações necessárias, portanto para chegar ao material abaixo será necessário percorrer o squid.conf. Repare que no squid.conf existem as ACLs, como padrão ele já vem com as seguintes ACLs:

acl SSL_ports port 443 #httpsacl Safe_ports port 80 # httpacl Safe_ports port 21 # ftpacl Safe_ports port 443 # httpsacl Safe_ports port 70 # gopheracl Safe_ports port 210 # waisacl Safe_ports port 1025-65535 # unregistered portsacl Safe_ports port 280 # http-mgmtacl Safe_ports port 488 # gss-httpacl Safe_ports port 591 # filemakeracl Safe_ports port 777 # multiling httpacl CONNECT method CONNECT

Logo abaixo das ACLs padrões tem um espaço, e ai é o lugar determinado para edição das suas ACLs. As ACLs podem ser entendidas como o link que o Squid faz com as regras. Porém o que dita

Page 8: Squid

as regras são as http_access.

Exemplo - você quer criar uma lista de sites a serem bloqueado:

# vi /etc/squid3/sites_bloqueados

No squid.conf teremos a seguinte ACL:

acl block_sites url_regex "/etc/squid3/sites_bloqueados"

Obs: block_sites é o nome da acl, e a mesma está encarregada de trazer para o Squid a lista presenteno arquivo sites_bloqueados.

Para autorizar um computador a acessar a internet também é necessário criar uma ACL.

Exemplo:

acl rede src 192.168.0.0/24acl gerente src 192.168.0.ip_gerente

Mas como dito acima, as regras são ditas pelas http_access. Veja o simples caso de bloquear os sitespara rede, mas o gerente tem acesso total.

#O gerente tem acesso total e está no topohttp_access allow gerente

#A partir daqui quem acessar está proibido de acessar os sites da lista block_siteshttp_access deny block_sites

#Todo o range de rede declarado pode acessar a internet, exceto os sites bloqueadoshttp_access allow rede

#Se não se encaixa em nenhuma das alternativas acima, não usa a internethttp_access deny all

Nas http_access a ordem é feita de cima para baixo, sendo que os níveis superiores tem privilégios aos inferiores.

Sempre ao fazer alterações no squid.conf, para não ter que reiniciar o serviço, use o comando "squid3 -k reconfigure" para colocar em prática as alterações feitas.

Agora ao tentar acessar a internet ainda não estará funcionando, pois o Squid configurado acima não está em modo transparente. É necessário configurar no browser os parâmetros do proxy.

Ex.: Firefox > Ferramentas > Avançado > Rede > Configurar > Coloque o IP do servidor e a porta do Squid, que por padrão é 3128 (pode-se alterar).

Para que o seu servidor proxy esteja completo é preciso configurar a rede e compartilhar a internet. Não entraremos em detalhes, mas um material muito bom é:

• Roteamento de pacotes e NAT no Linux [Dica]

E o arquivo de configuração da rede é /etc/network/interfaces.

Page 9: Squid

Exemplo de interfaces:

# The loopback network interfaceauto loiface lo inet loopback

auto eth0iface eth0 inet staticaddress 192.168.0.10netmask 255.255.255.0gateway 192.168.0.1network 192.168.0.0broadcast 192.168.0.255

auto eth1iface eth1 inet staticaddress 192.168.1.10netmask 255.255.255.0gateway 192.168.1.1network 192.168.1.0broadcast 192.168.1.255

Dica: coloque cada placa em um range.

Mais detalhes em: