Dead Packets

06/03/2010

Proxy transparente com Policy Based Routing

Filed under: dicas e truques,ScreenOs — drak @ 1:57 PM

Uma característica bem interessante e desconhecida para mim no ScreenOS era a funcionalidade de Policy Based Routing (PBR). Inicialmente esta funcionalidade permite algo parecido com os route-maps da Cisco, provendo diferentes caminhos de rede baseados em match numa política, o que permite que realizemos certos malabarismos baseados no IP ou porta, como rotear tráfego FTP por um link de alta velocidade e tráfego SSH por outro, de baixa velocidade.

O desafio apresentado é o seguinte: Todo o tráfego HTTP/HTTPS oriundo de determinadas redes internas deveria ser redirecionado não para uma determinada rota, mas sim para um determinado proxy, criando efetivamente um proxy transparente.

Agora, vamos começar com a topologia da rede:

A implementação do PBR ocorre em 5 etapas:

  1. Criação da ACL para realizar match no tráfego de interesse (no nosso caso toda a rede interna para a Internet na porta TCP/80 e TCP/443);
  2. Agrupa-se as diversas linhas da ACL sob um Match group, mesmo que a ACL tenha somente uma linha;
  3. Configura-se um Action group que definirá a ação que o tráfego sofrerá;
  4. Associamos o Match group a um Action group utilizando um PBR Policy;
  5. Indicamos em que interface ou zona o PBR Policy irá atuar, finalizando a configuração.

Se você tentar utilizar a Internet apenas com a configuração de PBR verá que o tráfego está sendo redirecionado para a zona onde seu proxy está, porém ele provavelmente está sendo dropado, isto ocorre porque não criamos nenhuma regra de acesso para este tráfego, além disso, após a criação da regra você poderá verificar nos logs que o tráfego está chegando corretamente no Proxy, porém ele não está redirecionando as requisições para Internet, isto ocorre porque a porta destino dos pacotes são 80 ou 443, devemos realizar um NAT-dst no host e na porta para que o proxy transparente funcione, tudo isto para que os pacotes cheguem na porta que o nosso proxy está ouvindo, neste exemplo na 3128.

Abaixo seguem as linhas de configuração necessárias:

set vrouter "trust-vr"
# Define ACLs
set access-list extended 10 src-ip 172.16.1.0/24 dst-port 80-80 protocol tcp entry 1
set access-list extended 10 src-ip 192.168.4.0/24 dst-port 80-80 protocol tcp entry 1
# Define Match group
set match-group name match_rede_interna
set match-group match_rede_interna ext-acl 10 match-entry 1
set match-group match_rede_interna ext-acl 10 match-entry 2
# Define Action group
set action-group name action_redirect_proxy
set action-group action_redirect_proxy next-hop 10.0.0.100 action-entry 1
set action-group action_redirect_proxy next-hop 10.0.0.100 action-entry 2
set pbr policy name policy_redirect_http_https_to_proxy
set pbr policy policy_redirect_http_https_to_proxy match-group match_rede_interna action-group action_redirect_proxy 1
set interface ethernet0/1 pbr policy_redirect_http_https_to_proxy
#Criação da regra com NAT no destino
set policy id 500 from "Trust" to "Proxy"  "172.16.1.0/24" "Any" "HTTP" nat dst ip 10.0.0.100 port 3128 permit log
set policy id 500
set src-address "192.168.4.0/24"
exit

Não se esqueça de configurar o proxy para operar de modo transparente, no Squid isso é feito da seguinte forma:

Squid <2.6
# Se não existir, criar as linhas abaixo
httpd_accel_port 80 
httpd_accel_host virtual 
httpd_accel_with_proxy on 
httpd_accel_uses_host_header on 

Squid >=2.6
# a linha abaixo normalmente já existe, basta adicionar o "transparent". Se não existir, criar
http_port 80 transparent

Para verificar se a configuração está funcionando, basta tentar acessar a Internet sem nenhum proxy setado no browser, você deverá ver logs na regra recém criada e tráfego nos logs do Proxy.

Anúncios

Deixe um comentário »

Nenhum comentário ainda.

RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Blog no WordPress.com.

%d blogueiros gostam disto: