Blog do Enderson!

/* sem somentários */

Usando Chains E RETURN Com Iptables

| Comments

Estava tentando uma forma de recuperar velhos artigos meus, e colocá-los aqui no Blogger, mas vi que muitos assuntos eram relacionados a notícias da época, ou coisas que não fariam sentido publicar agora. Acabei achando um que se salvou, um artigo técnico sobre iptables.


Finalmente um tópico técnico aqui no meu blog, mas é assim mesmo, uma vez ou outra eu coloco uma coisa legal aqui.

Vou falar sobre um problema que é antigo, e a maneira como solucionei foi bem elegante, e vou deixar a dica aqui pra que as pessoas possam usá-la em outros casos.

Não vou entrar em detalhes do que são chains no iptables, espero que vocês possam ler o Iptables Tutorial, lá você encontrará explicação completa sobre chains, e o RETURN.

O problema que tive, é com o Conectividade Social da Caixa, um programa que usa a mesma porta do HTTP (80) pra trafegar algo que parece não ser HTTP, e não funciona se você usa proxy transparente, pelo menos com Squid não. A solução básica é remover o IP da regra do proxy transparente, que pode ser feito assim:

# eth0 sendo a interface local# 3128 sendo a porta onde o Squid está funcionando#  200.201.174.0/24 é a faixa de IPs da Caixa, para o conectividade socialiptables -t nat -A PREROUTING -i eth0 -p TCP -d !200.201.174.0/24 --dport 80 -j REDIRECT --to-port 3128

desta forma você redirecionou tudo que vem da LAN com tráfego pra porta 80, para o Squid, exceto para a faixa de IP 200.201.174.0/24.

Claro que o Conectividade Social não trabalhar usando toda esta faixa de IPs, mas eu fiz assim, pq achei mais simples.

Agora vamos ver uma maneira elegando de se fazer a mesma coisa. Vamos supor que você não queira usar essa faixa de IPs toda, e queira especificar mais alguns IPs que não irão passar pelo proxy. Você pode simplesmente ir adicionando mais regras, ou colocar mais IPs ali, mas isso deixaria a linha longa, ou o arquivo cheio de regras. E isso é ruim, pelo menos pra mim.

Abaixo iremos criar uma chain somente para o proxy, aqui vou chamar de http_proxy.

# Crindo a chain http_proxyiptables -t nat -N http_proxy

# Alimentando a chain http_proxyiptables -t nat -A http_proxy -p tcp -d 200.201.174.136 -j RETURNiptables -t nat -A http_proxy -p tcp -d 200.201.174.137 -j RETURNiptables -t nat -A http_proxy -p tcp -d 200.123.123.123 -j RETURNiptables -t nat -A http_proxy -p tcp -d 200.222.222.222 -j RETURNiptables -t nat -A http_proxy -p tcp -j REDIRECT --to-port 3128

# Mandando para a chain, o tráfego que queremos.iptables -t nat -A PREROUTING -i eth0 -p TCP --dport 80 -j http_proxy

Desta forma temos uma facilidade em adicionar e remover IPs que não queremos que passe pelo proxy Squid.

Uma explicação sobre o RETURN pode ser encontrada AQUI

Bem, é isso, espero que isso sirva pra algúem, e quem achar que não serve de nada, não use. Quem achou o tópico uma bosta, é só não ler mais. :P Se eu estiver equivocado em alguma coisa, desculpa. Não garanto que isso irá funcionar com você, mas comigo funcionou. O que posso fazer ?

Comments