Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org > Blogs > root@blog:/# chmod o+r *
Fóruns Wiki Videos Grupos Sociais RSS Feeds FAQ Termos de Uso Contato Sobre Twitter
Registrar Blogs Calendário Marcar Fóruns Como Lidos

Avalie este Artigo

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

Posted 03-12-2008 at 10:08 by Magnun
Updated 03-12-2008 at 11:02 by Magnun

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...

Magnun Leno
CISCO CCNA: CSCO10991731
e-mail: magnunΘunder-linux.org
Blog: root@blog:/# chmod o+r *
Participe de uma comunidade!

"If you choose not to decide, you still have made a choice."
- Freewill (Rush)
Enviado em Linux, Dicas
Visitas 2018 Comentários 17 Editar Tags Email Blog Entry
Total Comments 17

Comentários

  1. Old Comment
    Avatar de Duca
    Parabéns Magnum!!!!!!!!!!!!
    Daqui a pouco estará no wiki!
    Comment with Quote permalink
    Posted 03-12-2008 at 11:20 by Duca Duca está offline
  2. Old Comment
    Avatar de Magnun
    Valeu!
    Comment with Quote permalink
    Posted 03-12-2008 at 11:54 by Magnun Magnun está offline
  3. Old Comment
    Avatar de info24hs
    Citação:
    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...
    Cara faz tudo que sugere ai.. Na internet tem muito material, mas nada detalhado , explicado para crianças menores de 10 anos como eu heheh...

    Muito bom o post.
    Comment with Quote permalink
    Posted 03-12-2008 at 14:03 by info24hs info24hs está offline
  4. Old Comment
    Avatar de Duca
    Citação:
    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...
    Escreva o que seu coração mandar.
    heuaheuaheuaheaue
    Comment with Quote permalink
    Posted 03-12-2008 at 14:20 by Duca Duca está offline
  5. Old Comment
    Avatar de Magnun
    Valeu galera... vamos ver se todos tem a mesma opinião...
    Comment with Quote permalink
    Posted 03-12-2008 at 19:36 by Magnun Magnun está offline
  6. Old Comment
    Avatar de rndrama
    Pow magnum, show hein?
    Parabéns cara. Manda ver ai, lança ai, o que vier vai ser lucro com essa qualidade.
    Comment with Quote permalink
    Posted 11-12-2008 at 22:14 by rndrama rndrama está offline
  7. Old Comment
    Avatar de Magnun
    Valeu cara... Daqui a pouco vai ter um introdutório à teoria de redes!
    Comment with Quote permalink
    Posted 12-12-2008 at 07:23 by Magnun Magnun está offline
  8. Old Comment
    Avatar de Dedao
    Excelente tutorial. Parabens.
    Magun, sei que pode parecer abuso, mas por que você não aproveita e cria um "curso" de firewall pra galera, assim como você fez um de redes. Acho que iria ajudar muita gente. O que eu achei excelente no seu tutorial, não foi o tema, ou a solução, mas sim, a explicação de o por que aconteceu tal coisa, e o por que e como teve que ser feito para funcionar corretamente. Os desenhos também ajudaram bastante.
    Tutorial tem aos montes na internet, mas com uma explicação realmente fácil de entender, é raro de encontrar. A sua didática é excelente, tão boa quanto a do morimoto nos artigos e tutoriais dele.

    Abraçao
    Renato
    Comment with Quote permalink
    Posted 08-01-2009 at 11:39 by Dedao Dedao está offline
    Updated 08-01-2009 at 11:42 by Dedao
  9. Old Comment
    Avatar de Magnun
    Putz cara! Me comparar com o Morimoto! Valeu...

    Quanto ao curso de firewall, tem apenas um motivo: Não acho que eu domine o iptables o suficiente pra isso. Mas já considerei essa possibilidade também!

    Mas pra começar outro, primeiro tenho que acabar o que comecei! Se você gostou do jeito que escrevi esse tutorial, deveria ver a próxima parte do curso de redes que estou preparando! Como está chegando em um assunto muito detalhado estou usando o mesmo "estilo". Com animações, exemplos e abstrações... Por isso estou demorando tanto assim....

    Dedao, valeu pelo comentário cara... Isso é que me estimula a continuar
    Comment with Quote permalink
    Posted 08-01-2009 at 12:48 by Magnun Magnun está offline
  10. Old Comment
    Avatar de Magal
    MM, Magnun Morimoto
    Comment with Quote permalink
    Posted 08-01-2009 at 14:18 by Magal Magal está offline
  11. Old Comment
    Avatar de Magnun
    Comment with Quote permalink
    Posted 08-01-2009 at 15:43 by Magnun Magnun está offline
  12. Old Comment
    Avatar de Magnun
    Dedao...
    Dá uma olhada aqui e diz o que você achou...

    Até mais...
    Comment with Quote permalink
    Posted 08-01-2009 at 17:50 by Magnun Magnun está offline
  13. Old Comment
    Avatar de Magnun
    Dedao, o PedroArturJedi atendeu seus pedidos...
    Comment with Quote permalink
    Posted 12-01-2009 at 10:22 by Magnun Magnun está offline
  14. Old Comment
    Avatar de augustorodrig
    excelente tutorial, gostaria de saber qual é o nome do programa que vc faz essas animações no linux.
    Comment with Quote permalink
    Posted 16-02-2009 at 11:37 by augustorodrig augustorodrig está offline
  15. Old Comment
    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...
    Comment with Quote permalink
    Posted 16-02-2009 at 12:20 by Magnun Magnun está offline
  16. Old Comment
    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
    Comment with Quote permalink
    Posted 16-02-2009 at 14:03 by Dedao Dedao está offline
  17. Old Comment
    Avatar de Magnun
    De nada Dedão!!

    "Estamos aqui pra isso"
    Comment with Quote permalink
    Posted 16-02-2009 at 15:59 by Magnun Magnun está offline
Enviar um comentario Enviar um comentario

Horários baseados na GMT -3. Agora são 00:13.


Powered by vBulletin®
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0 ©2009, Crawlability, Inc.