Iptables DNAT SNAT [RESOLVIDO]

1. Iptables DNAT SNAT [RESOLVIDO]

Luiz Paulo Monteiro
lupamont

(usa Debian)

Enviado em 23/12/2009 - 17:41h

Estou com o seguinte problema tenho meu firewall com ip 192.168.0.254 (gateway) na eth0, um ip fixo 200.xxx.xxx.130 na eth1 e outro
ip fixo 200.xxx.xxx.139 na eth2 este ligado diretamente a um switch 8 portas que faço conexao com o servidor de email/web que
tem o ip 200.xxx.xxx.140

Estou tendo problemas ao qual meus e-mails estao saindo com o ip 200.xxx.xxx.130 e não com o ip 200.xxx.xxx.140,

e recebo erros como:

<contato@xx.xx.br>: host mx.xxx.sdservidor.com[200.98.552.3]
refused to talk to me: 450 4.7.1 Client host rejected: cannot find your
hostname, [xxx.xxx.xxx.130]

<maria.xx@xxxx.gov.br>: host
kiwi.xxxx.gov.br[200.xxx.xxx.154] refused to talk to me: 450 4.7.1
Client host rejected: cannot find your reverse hostname, [200.xxx.xxx.130]

pois os mesmos estao configurado no 2000.xxx.xxx.140


MINHA ARQUITETURA:
firewall = eth0 192.168.0.254 , eth1 200.xxx.xxx.130 e eth2:x 200.xxx.xxx.139
email = eth0:x 200.xxx.xxx.140


Não sou expert em firewall, mas conversando com um amigo, ele falou que eu deveria fazer regras DNAT e SNAT no iptables, justamente
para quando chegar uma requisicao encaminhar para 200.xxx.xxx.140 e quando sair tbm encaminhar como 200.xxx.xxx.140 e não
200.xxx.xxx.130.

Se alguém entendeu meu problema e puder me ajudar fico no aguardo....

Abraços,
Luiz Paulo Monteiro


  


2. Re: Iptables DNAT SNAT [RESOLVIDO]

Alexandre Silva
aps167

(usa Debian)

Enviado em 04/01/2010 - 11:57h

Se for este o problema, poderá criar as seguintes regras no seu firewall

iptables -t nat -A POSTROUTING -s 200.xxx.xxx.130 -o ethx -j SNAT --to 200.xxx.xxx.140

iptables -t nat -A PREROUTING -s 200.xxx.xxx.130 -i ethx -j DNAT --to 200.xxx.xxx.140

Explicação:

1 - Qualquer pacote tendo como origem o IP 200.xxx.xxx.130 SAINDO por qualquer interface deve ser alterado para 200.xxx.xxx.140

2 - Qualquer pacote tendo como origem o IP 200.xxx.xxx.130 ENTRANDO por qualquer interface deve ser alterado para 200.xxx.xxx.140

Basicamente é isso, se for só isso.

Alexandre Silva
Analista de Projetos de Redes
Aulas Particulares de Linux - Windows Server - Rede Avançada
http://www.alexandresilva.net63.net


3. Re: Iptables DNAT SNAT [RESOLVIDO]

Luiz Paulo Monteiro
lupamont

(usa Debian)

Enviado em 04/01/2010 - 14:53h

Alexandre,
fiz como você pediu, e o erro continua:
peguei o log do erro

Jan 4 14:48:26 maracana postfix/smtp[31621]: 8013C89008C: to=<contato@luizpaulo.net.br>, relay=mx.cluster001.whservidor.com[200.98.199.3]:25, delay=5, delays=0.04/0/5/0, dsn=4.7.1, status=deferred (host mx.cluster001.whservidor.com[200.98.199.3] refused to talk to me: 450 4.7.1 Client host rejected: cannot find your hostname, [200.xxx.xxx.130])




4. NAT

André Gustavo Neves Lopes
andrelopes.mrx

(usa FreeBSD)

Enviado em 04/01/2010 - 15:01h

Eu discordo dessa abordagem, se você se deu ao trabalho, de colocar um ip valido no seu servidor de email, pq mascara-lo? se for pra usar nat, voce poderia ter usado redes inválidas.

- quantos ip's válidos você tem?

- que mascaras de rede você está usando hoje? em cada interface, principalmente nas com ip valido.

- qual gateway você está usando no seu servidor de email,

com essas informações posso te dizer algo mais consistentes,

André Gustavo
blog: http://blog.mrx.com.br
gtalk: andre@mrx.com.br

um abraço,





5. Re: Iptables DNAT SNAT [RESOLVIDO]

Luiz Paulo Monteiro
lupamont

(usa Debian)

Enviado em 04/01/2010 - 15:36h

Olá André, obrigado por responder, essa estrutura é do meu trabalho e já estava funcionando quando cheguei.

MINHA ARQUITETURA:

firewall
eth0: 192.168.0.254, netmask 255.255.255.0 , gateway 200.xxx.xxx.129
eth1: 200.xxx.xxx.130, netmask 255.255.255.248, gateway 200.xxx.xxx.129
eth2: 200.xxx.xxx.139, netmask 255.255.255.248, gateway 200.xxx.xxx.129


