[GTER] Detecao de Proxy Transparente (SQUID/IPTABLES) - Mini Tutorial

Silmar A. Marca marca at grupogsn.com.br
Wed Dec 8 13:41:58 -02 2004


Segue um mini Tutorial/HOWTO:

1) 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
...
========================================================================
2) 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 opcao 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;
        }
}
========================================================================
3) Proxy Transparente
Ocorre no ultimo caso: o cliente nao tem a opcao "Detectar configuração
automaticamente" ou nao está via DHCP (e neste caso nao recebe a opcao 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 nao 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/
------------------------------------------------------------
Se algo não lhe faz mal (fisico, moral ou psicologicamente),
experimente! O máximo e você perder tempo! E tempo, e
o que você tem a vida toda pra perder.....
Mais vale um instante de prazer que uma eternidade fútil!
------------------------------------------------------------








More information about the gter mailing list