Adicionando um proxy transparente

Os servidores proxy são a forma mais antiga de compartilhar a conexão entre vários micros. Diferente de um servidor configurado para compartilhar a conexão via NAT, que simplesmente roteia pacotes da rede local para a Internet e da Internet para a rede local, mascarando os endereços, um servidor proxy oferece um acesso mais limitado, intermediando a conexão, vasculhando o conteúdo dos pacotes e permitindo apenas o acesso a portas específicas. A grande desvantagem é que todos os micros da rede precisam ser configurados manualmente para utilizarem o proxy.

Usar um servidor proxy permite logar os acessos, impor restrições diversas, baseadas em horários, endereços e outras condições, limitar o uso de banda e assim por diante, o que faz com que eles sejam bastante populares em redes empresariais, onde a redução no uso da banda e o possível aumento na produtividade compensam o trabalho necessário.

Em uma rede doméstica, você pode configurar o servidor proxy para trabalhar em modo transparente, onde ele passa a fazer seu trabalho de forma invisível, sem que você precise configurar os micros da rede para utilizarem-no. O proxy complementa então o compartilhamento via NAT, cacheando os arquivos e as páginas acessadas.

O servidor passa então a armazenar atualizações do Windows Update, downloads diversos, páginas e imagens, pacotes instalados através do apt-get e tudo mais que for acessado via http. Com isso, muita coisa passará a ser acessada a partir do cache do servidor proxy, reduzindo o uso de banda e agilizando o acesso.

A principal limitação é que o proxy transparente irá cachear apenas o tráfego http, através da porta 80. Não é possível usar um proxy transparente para FTP e SSL, a menos que você configure os programas em cada PC manualmente para utilizarem o proxy. No Firefox por exemplo, a configuração de proxy vai dentro do menu “Editar > Preferências”, em “Rede > Configurações > Configuração manual de proxy”:

index_html_1ed8819c

Marcando a opção “Usar este proxy para todos os protocolos” você faz com que todo o tráfego passe pelo proxy e seja armazenado no cache, incluindo os arquivos baixados via FTP e https. O problema é que você precisaria fazer essa configuração em todos os micros da rede, o que anula a principal vantagem de usar um proxy transparente, que é a possibilidade de ter ganhos na velocidade de acesso sem precisar fazer modificações nos PCs da rede.

De qualquer forma, a configuração que utilizaremos atende tanto aos PCs configurados para acessar a web diretamente quanto aos PCs configurados manualmente para usar o proxy, de forma que a configuração dos clientes fica a seu critério.

O primeiro passo é configurar o servidor Linux com duas placas de rede para compartilhar a conexão, como vimos nos tópicos anteriores. O proxy transparente é apenas um add-on, que complementa o compartilhamento da conexão via NAT.

Com tudo funcionando, o próximo passo é instalar o Squid, o que é feito através da instalação do pacote “squid” usando o gerenciador de pacotes, como em:

# apt-get install squid

ou:

# yum install squid

A configuração do Squid é feita através de um único arquivo, o “/etc/squid/squid.conf“. O arquivo de exemplo, instalado junto com o pacote é assustadoramente grande, com mais de 3000 linhas, incluindo comentários sobre todas as opções disponíveis. Ele é uma boa leitura se você quiser se aprofundar na configuração do Squid, mas se você quer apenas ver seu proxy transparente funcionando, é mais fácil renomear o arquivo e começar com um arquivo de configuração vazio:

# mv /etc/squid/squid.conf /etc/squid/squid.conf.modelo
# touch /etc/squid/squid.conf

Abra o arquivo /etc/squid/squid.conf em branco que foi criado e copie o modelo de configuração abaixo. As opções em negrito são as opções que você precisa alterar:

# /etc/squid/squid.conf
http_port 3128 transparent
visible_hostname gdh
cache_mem 64 MB
maximum_object_size_in_memory 128 KB
maximum_object_size 512 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_access_log /var/log/squid/access.log
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 21 280 443 488 563 591 777 1025-65535
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 redelocal src 192.168.1.0/24
http_access allow localhost
http_access allow redelocal
http_access deny all