Servidor de Email, DNS e Web
eth0: 200.xxx.xxx.140, netmask 255.255.255.248, gateway 200.xxx.xxx.139


Rede interna
192.168.0.x , netmask 255.255.255.0, gateway 192.168.0.254 (firewall)

Abraços
Luiz Paulo Monteiro


6. FORWARD e não NAT

André Gustavo Neves Lopes
andrelopes.mrx

(usa FreeBSD)

Enviado em 04/01/2010 - 19:42h

Boa noite,

Agora entendi um pouco melhor sua rede, se as máscaras que você me passou estiverem corretas, você tem uma rede cheia pra sua rede interna (192.168.0.0/24) e mais 2 subnets:

a primeira, 200.x.x.128/29, que te da do ip 200.x.x.129 até 200.x.x.134.
a segunda, 200.x.x.136/29, que te da do ip 200.x.x.137 até 200.x.x.142.

E a solução para o seu problema é mais simples do que lhe parece, é justamente o oposto do que seu amigo te disse, tudo que você não precisa é de nat nessa situação, você tem ips válidos no seu servidor de email. Atualmente você já faz nat, pois se teu servidor de email, chega aos outros servidores de email com o ip 200.x.x.130, seu firewall traduziu esse ip (ou seja fez nat, do ip 200.xxx.xxx.140 para 200.x.x.130).

Você não precisa de uma regra de nat, para que seu firewall chegue a internet, você precisa de uma regra de FORWARD. Não sei exatamente como suas regras estão escritas, mas você deve remover o NAT, no que se revere a saída para internet do seu servidor de email, e adicionar uma de forward, (se já não existir). Dessa maneira seu servidor de email alcançará a internet, com o seu endereço ip preservado.


ps.: reparando um pouco mais nas mensagens de erro, o problema reportado nos logs, é de reverso, se você criar uma entrada de reverso para esse ip 130, que aponte para o hostname do seu servidor de email também vai resolver o problema, mas como eu te disse, a abordagem com nat, com ip´s válidos na minha opinião é incorreta e desnecessária. Corrigir isso seria trabalhar efetivamente no problema e nao numa solução paleativa.


Espero ter ajudado

André Gustavo
blog: http://blog.mrx.com.br
gtalk: andre@mrx.com.br


7. Re: Iptables DNAT SNAT [RESOLVIDO]

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 05/01/2010 - 09:18h

Bom, pelo que entendi já está sendo feito nat.

Veja, teu servidor é 130, mas está indo com o IP 140 (ip do firewall).

Então o firewall já está fazendo NAT e não deveria.

Veja, no FIREWALL, quais regras de iptables tem com POSTROUTING. Ela precisa ser modificada (ou mesmo excluida. Creio que modificada, pois acredito que para algumas coisas precisarás de NAT).

Poste aqui qualquer regra do firewall que tenha POSTROUTING para nós analisarmos.


8. Re: Iptables DNAT SNAT [RESOLVIDO]

Luiz Paulo Monteiro
lupamont

(usa Debian)

Enviado em 05/01/2010 - 09:29h

Antes de qualquer coisa, obrigado a todos pela força

segue abaixo minhas regras:

*nat
:PREROUTING ACCEPT [75:4930]
:POSTROUTING ACCEPT [52:3324]
:OUTPUT ACCEPT [12:728]
-A PREROUTING -s 192.168.0.0/255.255.255.0 -d 200.201.174.207 -p tcp -m tcp --dport 2631 -j ACCEPT
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.254.1
COMMIT
# Completed on Sun Mar 9 17:18:27 2008
# Generated by iptables-save v1.3.6 on Sun Mar 9 17:18:27 2008
*filter
:INPUT ACCEPT [28:1799]
:FORWARD ACCEPT [30:1993]
:OUTPUT ACCEPT [12:728]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -d 200.xxx.xxx.140 -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -d 200.xxx.xxx.140 -p icmp -m icmp --icmp-type 0 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -m limit --limit 1/sec -j RETURN
-A INPUT -s 192.168.0.100 -m state --state NEW -j ACCEPT
-A FORWARD -p tcp --dport 1970 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 200.xxx.xxx.140 -p icmp -m icmp --icmp-type 8 -j DROP
-A FORWARD -d 200.xxx.xxx.140 -p icmp -m icmp --icmp-type 0 -j DROP
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A FORWARD -d 192.168.1.245 -p tcp -j ACCEPT
-A FORWARD -s 192.168.1.245 -p tcp -j ACCEPT
-A FORWARD -s 192.168.0.100 -m state --state NEW -j ACCEPT
-A FORWARD -s 192.168.0.1 -d 200.xxx.xxx.140 -m state --state NEW -j ACCEPT
-A FORWARD -s 200.xxx.xxx.140 -d 192.168.0.1 -m state --state NEW -j ACCEPT
-A FORWARD -p tcp -m multiport --dports 23,79,111,113,515 -j DROP
-A FORWARD -p udp -m multiport --dports 23,79,111,113,515 -j DROP
-A FORWARD -p tcp -m multiport --dports 1214,1290,1863,4242,4462,4661,5190,6346 -j DROP
-A FORWARD -p udp -m multiport --dports 1214,1290,1863,4242,4462,4661,5190,6346 -j DROP
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT



