Como fazer o Squid funcionar da maneira mais simples possível no Xubuntu e derivados

Autor: Fernando E. Valle <phervalle at
gmail.com>

Introdução

Escrevo este artigo depois de conseguir sanar uma necessidade que
acontecia no meu trabalho, onde precisava restringir determinados sites.
Como trabalho em uma escola de informática, o acesso ao Orkut era
inevitável e os alunos não prestavam atenção no conteúdo da aula, só
tinham olhos para o Orkut, e simplesmente tirar o cabo da internet do
micro dos alunos iria me deixar com cara de instrutor chato, então
precisava mesmo era restringir o acesso ao Orkut e outros sites.

Num primeiro momento, teve um outro instrutor que tentou implementar um
proxy, como na escola só se trabalha com o Windows, e este outro
instrutor, bem porcamente só sabia trabalhar com este SO, "instalou" um
proxy pra Windows, não lembro o nome do programa, mas era algo como
free-proxy, enfim, um horror, a internet ficava mais lenta do que já era
na época (2007, conexão de 600K para umas 35 máquinas) e tinha um
problema impossível de resolver, não abria imagens. Eu sei que este
instrutor foi laureado na época, claro, usamos o proxy por
aproximadamente uma semana, nem o outlook recebia emails, de tão mal
feita que ficou a coisa, mas enfim.

Passou-se um tempo e outro instrutor resolveu fazer rodar um Squid para
Windows, no começo até que dava certo, mas como o PC que estava o Squid
era um que os alunos usavam durante as aulas, constantemente apareciam
problemas, e o fator Windows também ajudou para que o casamento entre
Squid e este fadado SO não desse certo. Um agravante muito alto que
acontecia com o Squid no Windows era que precisávamos liberar o Orkut
durante determinado momento nas aulas para os alunos, no finalzinho das
aulas por exemplo, e toda sexta feira também, daí que para tirar o Orkut
da lista de sites bloqueados era muito ruim, porque o Squid não
reiniciava, tinha sempre que reiniciar o PC para o Squid reiniciar e
pegar as alterações.

Ficamos, após estas experiências, um bom tempo sem proxy, mas chegou
agora no começo de 2010 um momento meio que insuportável, pouquíssimos
alunos prestavam muita atenção nas aulas, ficavam o tempo todo no Orkut e
mexendo na Colheita Feliz e similares, claro, deve ser muito mais
emocionante plantar batatas, tomates e roubar berinjela da fazenda ao
lado do que aprender como funciona a função SE no Excel ou como fazer
uma mala direta no Word, mas tudo tem seu tempo, não sou contra
comunidades virtuais e nem essas pequenas diversões, se eles estão ali
pagando caro por um curso, acho que seria muito mais interessante
aprenderem como funciona uma suíte de escritório para que quando forem
procurar emprego tenham garantia que sabem mexer nesses programas
básicos a ficarem arando a terra e mandando scraps só por mandar para
alguém.

Outra coisa terrível que acontece agora é que nossa banda de internet,
que era de 600KB em 2007, passou em 2009 para 10MB, e alguns alunos e
monitores da escola mais espertos descobriram isso e ficavam nos P2P da
vida direto, consumindo uma quantidade meio grande de banda. O problema
principal era justamente os torrents.

Bom, então eu resolvi implantar uma solução, Squid no Xubuntu,
que foi a distro Linux
que ficou mais estável na máquina responsável por ser o servidor, mas o
howto que vem a seguir pode ser feito em qualquer variante do Debian,
eu mesmo quando estava testando em máquinas virtuais fiz tudo no Debian e
só na aplicação final passei para o Xubuntu.

O que eu precisava: cancelar através de Proxy sites indesejáveis, um
relatório de acesso para ver os mais acessados ou algum site adulto
desconhecido que era acessado para tomar providências, e alguma maneira
um quanto tanto simples de bloquear e desbloquear o Orkut para que os
outros instrutores não precisassem editar arquivos de textos e nem darem
comandos de reinicialização no Squid, operação que eu sei que seria
muito complexa para eles.

Vamos a minha solução!

Instalação e configuração do Squid

A distro escolhida foi o Xubuntu 9.10, que é a versão mais
recente agora em fevereiro de 2010. Depois de instalada e configurada a
rede, instalamos o Squid:

# apt-get install squid

Bom, só lembrando que no Ubuntu e derivados você deve colocar antes de
dar qualquer comando de super usuário o termo sudo, eu particularmente
não gosto muito disso, prefiro colocar um su e ficar assim o quanto for
necessário, mas tudo bem.

Logo após termos instalado o Squid, vamos acessar seu diretório:

# cd /etc/squid/

Neste diretório encontraremos, por ora, somente o arquivo squid.conf,
que é onde se encontram as configurações do Squid. O arquivo é bem
grande, tecnicamente não usaremos ele, por isso, seria interessante
fazermos um backup para estudo posterior, mas se você quiser pode
apagá-lo e pegar uma conf pronta das milhares que tem na net ou usar a
minha, que postarei logo abaixo.

Mas, façamos um backup em todo caso, no arquivo de configurações do
Squid:

# mv squid.conf squid.conf.bkp

Agora vamos criar um arquivo squid.conf novo, vamos abrir um editor de
texto, usarei o pico que é um editor simples que vem no Xubuntu e é
menos ortodoxo que o "vi", que muitos temem:

# pico

Bom, precisamos criar uma configuração agora, em seguida a que eu estou
usando, basta copiar e colar no editor, depois salve o arquivo, CTRL+O,
dê o nome do arquivo squid.conf e em seguida feche-o, CTRL+X; logo
abaixo explico o mais importante para que possam ser feitas as mudanças
necessárias em cada caso:

http_port 3128
visible_hostname servidor
error_directory /usr/share/squid/errors/pt-br/

cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

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 SSL_ports port 443 563
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 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 901 # swat
acl Safe_ports port 1025-65535 # portas altas
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

acl palavrasproibidas dstdom_regex "/etc/squid/bloqueadas"
http_access deny palavrasproibidas

acl redelocal src 192.168.1.0/24
http_access allow localhost
http_access allow redelocal

http_access deny all

Explicando o que eu entendo como o mais importante no momento:

Na 1ª linha temos http_port 3128, esta é a porta que o Squid usará para
se comunicar, você pode alterá-la, 3128 é o valor padrão.

Em error_directory /usr/share/squid/errors/pt-br/ temos o diretório em
que se encontram as páginas de erro do Squid, veja bem, a pasta que se
encontra o idioma português é a pt-br, isso na versão do Xubuntu, na do
Debian era no diretório Portuguese, as versões eram diferentes, dentro
desta pasta se encontram vários arquivos HTML que você pode alterar como
quiser.

Eu queria alterar com um editor HTML para facilitar o trabalho, então
resolvi instalar o Kompozer, para quem quiser:

# apt-get install kompozer

É só entrar no diretório de erros, digitar o comando que executa o
kompozer, que é o nome do programa mesmo seguido do nome do arquivo, daí
é só fazer as alterações que quiser e salvar, pronto.

Bom, a parte do cache e das ACLs padrão não irei comentar, depois de
muito pesquisar cheguei nisso que está no arquivo, que é uma coisa um
quanto tanto padrão, mas enfim, seria interessante você dar uma olhada
na parte do cache, para mim, de acordo com minhas intenções, até que não
tem uma importância assim primordial.

Então chegamos aqui:

acl palavrasproibidas dstdom_regex "/etc/squid/bloqueadas"
http_access deny palavrasproibidas

Aqui é a parte mais interessante para mim, criamos uma ACL chamada
"palavrasproibidas", estas palavras se encontram dentro do arquivo
bloqueadas, então criaremos este arquivo:

# pico

No editor faça uma lista, linha por linha, de palavras que se estiverem
na barra de endereços e tentar ser acessada, serão bloqueadas pelo
Squid, é aqui que coloquei orkut, torrent, isohunt, mininova etc.

Salve o arquivo com o comando CTRL+O, o pico pedirá o nome do arquivo,
dê o nome bloqueadas e então feche o arquivo, CTRL+X.

acl redelocal src 192.168.1.0/24
http_access allow localhost
http_access allow redelocal

Agora nesta parte onde tem a faixa de IP 192.168.1.0 você coloca a da
sua rede, o 24 é a netmask, 24 corresponde a 255.255.255.0.

Depois de feitas as suas alterações, salvas e tudo o mais, temos que
reiniciar o Squid, faça o seguinte comando:

# /etc/init.d/squid restart

Testando e descobrindo o fake Squid

Para testá-lo, abra um navegador no PC servidor mesmo e coloque, nas
configurações de proxy, o endereço 127.0.0.1 (que é o do PC local) e em
porta 3128.

Tente acessar um site que você colocou no arquivo bloqueadas, se
aparecer a página de erros, tudo funcionando!

Bom, para testar nas máquinas clientes (o resto da rede), nas
configurações de proxy faça o seguinte, no endereço de proxy coloque o
IP do servidor (onde se encontra o Squid) e o número da porta o mesmo,
3128.

