Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Curso de Inglês Online

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Detecção de Proxy Transparente (SQUID e IPTABLES) - Mini Tutorial

Colaboração: Silmar A. Marca

Data de Publicação: 07 de Janeiro de 2005

Segue um mini Tutorial/HOWTO:

Identificação de proxy

A identificação de um proxy, seja transparente ou não depende do envio (pelo próprio proxy) de alguns headers (criados por ele mesmo) de identificação. No caso do squid, para evitar tal identificação basta adicionar as seguintes linhas no squid.conf:

  #---/etc/squid/squid.conf (squid versão squid-2.5.7 ou superior)
  # TAG: header_access
  ...
  header_access Via deny all
  header_access X-Forwarded-For deny all
  header_access Proxy-Connection deny all
  header_access Accept-Encoding deny all
  
  #  TAG: header_replace
  ...

Auto-Configuração usando DHCP

É feita através do informe do parametro numero 252 do dhcp. É necessário configurar tanto o DHCP, quanto um servidor Web (no meu caso o APACHE). Veja que eu informo na opção 252 o ip onde está o servidor APACHE com o arquivo "wpad.dat". Este arquivo é quem irá informar o proxy e outros. O browser deve ter a opção "Detectar configurações automaticamente" setada.

  #---/etc/dhcpd.conf (dhcpd versão 3.x)
  ...
  option wpad code 252                    = text ;
  ...
  subnet 10.0.0.0 netmask 255.0.0.0 {
   ...
   option wpad                             "http://10.0.0.1/wpad.dat\000";
   ...
  }
  subnet 172.16.0.0 netmask 255.240.0.0 {
   ...
   option wpad                             "http://172.16.0.1/wpad.dat\000";
   ...
  }
  subnet 192.168.0.0 netmask 255.255.0.0 {
   ...
   option wpad                             "http://192.168.0.1/wpad.dat\000";
   ...
  }

#--/etc/apache/conf/conf.d/proxy.conf (apache versão 2.x)

  <VirtualHost *:80>
     DirectoryIndex wpad.dat
     ServerAlias proxy.* wpad.*
     DocumentRoot "/srv/www/default/proxy/"
     <Location "/">
         ForceType application/x-ns-proxy-autoconfig
     </Location>
  </VirtualHost>
  
  <Directory "/srv/www/default/proxy/">
     Order allow,deny
     Allow from 10. 192.168. 172.16. 127.
     AllowOverride FileInfo AuthConfig Limit
     ForceType application/x-ns-proxy-autoconfig
     # Options +ExecCGI
  </Directory>
  
  # AddHandler cgi-script .cgi
  AddType application/x-ns-proxy-autoconfig .dat
  AddType application/x-ns-proxy-autoconfig .pac
  Alias /wpad.dat                 "/srv/www/default/proxy/wpad.dat"
  Alias /wpad.da                  "/srv/www/default/proxy/wpad.dat"
  Alias /proxy.pac                "/srv/www/default/proxy/wpad.dat"
  #---/srv/www/default/proxy/wpad.dat (Browsers Iexplorer, Netscape etc...)
  function FindProxyForURL(url, host)
  {
         var domlocal   = ".grupogsn.com.br";
         var netlocal   = "200.181.255.20";
         var msklocal   = "255.255.255.255";
         var proxyaddr  = "PROXY proxy.grupogsn.com.br:3128; DIRECT";
         var proxyaddra = "PROXY 10.0.0.1:3128;";
         var proxyaddrb = "PROXY 172.16.0.1:3128;";
         var proxyaddrc = "PROXY 192.168.0.1:3128;";
         if (dnsDomainIs(host, domlocal))                                 {
             return "DIRECT";
         } else if (isPlainHostName(host))                                {
             return "DIRECT";
         } else if (isInNet(host, netlocal,  msklocal))                   {
             return "DIRECT";
         } else if (isInNet(host, "127.0.0.0", "255.0.0.0"))              {
             return "DIRECT";
         } else if (isInNet(host, "10.0.0.0", "255.0.0.0"))               {
             return "DIRECT";
         } else if (isInNet(host, "172.16.0.0", "255.240.0.0"))           {
             return "DIRECT";
         } else if (isInNet(host, "192.168.0.0", "255.255.0.0"))          {
             return "DIRECT";
         } else if (isInNet(myIpAddress(), "10.0.0.0", "255.0.0.0"))      {
             return proxyaddra;
         } else if (isInNet(myIpAddress(), "172.16.0.0", "255.240.0.0"))  {
             return proxyaddrb;
         } else if (isInNet(myIpAddress(), "192.168.0.0", "255.255.0.0")) {
             return proxyaddrc;
         } else  {
             return proxyaddr;
         }
  }

Proxy Transparente

Ocorre no ultimo caso: o cliente não tem a opção "Detectar configuração automaticamente" ou não está via DHCP (e neste caso não recebe a opção 252)

  #---/etc/squid/squid.conf (squid versão squid-2.5 ou superior)
  ...
  httpd_accel_host virtual
  httpd_accel_with_proxy on
  httpd_accel_uses_host_header on
  ie_refresh on
  ...
  #---firewall
  echo "0" > /proc/sys/net/ipv4/tcp_ecn #Evita problemas de resposta de tamanho
  zero
  <<<desvio de paginas que não podem ter proxy transparente>>>
  # 200.201.174.0/24        #Caixa Federal 0800 561041
  # 200.255.42.0/24         #Agencia Nacional de Saude (Diops - www.ans.gov.br)
  iptables -t nat -A PREROUTING -s 0.0.0.0/0 -d 200.201.174.0/24 -j RETURN
  iptables -t nat -A PREROUTING -s 0.0.0.0/0 -d 200.255.42.0/24 -j RETURN
  <<direcionamento para o proxy transparente>>
  iptables -t nat -A PREROUTING -p tcp -s 10.0.0.0/8 -d 0.0.0.0/0 80 -j DNAT
  --to-destination 10.0.0.1:3128
  iptables -t nat -A PREROUTING -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 80 -j DNAT
  --to-destination 192.168.0.1:3128
  iptables -t nat -A PREROUTING -p tcp -s 172.16.0.0/12 -d 0.0.0.0/0 80 -j DNAT
  --to-destination 172.16.0.1:3128

Vale a pena lembrar que as regras sao genéricas e apresentadas para as 3 classes de rede internas mais comum. Adaptar os endereços conforme necessário for...

  Cordialmente, Silmar A. Marca
  GrupoGSN - Desenvolvimento, Implantação e Verificação de Servidores
  Profissionais baseados em Linux/Novell
  http://www.grupogsn.com.br/~marca/

Veja a relação completa dos artigos de Silmar A. Marca

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1287 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Read in English - Uma Maneira Divertida de Aprender Inglês