9. Re: Iptables DNAT SNAT [RESOLVIDO]

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 05/01/2010 - 09:43h

Está ai o teu problema:

-A POSTROUTING -o eth0 -j MASQUERADE
Mascara TUDO (TUDO TUDO) que sai pela eth0. Ou seja, qualquer pacote saindo pela eth0 irá sair com o IP 192.168.0.254. Isto parece completamente inapropriado! Tudo que vem da Internet virá com o IP do firewall?? Não consigo imaginar razão para isto.

-A POSTROUTING -o eth1 -j MASQUERADE
Mascara TUDO (TUDO TUDO) que sai pela eth1. Ou seja, qualquer pacote saindo pela eth0 irá sair com o IP 140

-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.254.1
Regra NUNCA SERÁ APLICADA, pois a PRIMEIRA regra precede esta (a primeira diz para mascarar TUDO, esta diz para mascarar apenas a rede 192. E SIM, SNAT e MASQUERADE são a mesma coisa (quase a mesma coisa, mas creio não ser o momento apropriado para explicar as diferenças)

bom, agora fica difícil saber qual a solução que funciona para o teu caso, pois podem ter problemas de roteamento, isto é, se as rotas estão corretas. Sem maiores detalhes, proponho o método "tentativa e erro" :-D

Sugiro, inicialmente, apenas para TESTES, que substitua a linha:

-A POSTROUTING -o eth1 -j MASQUERADE

Por:

-A POSTROUTING -o eth1 -s ! 200.XXX.XXX.140 -j MASQUERADE

Ou seja, NÃO FAZER nat para o IP do email.
Veja, isto está MUITO LONGE de ser a solução ideal, trata-se apenas de um teste. A solução ideal seria refazer todas as regras de firewall (pois, como disse, não encontrei sentido algum para o nat na eth0!)

Testa e diz se funcionou para o caso do email.



10. Re: Iptables DNAT SNAT [RESOLVIDO]

Luiz Paulo Monteiro
lupamont

(usa Debian)

Enviado em 05/01/2010 - 10:54h

Alexandre, André e Elgio, muito obrigado pela ajuda
conseguimos solucionar!

alterei a linha conforme o elgio sugeriu
-A POSTROUTING -o eth1 -s ! 200.XXX.XXX.140 -j MASQUERADE

e inclui
-I FORWARD -s 200.xxx.xxx.140 -j ACCEPT
-I FORWARD -d 200.xxx.xxx.140 -j ACCEPT

muito obrigado mesmo

Abraços
Luiz Paulo Monteiro



11. Re: Iptables DNAT SNAT [RESOLVIDO]

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 05/01/2010 - 11:42h

Ok.
Mas observe que a solução que eu coloquei foi na verdade um teste.

Colocar uma exceção para o IP do email é um paleativo. Outros servidores teus com IPs públicos continuaram sendo nateados. (desculpe o pitaco, mas não é realmente correto chamar de ips inválidos e válidos, mas sim de públicos e privados. Inválido seria aquele ip que não pode ser atribuído, como o 0.0.0.0, por exemplo)

Devias rever todas as tuas regras de NAT e até mesmo de roteamento. Pelo menos definir quem são suas redes PRIVADAS que tens ai e realizar nat apenas para elas.

Ainda, devido a esta tua regra:
-A POSTROUTING -o eth0 -j MASQUERADE

Todas as máquinas que estão na tua rede eth0 verão suas conexões como vindas do firewall. como disse, isto é muito estranho e não vejo razão. Creio que, interpretação minha, que as máquinas que estão na eth0 são as únicas que precisam ser nateadas. Se esta minha premissa estiver correta, tu deveria ter apenas esta regra:

-A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE

SÓ! Removeria todas as outras regras de POSTROUTING existentes, deixando apenas esta, ou seja, CAI FORA ESTAS:

# REMOVE # -A POSTROUTING -o eth0 -j MASQUERADE
# REMOVE # -A POSTROUTING -o eth1 -j MASQUERADE
# REMOVE # -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.254.1

Esta segunda solução, partindo da interpretação que eu tive de tuas necessidades, seria muito melhor que a de teste que lhe sugeri. Claro, a inserção da regra do FORWARD se mantem.


12. Re: Iptables DNAT SNAT [RESOLVIDO]

Luiz Paulo Monteiro
lupamont

(usa Debian)

Enviado em 05/01/2010 - 11:58h

Ok Elgio, entendi seu recado,
irei com certeza rever todas as regras do firewall
postarei caso houver dificuldades


Obrigado pela força novamente

abraços,
Luiz Paulo






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts