
Vou mostrar como configurar um servidor Linux para compartilhar a internet de maneira mais segura com firewall bloqueando máquinas não cadastradas, proxy Squid fazendo cache full e controle de banda com CBQ.
Um servidor desse tipo é uma excelente opção custo/benefício para pequenas e médias empresas, para pequenos provedores de internet (ISP) ou mesmo para quem deseja apenas compartilhar a internet entre vizinhos.
Dessa vez é um artigo mais prático e menos teórico. Não vou entrar em explicações sobre o que é um proxy, como funciona o controle de banda ou tabelas do iptables.
O artigo foi divido em 3 partes:
1. Instalação do Squid com o patch ZPH (para fazer cache full)
2. Configuração do script de firewall e controle de banda
3. Interface web (desenvolvida em Django) para gerenciar o firewall
Introdução
O uso do GNU/Linux em servidores vem crescendo a cada ano. Não só pelo custo zero com licenças mas também por sua superior vantagem em desempenho, segurança e estabilidade em relação à outros sistemas operacionais.
Graças ao Linux e aos softwares open source descritos nesse artigo é possível criar uma solução economicamente viável para empresas que ainda não dispõem de uma estrutura adequada para compartilhar a internet.
Nesse exemplo vamos instalar o proxy Squid na mesma máquina que funciona como gateway. Com o crescimento da rede, é aconselhável separar um ou mais servidores apenas para proxy e definindo as rotas manualmente no gateway.
A distribuição utilizada foi Ubuntu Server 9.04 mas nada impede que seja aplicada à outras distros.
Compilando o Squid com suporte a Cache Full
Cache full é a ação de fazer com que os arquivos em cache utilizem uma velocidade maior independente do controle de banda definido para as máquinas clientes. Com o proxy Squid, alguns arquivos ficam em cache, ou seja, ficam no HD do seu servidor. Então quando um cliente acessa um site que contém algumas imagens em cache, o Squid não baixa novamente essas imagens, ele envia o que está armazenado no HD. Se arquivos em cache estão vindo do HD do servidor de proxy, então por que não usar a velocidade da rede (10/100 Ethernet por exemplo) para enviar esses arquivos aos clientes já que não consome o link de internet? É até melhor pois o carregamento do site fica mais rápido.
Existe um patch para o squid, chamado de ZPH, que faz uma marcação nos pacotes que estão em cache, e sabendo dessa marcação podemos definir uma velocidade no controle de banda para esses pacotes.
O patch ZPH NÃO funciona com qualquer versão do Squid. Até o momento em que estou escrevendo a última versão do Squid compatível é a 3.0STABLE8.
Vou baixar o código fonte do squid, o patch ZPH, aplicar o patch, compilar e instalar o Squid. Chega de teorias:
root@localhost:~# wget http://zph.bratcheda.org/squid-3.0.STABLE8-zph.patch root@localhost:~# apt-get source squid3 root@localhost:~# apt-get build-dep squid3 root@localhost:~# cd squid3-3.0.STABLE8 root@localhost:~/squid3-3.0.STABLE8# patch -p1 ../squid-3.0.STABLE8-zph.patch root@localhost:~/squid3-3.0.STABLE8# dpkg-buildpackage -rfakeroot -uc -b
Primeiro foi feito o download do patch ZPH usando o software wget. Depois foi baixado o source do squid3 diretamente dos repositórios do Ubuntu e então, usando o apt-get build-dep squid3, foi criado o diretório squid3-3.0.STABLE8 e instaladas as dependências necessárias para compilar o squid. Após isso, entrei no diretório contendo o source do Squid, apliquei o patch ZPH (comando patch -p1) e com isso foram criados os pacotes no formato deb para instalação. Para instalar basta usar o dpkg -i em cada pacote no formato deb.
root@localhost:~/squid3-3.0.STABLE8# cd .. root@localhost:~# dpkg -i squid3_3.0.STABLE8-3+lenny2build0.9.04.1_i386.deb root@localhost:~# dpkg -i squid3-common_3.0.STABLE8-3+lenny2build0.9.04.1_all.deb root@localhost:~# dpkg -i squid3-cgi_3.0.STABLE8-3+lenny2build0.9.04.1_i386.deb root@localhost:~# dpkg -i squidclient_3.0.STABLE8-3+lenny2build0.9.04.1_i386.deb
Configurando o squid.conf
A localização do arquivo deve ser /etc/squid3/squid.conf.
acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 acl localnet src 192.168.254.0/24 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 http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localnet http_access deny all icp_access allow localnet icp_access deny all htcp_access allow localnet htcp_access deny all # Porta http_port 3128 transparent hierarchy_stoplist cgi-bin ? maximum_object_size_in_memory 64 KB cache_dir aufs /var/cache/squid 40000 16 256 max_open_disk_fds 0 # Marcacao TOS do ZPH zph_tos_local 16 zph_tos_parent on # Arquivos de LOG access_log /var/log/squid3/access.log squid cache_log /var/log/squid3/cache.log cache_store_log /var/log/squid3/store.log # PID pid_filename /var/run/squid.pid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern (cgi-bin|\?) 0 0% 0 refresh_pattern . 0 20% 4320 visible_hostname mainserver icp_port 3130 coredump_dir /var/cache
Consulte a documentação do squid para mais informações.
Inciando o Squid
Criando a estrutura de diretórios e iniciando o serviço:
root@localhost:~# squid -z root@localhost:~# /etc/init.d/squid3 start
Para testar o funcionamento basta configurar o browser para acessar via proxy usando o IP 127.0.0.1 e porta 3128. Se navegar na internet significa que funcionou, se não, leia os arquivos de log para tentar identificar o problema.
Conclusão
É possível que ocorra algum problema seguindo os passos descritos nesse artigo. O motivo se deve ao fato de que tive que simplificar bastante os passos para servir como um exemplo genérico.
Problemas ou dúvidas ficarei feliz em poder ajudar.
Feliz natal à todos!














Posted in
Tags: 
Oi, estou executando esse procedimento para utilizar numa lan com 10 pcs. Ocorre o seguinte:
O comando patch -p1 ../squid-3.0.STABLE8-zph.patch quando executado o pc para, tipo fica ligado, cursor piscando e não volta ao prompt.
Ele demora mesmo pra executar esse passo ou estou com um problema de instalação?
O Hardware utilizado (pra teste apenas) é um k6-II 300Mhz em uma pcchips 5598 (sis530), com 256mb de ram pc133.
Alguma idéia?
Amigo to com o mesmo problema do colega ai em cima
voçe pode nos ajudar ?
valew
olá so eu dinovo..
parçeiro o comando ai tava foltando um detalhe era pra ser assim
entar no diretorio:
cd squid3-3.0.STABLE8
depois:
patch -p1 < ../squid-3.0.STABLE8-zph.patch
pronto no meu funcionou .. . ..
valew
Isso mesmo. Aqui enfim deu certo. Faltava o “<" para funcionar.
Depois disso funcionou 100%
Valeu Beto
Seguinte, aquele erro foi corrigido, porém, surgiu um outro, ou melhor, alguns outros. Quando executo o comando “dpkg-buildpackage -rfakeroot -uc -b” ocorrem uns 4 erros no make e ñ são criados os arquivos .deb para instalação manual. Como corrigir isso?