O documento descreve como configurar um proxy cache (squid) no Ubuntu e Debian para melhorar o desempenho da rede e reduzir o uso da banda larga. Ele explica como instalar e configurar o squid, criar arquivos de configuração, habilitar o proxy no navegador e testar a instalação.
Ambiente de desenvolvimento com docker e ruby on rails
Configurando um proxy cache Squid no Ubuntu/Debian
1. Configurando um proxy-cache usando o squid no ubuntu e
debian (básico)
Postado em Linux (OS) Network(Servidores) Por julio em 8/06/08
Esse tutorial eu irei ensinar a configurar o o básico do squid, que é um proxy-cache , que é uma
ferramenta fundamental para admistradores de redes com tráfego extremos para ajudar a diminuir o
consumo do link.
Um exemplo prático, se 10 usuários ascessarem o mesmo Web site ele na verdade será carregado
apenas uma vez no servidor de proxy , diminuindo o tráfego do link, que na maioria das vezes não é
muito largo. outro exemplo se 10 usuários baixarem 10 vezes um arquivo, ele só vai ser realmente
baixado 1 vez , o resto vai vir do cache do proxy, isso se aplica a imagens vídeos e outras coisas .
Para esse tutorial é importante que você saiba o básico de comandos do console e da estrutura de
diretórios e inicialização de programas em modo texto (console) recomendo ler o guia foca se
quiser se aprofundar no mundo do software livre . Outra coisa , aprenda a usar o google , ele sempre
lhe trará respostas , antes mesmo de postar em foruns e listas.
Bem vamos começar .
Passos que vão ser feitos nesse tutorial.
1.Instalar o programa .
2.Criar o arquivo ip_Liberados dentro do diretório /etc/squid/
3.Renomear a conf padrão .
4.Baixar e descompactar a conf que eu editei .
5.Reiniciar o squid
6.Habilitar o proxy no navegador
7.Testar ver se está funcionando corretamente.
8.Duvidas consultar o google .
Vamos instalar o squid .
No ubuntu .
sudo apt-get install squid
No debian como root.
apt-get install squid
A conf padrão dele fica no diretório.
/etc/squid
se chama squid.conf
/etc/squid/squid.conf
Dica! caso você queira tirar os comentários # do arquivo squid.conf
cat squid_original.conf | grep -v ^# | uniq | tee squid.conf
Então vamos primeiro criar um aquivo e no qual vamos inserir os Ips que desejamos liberar no
proxy, para evitar o uso de seu proxy na internet .
sudo touch /etc/squid/ip_Liberados
ou no debian
# touch /etc/squid/ip_Liberados
E vamos iserir os ips que desejamos . para saber o ip da sua máquina
2. sudo ifconfig
julio6@Ubuntu-Desktop:~$ sudo ifconfig
[sudo] password for julio6:
eth0 Encapsulamento do Link: Ethernet Endereço de HW 00:15:F2:2B:98:52
inet end.: 192.168.254.20 Bcast:192.168.254.255 Masc:255.255.255.0
endereço inet6: fe80::215:f2ff:fe2b:9852/64 Escopo:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1
pacotes RX:65393 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:60230 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:64778657 (61.7 MB) TX bytes:9155948 (8.7 MB)
IRQ:18 Endereço de E/S:0xb000
Vamos editar o arquivo que criamos e vamos inserir os ips que desejamos .
sudo nano /etc/squid/ip_Liberados
No meu caso esses.
192.168.254.1
192.168.254.20
192.168.254.2
192.168.254.3
192.168.254.4
192.168.254.5
192.168.254.15
O squid já vem com a conf dele padao e pronta para usar
Agora eu vou mostrar a conf abaixo editada por min .
################################
############Porta Padrão #####################
http_port 3128
#########################################
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
cache deny QUERY
####### Caso exista o Apache evita conflitos #############
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
############Logs do Squid######################
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log squid
############ verifica o arquivo de Host da maquina ########
hosts_file /etc/hosts
###########################################
############Configuração do cache##################
############tamanho do cache coloque o melhor pra seu uso #
cache_mem 10 GB
############ tamanho maximo de arquivos na memoria ####
maximum_object_size_in_memory 128 KB
############ tamanho maximo do arquivo no cache #######
maximum_object_size 300 MB
minimum_object_size 0 KB
cache_swap_low 90
3. cache_swap_high 95
###########################################
############Regras de Liberar O seu IP ###############
############ Proteger a sua rede de usos externos ao squid ###
############Acl que consulta o arquivo ##########
acl Libera_IP src “/etc/squid/ip_Liberados”
############ Regra que libera a acl Libera_IP #######
http_access allow Libera_IP
######################################
############Log de erros em Portugues##########
######################################
error_directory /usr/share/squid/errors/Portuguese
#######################################
############Atualizar Cache##################
#######################################
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
############Faixa da rede interna ##############
acl all src 0.0.0.0/255.255.255.0
#######################################
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
############Partas do SSL padrão #############
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
############ Portas Liberadas ##################
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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
##########################################
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
############Bloqueia todas as portas menos as sefe portas###
http_access deny !Safe_ports
##########################################
4. http_access deny CONNECT !SSL_ports
############Libera Localhost#####################
http_access allow localhost
############Bloquear todos ips e acessos externos #######
http_access deny all
############## Libera que recarregue as páginas#########
http_reply_access allow all
############Libera consultas icpms #################
icp_access allow all
############################################
cache_effective_group proxy
############endereço de erros do cache ###############
coredump_dir /var/spool/squid
Baixe aqui a conf .
No console.
cd /etc/squid
Renomeiar a conf padrão
sudo mv squid.conf squid.conf-old
wget http://www.xjulio.info/blog/squid.conf.tar.gz
tar -xzvf squid.conf.tar.gz
Reniciar o squid.
# /etc/init.d/squid restart
ou
sudo /etc/init.d/squid restart
Lembrando que a conf que vem no squid já é o suficiente, basta editar a parte que libera acessos
externos .
Para habilitar o proxy no navegador firefox .
vai em preferências do navegador .
E coloca o endereço de ip do seu proxy .
Etapa 4: Realizar a instalação e configuração do servidor proxy squid
O squid 2.6 pode ser instalado via apt-get, pois já possui suporte a NTLM nativo.
Vamos ao que interessa:
- Efetuando o Download e a Instalação
# apt-get install squid
5. - Efetuando bkp do arquivo de configuração original
# cd /etc/squid
# mv squid.conf squid.original
- Limpando todas as linhas comentadas do squid.original e gerando o squid.conf
# egrep -v "^#|^$" squid.original > squid.conf
- Gerando o diretório de logs e liberando as permissões
# mkdir /var/log/squid
# chown -R proxy.proxy /var/log/squid
Editando o arquivo squid.conf e colocando as linhas abaixo (As linhas em vermelho são as linhas
utilizadas pela autenticação)
# nano /etc/squid/squid.conf
http_port 3128
cache_effective_user proxy
cache_effective_group proxy
cache_log /var/log/squid/cache.log
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
auth_param ntlm program /usr/bin/ntlm_auth TESTE/DC01 –helper-protocol=squid-2.5-ntlmssp
auth_param ntlm use_ntlm_negotiate off
auth_param ntlm children 10
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 5 minutes
auth_param basic program /usr/bin/ntlm_auth TESTE/DC01 –helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Digite o LOGIN/SENHA
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern .0 20% 4320
acl all src 192.168.88.0/255.255.255.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
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 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 acesso proxy_auth REQUIRED # Solicitando a autenticação
http_access allow manager localhost
6. http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow acesso # Liberando usuários autenticados
http_access allow all
http_reply_access allow all
icp_access allow all
coredump_dir /usr/local/squid/var/cache
- Criando o cache e iniciando o squid.
# squid -z
# squid &
- Para utilizar as regras baseadas em Grupos do Active Directory, utilize as seguintes linhas no seu
squid.conf:
external_acl_type nt_group %LOGIN /usr/lib/squid/wbinfo_group.pl
acl AllowedWindowsGroups external nt_group GrupodoAD
http_access allow AllowedWindowsGroups
Depois de editar o seu squid.conf, não esqueça de recarregá-lo:
# squid –k reconfigure
Reiniciando:
# /etc/init.d/squid restart
Testes:
Efetue a configuração do PROXY no navegador (Servidor Proxy: 192.168.0.1 Porta:3128) e tente
acessar algum website.
Monitoramento:
Monitorando o arquivo de log de acessos do squid com o commando tail –f e vemos que
o acesso foi liberado utilizando o usuário dunha, que é o usuário logado na estação de trabalho.
# tail –f /var/log/squid/access.log
1172165029.325 756 192.168.0.10 TCP_MISS/200 9646 GET
Instalação
Para instalar o SARG no Ubuntu 10.04 LTS Lucid Lynx primeiramente vamos atualizar a lista de
pacotes do Ubuntu.
sudo apt-get update
Após a atulização da listagem de pacotes, vamos instalar o pacote do SARG no Lucid.
sudo apt-get install sarg
Configuração do SARG no Ubuntu
Após a instação é necessário configurar o SARG no Ubuntu 10.04 LTS Lucid Lynx para que o
mesmo funcione corretamente.
Acesse a pasta de configuração do SARG
7. cd /etc/sarg
Abrir o arquivo de configuração do SARG com seu editor favorito, nos exemplos abaixo estarei
usando o vim
sudo vim sarg.conf
Caso deseje alterar o idioma do SARG altere a linha:
language English
para
language Portuguese
Para que as páginas dos relatórios gerados pelo SARG sejam visualizadas no navegador, é
necessário linkar a pasta de saída dos relatórios do SARG para a pasta do servidor web.
sudo ln -s /var/lib/sarg /var/www/
Ao se executar o comando sudo sarg os relatórios são gerados, porém a seguinte mensagem de erro
aparece na saída da linha de comando:
SARG: Unknown option site_user_time_date_type table
Para que a mesma não apareça, acesse o arquivo de configuração do SARG e comente a seguinte
linha do arquivo:
site_user_time_date_type table
Para gerar os relatórios do SARG e verificar se tudo correu como esperado execute:
sudo sarg
Para verificar páginas de relatório geradas pelo SARG acesse no seu navegador:
http:/ip-do-servidor//sarg
SARG e o cron do Ubuntu
Para que o SARG seja executado automáticamente todos os dias, gerando os relatórios de acesso do
SQUID automaticamente é necessário alterar o arquivo /etc/cron.daily/sarg para que o mesmo
execute o comando corretamente, para isso acesse o arquivo:
sudo /etc/cron.daily/sarg
O script de execução do SARG deve ficar conforme abaixo:
#!/bin/sh
if [ -x /usr/bin/sarg ]; then
/usr/bin/sarg
fi
Para que o SARG execute antes do logrotate do SQUID é necessário alterar o nome do arquivo:
sudo mv /etc/cron.daily/sarg /etc/cron.daily/ksarg
Assim o script do SARG irá executar logo antes do script do logrotate, gerando os relátorios
corretamente.
Remover os scripts de executação semanal e mensal do SARG:
sudo rm /etc/cron.weekly/sarg
sudo rm /etc/cron.monthly/sarg
8. Aumentando a segurança
Para aumentar a segurança dos relatórios do SARG, permitindo apenas usuários autorizados
acessarem os mesmos, iremos fazer com que o servidor web peça um usuário e senha para acessar
as páginas do SARG.
Acesse a pasta com as de saída do SARG:
cd /var/lib/sarg
Crie o arquivo .htaccess nessa pasta:
sudo vim .htaccess
E, dentro do arquivo criado, coloque o seguinte conteúdo:
AuthType Basic
AuthName "Acesso restrito!"
AuthUserFile /var/lib/sarg/.htpasswd
require valid-user
Agora iremos criar o arquivo contendo os usuários e as senhas com permissão para visualizar os
relatórios do SARG:
sudo htpasswd -c /var/lib/sarg/.htpasswd admin
Após a executação do comando acima, será solicitado a senha e sua confirmação para o usuario
admin.
Agora iremos editar o arquivo de configuração do Servidor Web Apache
sudo vim /etc/apache2/httpd.conf
E adicione as seguintes linhas:
#Relatorio SARG
Alias /sarg /var/www/sarg
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
É necessário reiniciar o Servidor Web Apache para as que as configurações tenham efeito:
sudo /etc/init.d/apache2 restart
PROXY TRANSPARENTE
Com o Proxy Transparente autenticação não funciona, é necessário implementar um linha de
IPTABLES para que possamos redirecionar o tráfego da porta 80 para a porta 3128. Para ativar o
proxy transparente, rode o comando abaixo:
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 8080 -j REDIRECT –to-port 3128
Para ativar o suporte ao modo transparente dentro do arquivo “/etc/squid/squid.conf” coloque a
seguinte linha e depois reiniciar o serviço.
9. sudo gedit /etc/squid/squid.conf
http_port 3128 transparent
Salve o arquivo
sudo /etc/init.d/squid restart
squid.conf
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl redelocal src 10.1.0.0/24
acl manager proto cache_object
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563 # https, snews
acl SSL_ports port 873 # rsync
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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl sectionx proxy_auth REQUIRED
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access allow users
http_access deny redelocal
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
Redirecionamento do HTTP traffic.
eth1 LAN
eth0 WAN
192.168.0.1 Endereço da placa de rede da LAN
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp –dport 80 -j DNAT –to-destination
192.168.0.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 3128
10. squid.conf
http_port 3128
visible_hostname Poseidon
# Configuração do cache
cache_mem 42 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 300 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
# Localização do log de acessos do Squid
cache_access_log /var/log/squid/access.log
# Erros
error_directory /usr/share/squid/errors/Portuguese
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 10000 20000
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 Safe_ports port 901 # SWAT
acl Safe_ports port 995 143 25 110 # Email
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
11. # Filtros por palavras e por dominios
acl proibidos dstdom_regex "/etc/squid/secure/block"
http_access deny proibidos
# Libera para a rede local
acl redelocal src 192.168.2.0/24
http_access allow localhost
http_access allow redelocal
# Bloqueia acessos externos
http_access deny all
esse aqui é um script de iptables que eu fiz uma vez, nele eu redireciono tudo que ta entrando na
porta do squid para a porta 80, portanto usando proxy transparente. No qual nao é necessario
configurar os clientes.
echo "##########################"
echo "# INICIANDO FIREWALL #"
echo "##########################"
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ip_conntrack
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F POSTROUTING -t nat
iptables -F PREROUTING -t nat
iptables -P FORWARD ACCEPT
WAN="eth0"
iptables -t nat -A PREROUTING -s 192.168.2.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 192.168.2.0/24 -p tcp --dport 110 -j REDIRECT --to-port 8110
iptables -A POSTROUTING -t nat -s 192.168.2.0/24 -o $WAN -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 81 -i eth0 -j DNAT --to 192.168.2.1:80
echo 1 > /proc/sys/net/ipv4/ip_forward
IPREDE=192.168.2.0/24
DNS1=200.165.132.148
DNS2=200.149.55.142
12. Primeiro descubra qual é a interface eth0 e eth1! :)
Edite o arquivo /etc/network/interfaces
O arquivo deve ficar assim
## Inicio do arquivo
auto lo
iface lo inet loopback
# Interface eth0 conectada ao modem
auto eth0
iface eth0 inet dhcp
# Interface eth1 conectada ao roteador/swicth
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
## Fim do arquivo
Reinicie o serviço:
# /etc/init.d/networking restart
Crie um arquivo chamado nat.sh e cole isto lá dentro:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
Salve e mude as propriedades do arquivo para que ele possa ser executado:
# chmod +x nat.sh
Execute-o:
# ./nat.sh
tenho dois arquivos que rodam na inicialização
nat e firewall
descrição:
nat:
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F POSTROUTING -t nat
iptables -F PREROUTING -t nat
modprobe iptable_nat
13. echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
firewall:
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
Estou usando o Ubuntu 10.04 LTS, que acabei de atualizar a partir do 9.10, squid 2.7
STABLE6(somente como cache/web)
o micro tem duas placas de rede
eth0 = ip fixo, de onde vem a conexão com a internet
eth1 = conexão até um AP com software da ApRouter, configurado como bridge
* Estações conectam ao servidor via wireless
Agora vem o problema.
- as estações conectam à internet, desde que estejam configuradas para usar o proxy, sendo que o
mesmo "era" para ser transparente
- se eu tirar o proxy nas estações, não há navegação
- incluí as linhas /nat e /firewall no arquivo /etc/rc.local
- quando inicio o servidor, tenho que reiniciar o squid para a conexão funcionar
arquivo rl.local=
/nat
/firewall
/etc/init.d/squid restart
exit0
Edite o arquivo de configuração do SQUID (no Linux, geralmente em /etc/squid/squid.conf) e
acrescente as seguintes instruções:
acl streaming req_mime_type ^video/x-ms-asf
acl musica urlpath_regex -i .aif$ .aifc$ .aiff$ .asf$ .asx$ .avi$ .au$ .m3u$ .med$ .mp3$
.m1v$ .mp2$ .mp2v$ .mpa$ .mov$ .mpe$ .mpg$ .mpeg$ .ogg$ .pls$ .ram$ .ra$ .ram$
.snd$ .wma$ .wmv$ .wvx$ .mid$ .midi$ .rmi$
http_access deny musica
http_reply_access deny streaming
Depois é só reiniciar o serviço. No caso do Debian e afins:
# /etc/init.d/squid restart
Na prática, as ACLs acima bloqueiam o áudio e vídeo de rádios online, download de arquivos MP3
(que possam ser feitos eventualmente via HTTP), filmes e demais formatos que sobrecarregam o
seu link. Uma observação importante é que no SQUID, as regras/listas de acesso são executadas
14. sempre seqüencialmente, por isso a ordem em que elas aparecem no arquivo de configuração pode
influenciar no comportamento do webproxy. Isso significa que ao entrar em uma ACL (a condição
for verdadeira) o SQUID não checa/executa as posteriores.
Ubuntu + Squid Proxy + Dansguardian
Depois de andar às voltas e sem sucesso a tentar por um proxy gratuito a funcionar em Windows
com funcionalidade de filtro de conteúdos, resolvi virar-me para o Linux… Neste caso uma
configuração de Ubuntu 6.10 Edgy (desktop) + Proxy Squid e para filtro de conteúdos o
DansGuardian.
Começando…
Se a instalação do Ubuntu foi recente ou se ainda não se definiu a password para o root, esta é a
altura para fazê-lo.
sudo passwd
De seguida vamos actualizar o sistema.
Esta operação vai demorar um pouco e pode ser necessário o cd de instalação do Ubuntu.
sudo apt-get update
sudo apt-get upgrade
Instalar o Apache Web Server
sudo aptitude install apache2
Para servir de proxy o computador terá de estar configurado com ip fixo e não por dhcp.
Para isso editamos o ficheiro de configuração de rede e alteramos para os valores pretendidos.
sudo gedit /etc/network/interfaces
Procurar este texto e alterar para os valores pretendidos.
# The primary network interface
auto eth0
iface eth0 inet static
address 134.175.60.138
netmask 255.255.255.0
gateway 134.175.60.250
Gravar, fechar o ficheiro e reiniciar a rede:
sudo /etc/init.d/networking restart
Instalação do Proxy Squid.
sudo aptitude install squid
Nota: se no fim da instalação tiverem o erro “FATAL: Could not determine fully qualified
hostaname. Please set ‘visible_hostname’”, fazer:
sudo gedit /etc/squid/squid.conf
Procurar o texto “visible_hostname” e acrescentar a linha:
15. visible_hostname localhost
Gravar, fechar o ficheiro e reiniciar o squid:
sudo /etc/init.d/squid restart
Com isto o Squid deve estar a funcionar correctamente, passamos á instalação do DansGuardian
sudo aptitude install dansguardian
Se o comando anterior der um erro a dizer que não foi encontrado nenhum pacote com o nome
“Dansguardian”, temos de editar o ficheiro de sources do aptitude. Para isso fazemos:
sudo gedit /etc/apt/sources.list
Procurar e tirar o “#” das linhas:
# deb http://pt.archive.ubuntu.com/ubuntu/ edgy universe
# deb -src http://pt.archive.ubuntu.com/ edgy universe
Gravar e fechar o ficheiro, de seguida fazer:
sudo apt-get update
Votar a fazer:
sudo aptitude install dansguardian
Editar o ficheiro de configuração do dansguardian de maneira a filtrar tudo o que passa pelo proxy:
sudo gedit /etc/dansguardian/dansguardian.conf
No incio do ficheiro procurar a tag “UNCONFIGURED” e alterar para:
# UNCONFIGURED
filterip=
filterport=8080
proxyip=127.0.0.1
proxyport=3128
Gravar, fechar e reiniciar o dansguardian
sudo /etc/init.d/dansguardian restart
Agora é só configurar os browsers para usarem o proxy:
Para testar basta tentar aceder por exemplo a www.playboy.com e deve surgir um ecrã semelhante a
este:
16. Servidor Proxy (Squid)
Um servidor proxy é uma peça importante em uma rede interna que tenha contato com outra
pública, pois implementa uma série de facilidades e controles. Veremos, definitivamente, tudo sobre
ele.
Ao final deste artigo você será capaz de:
•Instalar e configurar o servidor proxy (squid)
•Configurar o squid para atuar como proxy transparente.
Conceitos de Servidores Proxy
O objetivo principal de um servidor proxy é possibilitar que máquinas de uma rede privada possam
acessar uma rede pública, como a Internet, sem que para isto tenham uma ligação direta com esta. O
Servidor proxy costuma ser instalado em uma máquina que tenha acesso direto à internet, sendo que
as demais efetuam as solicitações através desta. Justamente por isto, este tipo é chamado de Proxy,
pois é um procurador, ou seja, sistema que faz solicitações em nome de outros.
Considerações Iniciais
•Utilizaremos duas ferramentas de instalações.
•A primeira é a urpmi utilizada em algumas distribuições como a Mandriva e etc.
•A Segunda é o APT-GET utilizado em outras distribuições como Ubuntu e etc.
Instalação do Squid
Para instalar o Squid no Mandriva Linux, utilize o urpmi:
#urpmi squid -auto
Para instalar o Squid no Ubuntu, utilize o apt-get:
#apt-get install squid
O código fonte do Squid pode ser obtido no site oficial do projeto listado na seção "Para saber
mais".
Configurando o Squid
A Configuração do squid fica gravada em um arquivo chamado squid.conf, no diretório /etc/squid.
Entre várias opções de configurações do Squid, algumas merecem atenção especial pois definem o
funcionamento básico do programa.
http_port n
Esta opção é utilizada para definir em quais portas (n) o squid espera por conexões http. A porta
padrão é 3128, mas é possível especificar uma outra qualquer, dependendo da necessidade.
Exemplo: http_port 3128
cache_dir Tipo diretório Mbytes Nível-1 Nível-2
Esta opção serve para definir em quais diretórios serão armazenados os objetos. Tipo especifica o
tipo de sistema de armazenamento a ser utilizado. Atualmente o tipo que pode ser utilizado com
segurança é ufs.
Diretório especifica o nome do diretório onde há o arquivo que mantém os metadados dos objetos
17. armazenados no disco. Este arquivo é utilizado para recriar o cache durante a inicialização do
Squid. Mbytes especifica a quantidade de espaço em disco que deverá ser utilizada sob este
diretório.
O valor padrão é 100 MB. Nível-1 e Nível-2 especificam o número de diretórios de primeiro e
segundo nível, respectivamente, a serem criados, definindo na opção Diretório. Os valores padrão
são 16 e 256, respectivamente. É possível ter vários diretórios para cache, inclusive em discos
distindos.
Exemplo: cache_dir ufs /var/spool/squid 100 16 256
cache_mgr e-mail
Esta opção permite especificar o e-mail do usuário do sistema que receberá uma mensagem caso o
Squid venha a ser encerrado de forma anormal. Este endereço também é mostrado em páginas de
erros retornadas aos usuários caso, por exemplo, a máquina remota não possa ser acessada.
Exemplo: cache_mgr squid_adm@imasters.com.br
cache_efective_user usuarop, cache_efective_group grupo
Estas opções servem para informar ao Squid com qual ID de usuário e de grupo, respectivamente,
ele deve ser executado, caso seja iniciado como root, que é como ele costuma ser iniciado.
Exemplo: cache_efective_user squid
cache_efective_group squid|
cache_mem mem
O squid utiliza muita memória por razões de desempenho. É muito mais demorado ler algo do disco
do que diretamente da memória como todos sabem. Mas deve-se estar atento ao definir este valor,
pois esse parâmetro não é o total de memória que o Squid usa, ele apenas põe um limite em um dos
aspectos da memória. Mas ele usa memória para outras atividades, assim, é necessário reservar
espaços para os outros processos.
Para verificar quanta memória o squid esta utilizando, podemos utilizar o comando top, por
exemplo.
Exemplo: cache_mem 8MB|
visible_hostname computador
Esta opção define o nome do computador que aparece em mensagens de erro e em outras
informações compartilhadas entre servidore cache. Colocar o nome do computador local.
Exemplo: visible_hostname Parede_de_fogo
Para iniciar o serviço squid como super usuário (root), o comando:
#service squid start (Mandriva)|
etc/init.d# ./squid start (Ubuntu)
Controle de acesso
O controle de acesso do squid tem recursos suficientes para definir com precisão quais tipos de
serviços podem ser acessados por quais máquinas e em quais horários. As regras da lista de controle
de acesso (Access Control List ou simplismente ACLs) tem uma sintaxe bastante simples, e são
incluídas no arquivo squid.conf
18. Tipos de elementos de ACL:
•src: endereço IP de origem (cliente);
•dst: endereço IP de destino (servidor);
•srcdomain: um domínio de origem (cliente);
•dstdomain: um domínio de destino (servidor);
•srcdom_regex: padrão de texto, ou expressão regular, que conste no conteúdo da origem
(cliente);
•dstdom_regex: padrão de texto, ou expressão regular, que conste no conteúdo do destino
(servidor);
•time: hora do dia e dia da semana;
•url_regex: comparação de URL baseada em expressão regular;
•port: número da porta do destino (servidor);
•myport: número da porta local na qual o cliente se conectou;
•proto: protocolo de transferência (http, ftp, etc);
•method: método http de requisição (get, post, etc);
•browser: Comparação executada baseada no cabeçalho (header) do cliente (browser);
•ident: nome do usuário;
•src_as: número do Sistema Autônomo da origem (cliente);
•dst_as: número do Sistema Autônomo do destino (servidor);
•proxy_auth: autenticação do usuário via um processo externo;
•proxy_auth_regex: expressão regular que consta em uma autenticação de usuário via um
processo externo;
•snmp_community: string que indica o nome da comunidade SNMP;
•maxconn: um número máximo de conexões de um mesmo endereço IP de cliente;
•arp: endereço Ethernet (MAC).
Nem todos os elementos de ACL podem ser usados com todas as listas de acessos (descritas a
seguir). Por exemplo, snmp_community só terá significado quando usado com a lista
snmp_access, bem como, os elementos src_as e dst_as somente serão usados na lista
cache_peer_access.
Cada elemento de ACL deve ser relacionado com somente um nome. Um elemento ACL com
determinado nome consiste em uma lista de valores. Quando forem sendo feitos os testes, os
múltiplos valores utilizarão o operador lógico OR. Em outras palavras, um elemento ACL será
válido, quando qualquer um de seus valores forem verdadeiros.
Você não pode dar o mesmo nome para diferentes tipos de elementos ACLs. Isto ocasionará um erro
de sintaxe.
Você poderá colocar diferentes valores para a mesma ACL em diferentes linhas. O Squid os
combinará em uma lista.
Lista de Acessos:
•http_acess: permite clientes http (browsers) acessarem a porta http. Esta ACL é a primária;
•icp_access: permite cachês "vizinhos" fazerem requisições ao seu cache através do protocolo
ICP;
•miss_access: permite a alguns clientes fazerem encaminhamento (forward) através de seu
cache;
•no_cache: define respostas que não deverão ser armazenadas no cache;
•always_direct; controla quais requisições deverão ser sempre encaminhadas diretamente aos
servidores de igem;
•never_direct: controla quais requisições nunca deverão ser sempre encaminhadas diretamente
19. aos servidores de origem;
•snmp_access: controla acesso ao agente SNMP do squid;
•cache_peer_access: controla quais requisições poderão ser encaminhadas a um servidor de
cache vizinho. (peer)
Uma regra de lista de acesso, consite da palavra allow (permitir) ou deny (negar), seguido de uma
lista de nomes de elementos ACL.
Uma lista de acesso consiste em uma ou mais regras de acesso.
As listas de acesso são verificadas na mesma ordem em que foram escritas. A pesquisa na lista
termina assim que uma requisição satisfazer uma regra.
Se uma regra possuir múltiplos elementos de ACL, esta usará o operador lógico AND. Em outras
palavras, todos os elementos de uma regra precisarão ser validos para que esta regra seja válida. Isto
significa que é possível escrever uma regra que nunca será válida. Por exemplo, um número de
porta nunca poderá ser igual a 80 e 8000 ao mesmo tempo.
Vejam alguns exemplos práticos:
Se você quiser impedir que qualquer usuário acesse paginas que contenham a palavra "cracker" na
URL, acrescente as seguintes linhas no seu squid.conf:
acl proibir_cracker url_regex cracker|
http_access deny proibir_cracker
E o bloqueio ainda pode ser para máquinas especificas. Imagine que o usuário da máquina cujo IP é
10.0.0.95 esteja ocupando muito a sua rede, transferindo arquivos de música em formato MP3. Para
bloquear este usuário especifico, use a regra como a de baixo:
acl mp3 url_regex mp3|
acl usr_ofensor src 10.0.0.95/255.255.255.255|
http_access deny usr_ofensor mp3
Se quiser proibir todos os usuários de acessarem um determinado site:
acl site_proibido dstdomain .orkut.com|
http_access deny all site_proibido
Também é possível permitir ou proibir o acesso em determinados dias e horários:
acl tempo_proibido time MTWHF 15:00-16:00|
acl usr_ofensor src 10.0.0.95/255.255.255.255|
http_access deny usr_ofensor tempo_proibido
A regra acima bloqueia o acesso à internet para o IP 10.0.0.95 durante o período das 15:00 às 16:00
horas. A opção MTWHF indica os dias da semana em inglês. Também pode ser utilizadas as opções
A e S que equivalem ao sábado e ao domingo respectivamente.
Existem casos que uma empresa gostaria de liberar o acesso a internet apenas durante o horário de
almoço.
Para isso, a seguinte regra poderia ser aplicada:
acl funcionários src 10.0.0.0/0|
acl acesso_almoco time MTWHF 12:00-13:00|
http_access allow funcionários acesso_almoco|
http_access deny funcionários
20. Dependendo do número de domínios ou de palavras-chave listadas em ACLs é aconselhável
construir uma lista em um arquivo separado e indicá-lo no squid.conf. O arquivo com uma lista de
domínios ou de expressões regulares a serem bloqueadas deve conter uma entrada por linha, como
no exemplo:
•Orkut
•Playboy
•Sexo
•Blog
•Fotolog
Caso o arquivo seja salvo em /etc/squid/sites_proibidos, por exemplo podemos indicá-lo no arquivo
de configuração do squid da seguinte maneira:
acl funcionários src 10.0.0.0/0|
acl proibidos url_regex "/etc/squid/sites_proibidos" |
http_access deny funcionários proibidos
Após incluir todas as suas regras restritivas, não se esqueça de incluir regras especificando que tudo
o que não estiver expressamente proibido deve ser permitido. Na configuração original do
squid.conf, as linhas serão como a que segue:
acl rede_local src 10.0.0.0/255.0.0.0|
http_access allow all rede_local
Note que você deve definir a 'rede_local' como conjunto de endereço IP e máscara que melhor
descrevem a sua rede.
Normalmente o seu squid.conf virá com linhas como as que seguem:
#
# INSERT YOUR OWN RULE(S) HERE ALLOW ACCESS FROM YOUR CLIENTS
#
http_access deny all
Ela serve para bloquear o acesso ao squid até que ele seja configurado, e é interessante você deixá-
lo como última regra, pois desta forma, se a requisição não satisfazer nenhuma regra o squid irá
bloqueá-la.
Proxy Transparente
Utilizar o proxy transparente evita que o administrador tneha que configurar o navegador web de
cada usuário da rede, pois o uso do proxy passa a ser despercebido para o usuário. Alem disso, evita
que o usuário possa desabilitar o proxy e navegar diretamente na internet.
Para iniciarmos a configuração do squid como proxy transparente, insira ou descomente as
seguintes linhas no arquivo /etc/squid/squid.conf
httpd_accel_host virtual|
httpd_accel_port 80|
httpd_accel_with_proxy on|
httpd_accel_uses_host_header on
E, como root, execute o comando:
#iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j
REDIRECT --to- port 3128
21. Caso o iptables não esteja instalado, instale-o antes:
#urpmi iptables -auto
Ou
#apt-get install iptables
Note que no exemplo acima utilizamos a interface de rede eth0 como se fosse a interface ligada na
rede local. Você deve adaptar o exemplo à sua rede. O exemplo também assume que o iptables e o
servidor proxy estão sendo executados na mesma máquina. Caso os serviços estejam em máquinas
separadas, a linha de comando para o iptables é ligeiramente diferente:
#iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j
REDIRECT --to-dest IP:3128
IP - Deve ser substituido pelo endereco IP da máquina onde o servidor squid esta sento executado.
Para que esta regra esteja ativa logo após a inicialização do sistema operacional, execute em seguida
os comandos:
#iptables -save > /etc/sysconfig/iptables|
#chkconfig iptables on
Ao reiniciar o squid (#service squid restart ou etc/init.d# ./squid restart) os clientes já poderão
navegar normalmente em necessidade de especificar no browser qual servidor proxy deve ser
utilizado.
Dicas
•Não esqueça de verificar os arquivos de log do Squid quando não estiver conseguindo resolver
algum problema. O Diretório padrão de armazenamento dos arquivos de log é:
/var/log/squid/. Os principais arquivos são cache.log, access.log e o squid.out, que
armazenam respectivamente, informações sobre o cache do servidor proxy, os acessos feitos
através do proxy e mensagens de erro emitidas pelo deamon do Squid.
•Aqueles que preferem uma interface gráfica para configuração de servidores podem optar pelo
Webmin, um gerenciador de sistema com interface web que contém um módulo para
gerenciamento do Squid. O download do Webmin pode ser feito através do site
sudo nano / etc / network / interfaces
auto eth0
iface eth0 inet static
endereço 192.168.1.250
netmask 255.255.255.0
rede 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.88
post-up iptables-restore </ etc / iptables.up.rules
auto eth1
iface eth1 inet static
endereço 192.168.2.1
netmask 255.255.255.0
rede 192.168.2.0
22. broadcast 192.168.2.255
Etapa 3. Instale o Web Admin (webmin) (Opcional)
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.510-2_all.deb
dpkg-install-webmin_1.510 2_all.deb
sudo apt-get-f install
https: / / localhost IP-ENDEREÇO: 10000
* Nota: Certifique-se de dar permissão para o conjunto de regras de IPTABLES para acessar
webmin sobre a rede.
Etapa 4. Instalar e ClamAV ClamAV freshclam-
sudo apt-get install clamav clamav-freshclam
Etapa 5. O primeiro passo é instalar o squid 3
sudo apt-get install squid3
editar o arquivo de configuração do squid 3 em seu editor favorito
sudo nano / etc/squid3/squid.conf
e definir a transparência e os hosts permitidos
http_port 3128 transparentes
our_networks acl src 192.168.2.0/24
acl localnet src 127.0.0.1/255.255.255.255
http_access allow our_networks
http_access allow localnet
onde 192.168.2.0/24 é a faixa de IP da rede local. Provavelmente, você precisa ajustar o tamanho do
swap
cache_dir ufs / var/spool/squid3 7000 16 256
aqui o primeiro número indica o tamanho do cache em megabytes. Salve-se alterações e reiniciar o
proxy squid por
sudo / etc/init.d/squid3 reiniciar
Passo 6. Edite o / etc / sysctl.conf
sudo nano / etc / sysctl.conf
Descomente a linha que permitem o encaminhamento de pacotes IPv4 e IPv6
Net.ipv4.ip_forward = 1
Net.ipv6.conf.all.forwarding = 1
Passo 7. Editar o conjunto de regras de iptables e NAT FILTER
sudo nano / etc / iptables.up.rules
* Nat
-A PREROUTING-i eth1-p tcp-m tcp-dport 80-j DNAT-to-destination 192.168.2.1:3128
-A PREROUTING-i eth1-p tcp-m tcp-dport 80-j REDIRECT-to-ports 3128
23. -A POSTROUTING-s 192.168.2.0/24-o MASQUERADE eth0-j
* Filtro
-A INPUT-i lo-j ACCEPT
-A INPUT-m state-i eth0-estado realated, ESTABLISHED-j ACCEPT
-A INPUT-j ACCEPT eth1
-A INPUT-p tcp-m tcp-dport ACCEPT 22-j # permitir usar o ssh putty
-A INPUT-p tcp-m tcp-dport ACCEPT 10000-j # permitir acesso webmin
LOG-A INPUT-j
DROP-A INPUT-j
-A FORWARD-i eth1-j ACCEPT
-A OUTPUT-o lo-j ACCEPT
-A OUTPUT-o eth1-j ACCEPT
-A foward-o eth1-j ACCEPT
-A FORWARD-s 192.168.2.0/24-o eth0-j ACCEPT
-A FORWARD-d 192.168.2.0/24-m state estado ESTABLISHED, realted-I eth0-j ACCEPT
Passo 8. Editar rc.local
sudo nano / etc / rc.local
iptables-t nat-A POSTROUTING-s 192.168.2.0/24-o MASQUERADE eth0-j
Etapa 9. reiniciar o servidor
Passo 10. Configure a estação de endereço IP estático fazendo o IP LAN do Ubuntu como o
gateway. Certifique-se que o endereço IP da estação de trabalho está dentro da configuração de rede
de você.
Muitas vezes, depois de um grande tempo de uso do computador ou do servidor, você nota que o
consumo de memória está alto.
Isso acontece porque muitas vezes o Linux guarda um espaço na memória cache para programas e
comandos que foram usados recentemente, para que em execuções futuras sejam executados mais
rapidamente.
No entanto, para liberar esse espaço que muitas vezes é armazenado sem necessidade e causando
um uso elevado da memória não precisamos reiniciar o computador.
Basta executar o comando a seguir como root:
$ sync
$ echo 3 > /proc/sys/vm/drop_caches
O comando sync faz com que todo o cache do sistema de arquivos que está temporariamente
armazenado na memória cache, seja despejado em disco e liberado, prevenindo assim que se tenha
perda de dados.
Quando escrevemos “3″ no arquivo /proc/sys/vm/drop_caches dizemos para o Kernel liberar
pagecache, dentries e inodes.
Se escrevermos “1″, liberamos apenas pagecache e se escrevermos “2″ liberamos pagecache e
inodes. Nesse caso usaremos o “3″, pois ele faz o papel dos dois anteriores e ainda libera dentries.
Para visualizar a queda do uso do chache, basta digitar:
$ free -m
24. Caso queira criar um script para fazer essa limpeza automaticamente determinando um horário
específico, crie um arquivo chamado “limpar_memoria_cache”.
$ cd /usr/bin/
$ touch limpar_memoria_cache
$ chmod 755 limpar_memoria_cache
E insira o seguinte texto no arquivo:
#!/bin/bash
sync
echo 3 > /proc/sys/vm/drop_caches
Adicione o arquivo na cron, para programar sua execução todos os dias ao meio dia.
$ crontab -e
Adicione as linhas:
# mm HH DD MM DS tarefa
00 12 * * * /usr/bin/limpar_memoria_cache
Onde…
* mm: minutos
* HH: horas
* DD: dia
* MM: mês
* DS: dia da semana
* /usr/bin/limpar_memoria_cache: script de limpeza da cache
Pronto. Script criado e agendado para execução automática.
Reiniciando Squid automaticamente com Cron
Para facilitar fique logado como root
Criar um script aqui vai ter o nome de restarsquid.sh
Ele vai ser criado dentro da pasta /etc/squid
Crie o script vi /etc/squid/restartsquid.sh
Edite ele com os seguintes comandos
#! /bin/bash
RESTART="/etc/init.d/squid restart"
$RESTART
agora salve e saia ESC :wq
Agora e dar permissão para o script criado
chmod +x /etc/squid/restartsquid.sh
Agora faça um teste com o comando sh /etc/squid/restartsquid.sh
Ele vai reiniciar o squid pronto nosso escripe esta funcionando, agora vamos conrigurar o cron para
executar nosso script no horario desejado.
Para editar o Cron de o seguinte comando
25. crontab -e
agora um exemplo de edição
55 7 * * * root sh /etc/squid/restartsquid.sh
Pronto agora e so salvar com o comando ctrl+o e sair com ctrl+x
No exemplo o cron vai reiniciar o squid todos os dias as 7:55 da manhã
Esta tudo pronto agora e so reiniciar o cron ou reinicie seu linux.
sudo apt-get install apache2 php5 php5-mysql phpmyadmin php5-pgsql libpq-dev
php-pear php5-xsl php5-gd mysql-server-5.0 postgresql-8.3 pgadmin3 phppgadmin
php5-xdebug
Em interface gráfica, eu te indicaria:
Bluefish
Quanta
GPHPEdit
Nvu