GustavoHenrique.net

  • About
  • Contact
  • RSS Feed
  • Twitter

 

23
Dec

Servidor Linux com Proxy e Controle de Banda – Parte 1

By gustavohenrique|Linux|6 Comments

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!

Bookmark It

Add to Del.icio.us Add to Diigo Add to Facebook Add to Google Bookmarks Add to LinkedIn Add to Mister Wong Add to Twitter Add to Yahoo My Web
Tagged as: firewall, Linux, proxy
Add your comment →

6 Comments

  1. 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?

    By: Rogerpgu Reply →
    June 4, 2010 at 1:13 pm
  2. Amigo to com o mesmo problema do colega ai em cima
    voçe pode nos ajudar ?

    valew

    By: Beto Reply →
    June 9, 2010 at 1:47 am
  3. 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

    By: Beto Reply →
    June 9, 2010 at 2:10 am
    • Isso mesmo. Aqui enfim deu certo. Faltava o “<" para funcionar.
      Depois disso funcionou 100%
      Valeu Beto

      By: Rogerpgu Reply →
      June 16, 2010 at 8:42 pm
  4. 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?

    By: Rogerpgu Reply →
    June 16, 2010 at 9:18 pm
  5. Ola,

    eu estou instalando só que ele abaixa o squid3 com STABLE19
    não sei se tem alguma coisa a ver
    mais o comando
    root@localhost:~# dpkg -i squid3_3.0.STABLE8-3+lenny2build0.9.04.1_i386.deb

    não funciona

    se puder me ajudar

    Grato,

    Neiton Durval

    By: Neiton Reply →
    February 25, 2011 at 11:46 am

Leave your comment below! Cancel Reply

View More Posts:
  • ←
  • →

Tags

admin Django extjs firewall grails jquery KingHost liberações Linux manual model modelform mod_wsgi moeda brasileira mudanças mysql nível de serviço oo PagSeguro pdf php PIL pisa problemas proxy python qa qos real relacionamento roteamento service desk shell script sites tdd tipsforlinux traducao ubicomp ubuntu urllib virtualhost Webservices wikipedia xsol __init__

Recent Posts

  • Configurando um servidor LDAP no CentOS 6.2
  • Introdução ao padrão MVC no Ext JS 4
  • Virtualização com KVM
  • Autenticação Facebook no Grails
  • Grails com Sqlite3 no Ubuntu 11.04
  • Deploy no tomcat usando django-jython
  • Deploy múltiplas versões do Django no Nginx com VirtualEnv
  • Comandos básicos do Git
  • Introdução ao Apache Wicket
  • Feliz 2011

Archives

Categories

My tweets

  • @tregismoreira Genesis 7200 com android 4 3 days ago
  • @marcomaciel blz! 1 week ago
  • @marcomaciel hack com qualquer linguagem em qualquer plataforma pra mim ta valendo! #soudev 1 week ago
  • Fui instalar o android 2.3 da lg e agora meu celular não liga. #ffuuu 1 week ago
  • Tentando gerar uma NFe e não consigo =/ #stacktrace Impressionante como todos os sites e apps do governo são ruins. 2 weeks ago
  • More updates...

Powered by the inLine Minimal WordPress Theme