Squid é uma aplicação para proxy e cache web, podendo ser utilizado inclusive como proxy reverso.
Nesse exemplo vou mostrar como configurar um simples servidor de proxy utilizando o squid no debian (squeeze). Vale lembrar que o debian possuí duas versões do squid em seus repositórios e que esse tutorial foi baseado e testado na versão 3 do squid.
Instale o squid
apt-get install squid3
O arquivo de configuração do squid fica em /etc/squid3/squid.conf porém, se você visualizar este arquivo irá perceber que o mesmo possuí diversas linhas com comentários e poucas linhas com a configuração padrão do serviço. E por este motivo iremos criar um novo arquivo de configuração apenas com os parâmetros necessários para o funcionamento do squid, mas eu aconselho a leitura desses comentários pois praticamente toda configuração possível no squid está descrita com vários exemplos.
Renomeei o arquivo squid.conf para squid.conf.default
mv /etc/squid3/squid.conf /etc/squid3/squid.conf.default
Agora crie um novo arquivo squid.conf
vi /etc/squid3/squid.conf
E adicione o seguinte conteúdo
#Squid Listen port 3128 http_port 3128 acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports http_access allow localhost # And finally deny all other access to this proxy #http_access deny all hierarchy_stoplist cgi-bin ? # Leave coredumps in the first cache dir coredump_dir /var/spool/squid3 # Add any of your own refresh_pattern entries above these. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
Todos esses parâmetros são as configurações padrão que estão no arquivo squid.conf.default, eu apenas removi os comentários e exemplos.
Percebam que no conteúdo que adicionamos existe o seguinte parâmetro comentado http_access deny all por padrão esse parâmetro está descomentado porém, seu comentei o mesmo pois ele bloqueia o acesso a qualquer endereço, ip ou domínio portanto no momento o acesso a qualquer endereço está liberado. Se o seu objetivo é bloquear o acesso a tudo e permitir que apenas alguns endereços possam ser acessados você deve descomentar esse parâmetro e depois adicionar a configuração de permissão de acesso para os endereços que você desejar, lembre-se sempre a configuração de bloqueio deve vir antes da configuração de liberação, com exceção para um caso que irei mostrar mais adiante.
Agora embaixo desse conteúdo que adicionamos ao arquivo squid.conf, iremos adicionar a configuração customizada, como exemplo irei criar 3 regras de acesso, uma regra bloqueando determinadas palavras, outra regra bloqueando determinados domínios e uma regra permitindo o acesso a minha rede local.
Adicione o conteúdo abaixo no final do arquivo /etc/squid3/squid.conf
########################### # Configuração Personalizada # ########################### #Bloqueados acl dominios dstdomain "/etc/squid3/dominios" http_access deny dominios acl palavras url_regex -i "/etc/squid3/palavras" http_access deny palavras #Rede Local acl redelocal src 7.7.7.1/8 #Substitua pelo ip da sua rede ex:192.168.0.1/32 http_access allow redelocal
Crie o arquivo dominios em /etc/squid3/
vi /etc/squid3/dominios
E adicione os domínios a serem bloqueados (Um domínio por linha!!)
.facebook.com.br
.twitter.com.br
Crie o arquivo palavras
vi /etc/squid3/palavras
E adicione as palavras que serão bloqueadas
sexy
playboy
sexo
microsoft
Essa é a configuração necessária para bloquear uma lista de domínios, bloquear domínios que contenham a palavra definida na lista de palavras e liberar o acesso para os endereços da rede local. A política de acesso do squid é baseada nas ACL que são definidas pelo nome, tipo e endereço ou listas de endereços que irão ser bloqueados ou liberados pelo comando http_access.
Após a configuração e criação dos arquivos reinicie o squid
/etc/init.d/squid3 restart
Vamos testar se nosso proxy está funcionando, utilize um navegador e o configure para utilizar o ip do seu servidor como proxy. Se estiver utilizando firefox vá em Preferências/Avançado/ selecione a aba Rede e clique em Configurar conexão
Em HTTP: adicione o endereço ip do servidor onde você configurou o proxy na Porta 3128.
Após a configuração acesse algum site e perceba que irá conseguir navegar sem problemas, mas ao tentar acessar um site bloqueado ou que contenha uma palavra bloqueada em seu endereço você irá se deparar com uma mensagem de acesso negado como o da imagem abaixo.
Explicando a Configuração
#########################
# Configuração Personalizada #
#########################
#Permite o acesso a domínios que contenham palavras bloqueadas
acl livre url_regex -i "/etc/squid3/livre"
http_access allow livre
#Bloqueados
acl dominios dstdomain "/etc/squid3/dominios"
http_access deny dominios
acl palavras url_regex -i "/etc/squid3/palavras"
http_access deny palavras
#Rede Local
acl redelocal src 7.7.7.1/8 #Substitua pelo ip da sua rede ex:192.168.0.1/32
http_access allow redelocal
A parte em negrito foi a configuração adicional ao arquivo squid.conf, veja que é uma configuração de liberação de acesso que está sendo definida antes do bloqueio das palavras.Crie o arquivo livre
vi /etc/squid3/livre
E adicione o domínio microsoftstore.com
.microsoftstore.com
Reinicie o squid
/etc/init.d/squid3 restart
Agora tente acessar o site da microsoft ou algum domínio que contenha a palavra microsoft
Bloqueado como esperado, agora vamos tentar acessar microsoftstore.com
Acesso total ao domínio microsoftstore.com, o único domínio autorizado que contenha a palavra microsoft.
Bom espero que esse post tenha sido útil para alguém, qualquer dúvida ou sugestão fique a vontade para comentar, lembrando que o arquivo squid.conf.default que renomeamos pode tirar várias dúvidas com vários exemplos nos comentários.