iptables para porta snat e ip na instância do AWS

1

Espero que alguém possa me ajudar ou pelo menos me apontar na direção correta. Eu tenho uma instância de NAT na AWS que está fornecendo tráfego de saída para um host na Internet. Isso funciona muito bem. O que eu preciso fazer é pegar uma porta arbitrária (vamos usar a porta 26 como exemplo) do HOST e na máquina NAT, traduzir isso para parecer vir da máquina NAT na porta 25. Essa regra é o que eu estou tentando fazer funcionar:

iptables -A POSTROUTING -t nat -o eth0 -p tcp --dport 26 -j SNAT - para 172.17.2.125:25

A regra atualmente mudará alegremente o endereço IP, mas deixará a porta de saída inalterada.

Um redirecionamento mudará alegremente a porta, mas não mudará o IP de origem (para não deixar a caixa no IP público correto).

Eu pensei em usar algo como pfSense ou algum outro produto de firewall que eu acho que poderia fazer isso, mas parece um exagero para algo que parece "simples". Eu tentei googling como um louco, mas eu devo estar googling os termos errados ... Eu tentei o "proxy transparente", mas isso não parece funcionar também.

Atualizando isso um pouco

HOST = 172.17.1.125, conexão SMTP de saída pela porta 26 NAT = 172.17.2.126 DESTINATION = 216.1.2.3 porta 25 (porta SMTP padrão)

O que é necessário é ter

HOST (interno) - > NAT - > DESTINO

Para que isso aconteça corretamente, o servidor NAT deve traduzir o tráfego da porta 26 para 172.17.2.126 porta 25.

    
por John Mitchell 12.07.2017 / 07:49

2 respostas

1

Consegui alguém que poderia me ajudar com esse problema. Aqui estão as regras que usamos para mapear as portas até os endereços IP de saída na AWS:

Primeiro, você tem que ter esta execução através de uma instância NAT para fazer o trabalho. Existem muitos recursos sobre como configurar isso.

iptables -t mangle -A PREROUTING -p tcp --dport 27 -j MARK  --set-mark 27
iptables -t nat -A PREROUTING -p tcp --dport 27 -j DNAT --to :25
iptables -t nat -A POSTROUTING -m mark --mark 27 -j SNAT --to-source 10.0.0.11
    
por 30.08.2017 / 01:57
1

Configuração de teste: Dois namespaces de rede ns0 (seu servidor de e-mail externo), ns1 (seu HOST). O namespace principal da rede (seu NAT) faz o encaminhamento e o nat. Dois pares de vet conectando namespaces:

ns0 --->     <------ main ns ----->     <--- ns1
veth0b   --- veth0a      veth1a     --- veth1b
10.0.0.1     10.0.0.254  10.0.1.254     10.0.1.1

tcpdump em veth0a e veth1a. nc -k -l -p 9999 escuta na porta 9999 em ns0 como "servidor de email". Cliente através de vários comandos nc em ns1 . Conexão normal, sem nat, porta de origem aleatória por padrão:

$ echo foo | nc 10.0.0.1 9999 -q0
veth*a: IP 10.0.1.1.60560 > 10.0.0.1.9999 
veth*a: IP 10.0.0.1.9999 > 10.0.1.1.60560

Corresponder na porta de origem (adicionei -s a todas as correspondências para evitar surpresas, mas também funciona sem -s ):

# iptables -t nat -A POSTROUTING -o veth0a -s 10.0.1.1/32 -p tcp --sport 8001 -j SNAT --to 10.0.1.81:9900
$ echo foo | nc 10.0.0.1 -p 8001 9999 -q0
veth1a: IP 10.0.1.1.8001 > 10.0.0.1.9999 
veth0a: IP 10.0.1.81.9900 > 10.0.0.1.9999
veth0a: IP 10.0.0.1.9999 > 10.0.1.81.9900
veth1a: IP 10.0.0.1.9999 > 10.0.1.1.8001

Corresponde à porta de destino (não alcança "servidor" porque as regras não podem reescrever a porta de destino):

# iptables -t nat -A POSTROUTING -o veth0a -s 10.0.1.1/32 -p tcp --dport 7002 -j SNAT --to 10.0.1.82:9900
$ echo bar | nc 10.0.0.1 7002 -q0
veth1a: IP 10.0.1.1.38614 > 10.0.0.1.7002 
veth0a: IP 10.0.1.82.9900 > 10.0.0.1.7002
veth0a: IP 10.0.0.1.7002 > 10.0.1.82.9900
veth1a: IP 10.0.0.1.7002 > 10.0.1.1.38614

Como você pode ver, o endereço de origem e a porta de origem são traduzidos corretamente. No S NAT (fonte nat), você só pode traduzir o endereço e a porta source , é o que o S significa, e é isso que a documentação que você vinculou diz. Por outro lado, no DNAT, você pode traduzir o endereço destionation e a porta. SNAT acontece em POSTROUTING (deve estar em veth0a nesta configuração), DNAT em PREROUTING (deve estar em veth1a nesta configuração). Então você não pode combinar ambos em uma regra, e você não pode fazer um DNAT após SNAT, porque PREROUTING acontece antes de POSTROUTING.

Estou com a impressão de que o que você realmente quer fazer é acessar vários servidores de e-mail, mas controlar o endereço source ao qual você vê substituindo a porta canônica 25 por outro destino portas. Por exemplo, mail.xxx.com:26 deve entrar em contato com mail.xxx.com:25 vindo de um endereço e mail.xxx.com:27 deve entrar em contato com mail.xxx.com:25 vindo de outro endereço. (Eu realmente espero que isso não esteja ligado ao envio de email de spam ...) Portanto, a porta de origem não importa, a porta de destino determinada determina o endereço de origem e a porta de destino deve ser alterada de volta para 25. Isso está correto? Se sim, isso não pode ser feito facilmente no Linux devido ao modo como o nat funciona.

E se você conseguir convencê-lo de que não precisa dele para o spam, posso pensar em duas opções melhores (dependendo do que seu software MTA pode fazer).

    
por 14.07.2017 / 08:24

Tags