Squid - Pass through para sites de bancos com Squid Transparente

Existe muita dúvida, quando tratamos de iptables para bancos. Um grande problema do Proxy Transparente* é quando tratamos de bancos, órgãos governamentais e alguns softwares específicos, que não permitem alguém no meio da conexão, que neste caso é o proxy.

Conhecido também como Man in the Midle, o proxy faz o papel de intermediador entre os bancos e entidades e nosso cliente interno.

Com isso muitos bancos não funcionam corretamente via WEB, aplicações como SEFIP da caixa econômica federal entre outros.

Para evitarmos esse problema, podemos usar o artificio de criar uma nova cadeia no iptables, onde teremos o cadastro de todos os bancos, e essas regras vão ser lidas antes das outras cadeias, e é onde trataremos os endereços IP dos bancos.

Abaixo tenho uma pequena lista, com alguns ips de alguns bancos:

200.201.0.0/16 caixa economicad
170.66.0.0/16 bb do brasil
200.155.0.0/24 bradesco
200.196.0.0/24 itau
200.208.16.0/24 sudameris
200.220.178.0/24 santander
201.63.54.0/24 wwws bradesco
200.202.182.0/24 banco real
200.201.0.0/16 CEF
161.113.0.0/24 HSBC
201.7.176.0/24 GLOBO1
201.7.180.0/24 GLOBO2
201.94.10.0/24 Oi
200.154.56.0/24 TERRA
208.84.247.0/24 TERRA
201.7.176.0/24 GLOBO3
64.4.20.0/24 Hotmail
92.242.140.0/24 Sincob
200.251.91.0/24 Mercatil do Brasil

Obviamente você não salvar o arquivo como está, e sim somente os endereços ips, e fique a vontade para adicionar outros endereços que desejar.

No meu caso salvei em /etc/bancos.txt, é importante saber o caminho e nome do arquivo completo para podermos usar no script.

O próximo passo é criar o script, neste caso não irei criar os start, stop, reload da vida, deixo isso para vocês implementarem, só vou mesmo criar as regras de NAT e redirecionamento.

O primeiro passo é criar o SNAT ou MASQUERADE, para compartilhar a internet.

E no segundo passo criar as regras que permitiram passagem dos endereços ips do banco antes do redirecionamento para a porta 3128.

E por fim fazer o redirecionamento para a porta do proxy, no meu caso squid atuando de forma transparente na porta 3128.

Crie o arquivo /etc/init.d/firewall.sh, com o seguinte conteúdo.

#!/bin/bash

 

iptables -F

iptables -F -t nat

iptables -t nat -X BANCO

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -N BANCO
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -j BANCO

for i in `cat /etc/bancos.txt`;do
     iptables -t nat -A BANCO -p tcp –dport 80 -d $i -j ACCEPT
done

iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp –dport 80 -j REDIRECT –to-port 3128

Vamos explicar o conteúdo agora.

Nas primeiras cinco linhas estamos zerando todas as regras e criando uma regra de compartilhamento para rede 10.0.0.0/24 através do MASQUERADE.

Já na sexta, estamos criando uma nova cadeia chamada BANCO. Depois disso vinculamos essa cadeia nova com a tabela NAT e a cadeia PREROUTING com origem em nossa rede interna. Agora for fim iremos usar o arquivo banco.txt num loop como o for, e é aqui a grande sacada.

A regra criada simplesmente permite com a ação ACCEPT, qualquer destino que esteja dentro do arquivo banco.txt.

E ao finalizar o for, é criado enfim a regra de redirecionamento para a porta 3128 do firewall.

Na realidade ,  o que importa aqui, é a ordem de criação. Como as regras dos bancos estão sendo criadas primeiros, quando o firewall for tomar uma decisão, primeiro lerá as regras do banco para por fim ler a regra de direcionamento. Com isso garantimos que todos endereços IPs que estejam no arquivo bancos.txt não sejam redirecionados para a porta do proxy.

Veja que não estou usando regras e politicas padrão de bloqueio no FORWARD. O que é muito comum diga-se de passagem.

Se tiver usando DROP no FORWARD, será necessário criar as regras de retorno dos bancos para os clientes internos.

Então é isso, espero que gostem, e resolva alguns dos problemas causados no squid.

*Proxy Transparente é quando o cliente não configura o browser, e de alguma forma é feito o redirecionamento das conexões para o servidor proxy.

 

Fonte: http://stato.blog.br/wordpress/pass-through-de-banco-com-squid-transparente/

.