Servidor Linux com Proxy e Controle de Banda – Parte 1

Tux
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!

You can leave a response, or trackback from your own site.

5 Responses to “Servidor Linux com Proxy e Controle de Banda – Parte 1”

  1. Rogerpgu disse:

    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?

  2. Beto disse:

    Amigo to com o mesmo problema do colega ai em cima
    voçe pode nos ajudar ?

    valew

  3. Beto disse:

    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

  4. Rogerpgu disse:

    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?

Leave a Reply

Powered by WordPress | Shop the Best Verizon Wireless Deals. | Thanks to Best CD Rates, Credit Cards and Credit card