Ver Feed RSS

root@blog:/# chmod o+r *

[Dica] Problema Comum no Redirecionando com Iptables (NAT & SNAT) - Parte 2/2

Avalie este Post de Blog
A um tempo atrás postei aqui uma dica sobre um problema comum de pessoas que estão tentando fazer um redirecionamento utilizando DNAT para um servidor que está na mesma rede lógica que a origem. Nela eu expliquei o que geralmente as pessoas tentam fazer, o porque de não dar certo e uma correção temporária para o problema. Agora, nessa segunda e última parte, apresento a 'solução ideal'.

Pra quem caíu aqui pelo google sugiro ler a primeira parte desse post!!!


Como dito no post anterior, manter servidores na mesma rede dos 'clientes' não só dificulta a administração da rede e dos servidores mas também aumenta drásticamente a possibilidade de falhas de segurança.

A ideia pincipal é criar uma rede segmentada somente para os servidores, facilidando a administração de regras do firewall e possibilitado a execução de outras tarefas que, com a outra topologias, seriam inviáveis.

Cenário


Nesse cenário teremos 2 redes, 192.168.1.0/24 e 192.168.2.0/24. Se você não entende muito bem de redes lógicas, endereçamento IP e roteamento tente somente aceitar que ambas são diferentes, futuramente estarei dedicando alguns posts pra explicar esse caso. A rede 192.168.1.0/24 será a rede dos clientes enquanto a rede 192.168.2.0/24 será a rede dos servidores.


O Firewall será responsável pela interligação das 2 redes e de prover acesso a internet a ambas as redes. Para isso o firewall deverá possuir 3 interfaces. Nesse exemplo estaremos considerando a eth0 como sendo a interface que provê acesso a internet, a eth1 se conecta a rede dos clientes e a eth2 se conecta a rede dos servidores. Para as pessoas que não estão acostumadas a configurar um Linux para rotear dessa forma a configuração das interfaces pode parecer complicada. Para demonstrar a configuração da interface vamos assumir que a internet é entregue em tecnologia Ethernet, a interface possuirá o IP válido 200.200.200.1/30 meu gateway de internet é o 200.200.200.2/30 e o DNS é 200.200.200.200.

Pra ele rotear devemos habilitar o roteamento:
echo "1" >/proc/sys/net/ipv4/ip_forward

E pro pessoal navegar, devemos fazer o MASQUERADE:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -i eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -i eth2 -j MASQUERADE


No caso do Ubuntu o arquivo de configuração das interfaces seria o seguinte:

# Loopback
auto lo
iface lo inet loopback

# Eth0 - Conexão com a internet
auto eth0
iface eth0 inet static
address 200.200.200.1
netmask 255.255.255.252
network 200.200.200.0
broadcast 200.200.200.3
gateway 200.200.200.2
dns-nameservers 200.200.200.200

# Eth1 - Conexão com os clientes
auto eth1
iface eth1 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

# Eth2 - Conexão com os clientes
auto eth2
iface eth2 inet static
address 192.168.2.254
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255


A essa altura alguém pergunta: "Cade o gateway das interfaces eth1 e eth2??". Ai eu respondo: "Não precisa!!!". Não sei porque mas muitas pessoas acham que toda interface tem que ter um gateway...

Definição de gateway: "Um ativo de rede que conecta uma ou mais redes a outra rede distinta."

Do ponto de vista do roteamento o default gateway é a ultima opção quando o router não sabe mais o que fazer com um pacote. Sabe quando você ta tentando resolver um problema de Linux e não sabe mais o que fazer?! pois é!!! o que você faz? Posta no Under-Linux!! Então o Under-Linux é o seu gateway .

Nessa altura talvez alguém tenha pensado: "então o firewall é um gateway??". Exatamente, ele interliga duas ou mais redes (192.168.1.0 e 192.168.2.0) a uma rede distinha (internet). Por isso quando configurarmos os clientes e o servidores colocaremos o Firewall como gateway. "Então um gateway (firewall) pode ter outro gateway (200.200.200.2)??". É exatamente essa a ideia de geteways e roteamento, mas isso é uma outra estória!

Vamos a um exemplo de configuração dos clientes e servidores.
Cliente 1
IP: 192.168.1.1
Máscara: 255.255.255.0
Gateway: 192.168.1.254
DNS: 200.200.200.200

Servidor Web
IP: 192.168.2.1
Máscara: 255.255.255.0
Gateway: 192.168.2.254
DNS: 200.200.200.200



Simulação


Agora, vamos analizar o que ocorreria ao realiza aquele acesso com redirecionamento citado no post anterior.
Passo 1

O host deseja se comunicar com o domínio (digamos www.dominio.com.br). O host realiza a consulta DNS e descobre que www.dominio.com.br está vinculado ao IP 192.168.1.254. Com isso o host preenche os campos do pacote e o envia da seguinte forma:
IP de Origem: 192.168.1.1
IP de Destino: 192.168.1.254


Passo 2
O firewall (192.168.1.254) recebe o pacote do host 192.168.1.1 e consulta suas regras de iptables. Lá ele encontra a seguinte regra:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -d 192.168.1.254 -p tcp --dport 80 -j DNAT --to 192.168.2.1

Como o tráfego bate com a regra (IP de origem, interface de entrada, IP de destino e porta de destino) o firewall faz o que é mandado DNAT para 192.168.2.1, ficando da seguinte forma:
IP de Origem: 192.168.1.1
IP de Destino:
192.168.2.1 (DNAT)

O servidor web (192.168.2.1) recebe o pacote do host 192.168.1.1 (que na verdade foi encaminhado pelo Firewall) e processa a requisição HTTP. Ao terminar o processamento ele devolve o pacote. Mas pra quem que ele devolve?? Pra Origem. E quem é a origem? É só consultar o pacote! De acordo com o que vimos, a origem é 192.168.1.1 (veja o fim do passo 2)! Mas tem um pequeno problema! Eu (servidor web falando) estou na rede 192.168.2.0 e o destino está na rede 192.168.1.0, como estamos em redes diferentes tenho que mandar pro meu gateway! "Então ele põe o IP de destino como sendo 192.168.2.254!!" Errado!! Se fosse assim, o Firewall acharia que esse pacote é pra ele e não pro 192.168.1.1!! O que ele faz é colocar o IP de destino como sendo o IP 192.168.1.1 e o endereço MAC de destino como sendo o MAC do gateway. Mínimo todo mundo deve tá assim: Mas calma, tudo vai fazer sentido!
Vamos dar uma olhada no pacote de resposta:
IP de Origem: 192.168.2.1
IP de Destino:
192.168.1.1

Passo 3
Quando o Firewall receber esse pacote ele vai ver que o endereço MAC é dele mas o IP não é, logo ele tem que rotear esse pacote!!!! Mas... antes de rotear ele consulta a tabela de NAT's dele e vê que esse pacote do 192.168.1.1 foi nateado pra 192.168.2.1, então temos que remover o NAT e devolver o pacote. Ao remover o NAT o pacote de destino ficará assim:
IP de Origem: 192.168.1.254
IP de Destino:
192.168.1.1

O host receberá o pacote e verificará que o pacote está endereçado a ele e que o quem respondeu foi realmente o 192.168.1.254. Com isso ele fecha a comunicação!



Conclusão


A essa altura vocês devem estar pensando: "Ah... isso foi muito roubada!! Mentira!". Não, não é mentira. Aquela topologia do post anterior só não funciona porque o pacote de retorno não volta pelo firewall e ele não tem a oportunidade de desfazer o NAT. Dessa forma os pacotes de retorno sempre passaram pelo Firewall e esse problema não ocorrerá.

Como dito essa solução melhora inclusive a segurança pois, você pode controlar que portas os clientes podem acessar nos servers. O que era impossível controlar na outra topologia uma vez que todos tinham acesso direto ao Firewall.

Agora, que concluí essa série de posts gostaria de saber se alguém tem algum pedido de tutoriais como esse voltado pra área de redes. Estou pensando em fazer alguns tutoriais explicando o roteamento (com muitos detalhes) e a configuração de rotas no Linux. Ou explicar um pouco de teória de endereçamento, redes, mascara e sub-redes... Alguém tem alguma sugestão de tema? Alguma preferência? Aguardo comentário...

Até mais...

Atualizado 20-01-2010 em 08:00 por Magnun

Categorias
Linux , Dicas

Comentários

Página 2 de 2 PrimeiroPrimeiro 12
  1. Avatar de Magnun
  2. Avatar de Magnun
    Dedao...
    Dá uma olhada aqui e diz o que você achou...

    Até mais...
  3. Avatar de Magnun
    Dedao, o PedroArturJedi atendeu seus pedidos...
  4. Avatar de augustorodrig
    excelente tutorial, gostaria de saber qual é o nome do programa que vc faz essas animações no linux.
  5. Avatar de Magnun
    Olá augusto!

    Utilizei o GIMP mesmo! É só utilizar as camadas e salvar como GIF animado. É bem simples mas tem que ter cuidado pra usar imagens incrementais e não sempre uma imagem nova em cada camada, se não ela fica enorme, ou como o GIMP mesmo diz: "Um GIF assassino devorador de memória"

    Obrigado pelo comentário! Até mais...
  6. Avatar de Dedao
    Opa, obrigado pelos links Magnum....assim q eu tiver um tempinho essa semana vou ver todos....to corrido ultimamente...heheheh

    Abração
    Renato
  7. Avatar de Magnun
    De nada Dedão!!

    "Estamos aqui pra isso"
Página 2 de 2 PrimeiroPrimeiro 12

+ Enviar Comentário