Caso você não saiba, o procedimento, num computador com Windows, no
Firefox, você clica em Ferramentas > Opções > Avançado > Rede
> Configurar conexão, marque a opção Configuração manual de Proxy, em
HTTP coloque o IP do servidor e na porta, 3128, OK > OK.

Fazendo exatamente este procedimento o Squid estará funcionando na rede
tranquilamente, mas este servidor eu chamo de um fake squid, porque veja
bem como se encontra a rede do modem roteando, sai um cabo que vai para
um hub/switch, desse hub saem cabos para toda a rede, inclusive para a
máquina com o Linux/Squid,
quer dizer, as máquinas com proxy ou sem proxy irão funcionar
normalmente na internet.

O certo seria sair o cabo do modem e entrar numa placa de rede do
servidor e pela outra placa de rede distribuir a conexão para o restante
da rede, mas como não tenho possibilidade de colocar duas placas de
rede num micro, fico assim… Ah… mas dá para se fazer uma placa
virtual, tudo bem, dá, mas para meu caso, que quero apenas restringir
certos acessos a determinados sites, e sei que nenhum aluno sonha em
saber o que é um proxy e como alterar proxy no navegador, não tem
problema utilizar um fake Squid, meu único entrave é configurar o proxy
manualmente máquina por máquina, mas tudo bem.

Script para bloquear/desbloquear orkut e acesso em qualquer PC da
rede

Bom, ainda tem o problema que é liberar o Orkut de modo que os outros
instrutores consigam fazer isso sem problemas e em qualquer laboratório.

Para isso fiz um pequeno script, que é o seguinte, na pasta /etc/squid/
abra o pico e digite o seguinte:

#!/bin/bash
sed -i "s/orkut/#orkut/g" bloqueadas
/etc/init.d/squid reload

Salve com um nome apropriado, como desbloquearorkut.sh, e em seguida
torne o arquivo executável:

# chmod +x desbloquearorkut.sh

Explicando, o sed irá substituir a palavra Orkut da lista por #orkut,
isso irá comentar a palavra Orkut tirando do contexto da lista de
proibições, na sequência, recarregamos o Squid (reload) ao invés de
darmos um restart, que demanda um bom tempo para ser feito e que também
corta a conexão enquanto fica restartando.

Para executar basta:

# ./desbloquearorkut.sh

Claro que precisamos também reverter isso, é só utilizar o mesmo script,
mas a segunda linha ficaria assim:

sed -i "s/#orkut/orkut/g" bloqueadas

Daí salve com um nome adequado e deixe-o executável.

Por último, isso deve ser executado em qualquer PC da rede, que é tudo
Windows, minha solução foi usar o SSH.

Primeiro instale um servidor ssh no Xubuntu, utilizei o OpenSSH:

# apt-get install openssh-server

Nas máquinas Windows utilizei o Putty, que se encontra em www.putty.org.

O putty nem precisa instalar, é só abrí-lo colocar o IP do servidor, e a
porta ssh, que por padrão é 22.

Logar, claro, e pronto, é só executar os scripts de bloqueio e
desbloqueio.

Gerando relatórios com o Sarg

Eu também precisava gerar relatórios para ver se tinha algum site
impróprio que os alunos estavam acessando para então bloqueá-los, então
instalei o Sarg:

# apt-get install sarg

Para gerar um relatório de acesso, basta executar o comando:

# sarg

Para visualizarmos este relatório utilizaremos um servidor web, o
Apache, instale-o:

# apt-get install apache2

Agora para visualizar o relatório, basta acessar por um navegador o
computador servidor, por exemplo, se o PC servidor fosse o computador
com o IP 192.168.1.222, então colocaríamos esse endereço no navegador:

http://192.168.1.222/squid-reports

Você pode fazer com que o Sarg seja executado de tempos em tempos usando
o cron por exemplo, e o Apache do jeito que está, qualquer um pode
acessá-lo, seria interessante uma senha de acesso, mas isso eu deixo
para quem quiser dar uma googlada por aí (palavra-chave htaccess).🙂

Conclusão

Esta foi minha solução para o problema de acessos na escola, claro,
altamente vulnerável, mas para meu caso dá pro gasto. Minha intenção foi
tentar escrever o artigo o mais detalhado possível, para quem está
começando conseguir fazer um proxy tranquilamente.

Espero que esteja tudo bem claro, qualquer dúvida, comentário ou
correção, é só comentar, estamos todos aprendendo, e os comentários
serão sempre bem vindos.


http://www.vivaolinux.com.br/artigo/Como-fazer-o-Squid-funcionar-da-maneira-mais-simples-possivel-no-Xubuntu-e-derivados

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s