A primeira linha indica a porta utilizada pelo Squid (3128) e que ele deve operar em modo transparente (transparent). A segunda indica o nome do servidor (gdh), que você deve substituir pelo nome do seu.

As quatro linhas seguintes indicam a configuração do cache. O Squid trabalha com dois caches distintos, um cache mais rápido, feito na memória RAM, e outro mais lento (porém maior) feito usando espaço do HD.

O “cache_mem 64 MB” indica o tamanho do cache na memória RAM (é recomendável que você utilize no máximo 1/3 da memória total instalada), enquanto o “4096” na linha cache_dir ufs /var/spool/squid 4096 16 256″ indica o tamanho do cache que será feito no HD, em megabytes.

A linha “acl redelocal src 192.168.1.0/24” indica a faixa de endereços e a máscara utilizada na sua rede local (o /24 equivale à mascara 255.255.255.0). Combinada com as regras “http_access allow redelocal” e “http_access deny all” ela faz com que apenas micros da rede local possam utilizar o proxy, afastando qualquer possibilidade de que ele fique aberto para a Internet, independentemente da configuração do firewall.

A linha maximum_object_size 512 MB indica o tamanho máximo de arquivo que será armazenado no cache (arquivos maiores do que isso serão ignorados), o que evita que arquivos muito grandes, (como imagens ISO) que você vai baixar apenas uma vez, desperdicem espaço no cache.

Depois de terminar, reinicie o Squid para que a configuração entre em vigor:

# /etc/init.d/squid restart

Com isso, a configuração do servidor proxy está pronta, mas falta um passo igualmente importante, que é ativar a regra de firewall que faz com que os acessos destinados à porta 80, provenientes da rede local sejam encaminhados para o Squid. Sem isso, as requisições continuam sendo roteadas diretamente, sem passarem pelo proxy:

# iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128

Note que o “eth1” no comando especifica a interface de rede local, que deve ser alterada de acordo com a sua configuração. Este comando deve ser colocado no script de inicialização (juntamente com os comandos para compartilhar a conexão) para que seja executado automaticamente durante o boot.

Depois de ativar a regra de firewall, você pode testar o proxy navegando em algum dos micros da rede local (que use o servidor como gateway) e verificar o conteúdo do arquivo “/var/log/squid/access.log” no servidor. Conforme as requisições passam pelo proxy, o arquivo é alimentado com um grande volume de informações sobre as conexões realizadas, como em:

1201780615.239 1337 192.168.1.10 TCP_MISS/302 884 GET http://192.168.112.2o7.net/b/ss/mxmacromedia/1/F.3-XELvs – DIRECT/216.52.17.136 text/plain
1201780615.753 248 192.168.1.10 TCP_MISS/200 1526 GET http://wwwimages.adobe.com/www.adobe.com/lib/com.adobe/template/gnav/google.gif – DIRECT/204.245.162.8 image/gif
1201780647.918 29013 192.168.1.10 TCP_MISS/200 3036521 GET http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_linux.tar.gz – DIRECT/72.246.38.70 application/x-gzip

Pela presença das entradas no arquivo você percebe que os acessos estão realmente passando pelo proxy.

Uma última observação é que esta configuração vale para as versões recentes do Squid, do 2.6 em diante. Em versões antigas do Squid eram usadas 4 linhas adicionais no final do arquivo, no lugar do parâmetro “transparent” na primeira linha:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

A menos que você esteja usando o Debian Sarge, ou outra distribuição antiga, é improvável que esteja usando uma versão do Squid anterior à 2.6. De qualquer forma, fica a observação. A maior parte dos tutoriais disponíveis na web são anteriores à mudança e por isso ensinam a usar esta configuração antiga, que não funciona mais nas versões atuais. Em caso de dúvida, você pode checar a versão do Squid instalada usando o comando “squid -v”.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X