Encaminhando o RDP através de uma máquina Linux usando o iptables: Não funciona

4

Eu tenho uma máquina Linux e uma máquina Windows atrás de um roteador que implementa NAT (o diagrama pode ser um exagero, mas é divertido de fazer ):

Estou encaminhando a porta RDP (3389) no roteador para a máquina Linux porque quero auditar conexões RDP. Para a máquina Linux encaminhar o tráfego RDP, escrevi estas regras iptables:

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination win-box
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

A porta está escutando na máquina Windows:

C:\Users\nimmy>netstat -a

Active Connections

  Proto  Local Address          Foreign Address        State
  (..snip..)
  TCP    0.0.0.0:3389           WIN-BOX:0         LISTENING
  (..snip..)

E a porta está encaminhando na máquina Linux:

# tcpdump port 3389
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
01:33:11.451663 IP shieldsup.grc.com.56387 > linux-box.myapt.lan.ms-wbt-server: Flags [S], seq 94663035, win 8192, options [mss 1460], length 0
01:33:11.451846 IP shieldsup.grc.com.56387 > win-box.myapt.lan.ms-wbt-server: Flags [S], seq 94663035, win 8192, options [mss 1460], length 0

No entanto, não estou obtendo conexões RDP bem-sucedidas de fora. A porta nem está respondendo:

C:\Users\outside-nimmy>telnet example.com 3389
Connecting To example.com...Could not open connection to the host, on port 3389: Connect failed

Alguma idéia?

Atualizar

Por @Zhiqiang Ma, eu olhei para o arquivo nf_conntrack proc durante uma tentativa de conexão e é isso que eu vejo (192.168.3.1 = linux-box, 192.168.3.5 = win-box):

# cat /proc/net/nf_conntrack | grep 3389
ipv4     2 tcp      6 118 SYN_SENT src=4.79.142.206 dst=192.168.3.1 sport=43142 dport=3389 packets=6 bytes=264 [UNREPLIED] src=192.168.3.5 dst=4.79.142.206 sport=3389 dport=43142 packets=0 bytes=0 mark=0 secmark=0 zone=0 use=2

segunda atualização

Obteve tcpdump no roteador e parece que a caixa de entrada está enviando um pacote RST:

21:20:24.767792 IP shieldsup.grc.com.45349 > linux-box.myapt.lan.3389: S 19088743:19088743(0) win 8192 <mss 1460>
21:20:24.768038 IP shieldsup.grc.com.45349 > win-box.myapt.lan.3389: S 19088743:19088743(0) win 8192 <mss 1460>
21:20:24.770674 IP win-box.myapt.lan.3389 > shieldsup.grc.com.45349: R 721745706:721745706(0) ack 755785049 win 0

Por que o Windows estaria fazendo isso?

    
por Belmin Fernandez 08.12.2010 / 07:54

3 respostas

5

Adicionar porta nas regras do iptables?:

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination win-box:3389
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

Não estou muito certo de que seja o motivo. Mas normalmente eu faço assim: link

Você pode tentar todas as tabelas primeiro: iptables -t nat -F; iptables -F e então adicione estas duas regras caso outras regras no seu iptables bloqueiem a conexão.

Você também pode

cat /proc/net/nf_conntrack

e veja o conteúdo lá. Cada conexão de encaminhamento tem entradas lá.

Observação : MASQUERADE também é necessário se a rota de saída do Windows não passar por padrão pela caixa iptables ; veja os comentários abaixo (talvez seja necessário mostrar).

    
por 08.12.2010 / 08:41
2

Eu vi você ter resolvido o problema com o MASQUERADE. Eu não percebi que o último comentário estava oculto, então eu tive que resolver a questão por conta própria, graças ao ótimo Tutorial Iptables (procure por ele no Freshmeat). Eu fiz quase o mesmo que você, mas fazendo um SNAT ao invés de MASQUERADE, já que a caixa linux tem um IP local estático. O MASQUERADE seria mais apropriado se a caixa linux tivesse seu IP dado pelo DHCP, caso contrário, é dito que é uma tarefa que consome mais processadores.

Eu não precisava de nenhuma regra FORWARD, embora eu precisasse

echo 1 | sudo tee / proc / sys / net / ipv4 / ip_forward

    
por 29.12.2010 / 10:35
0

Este foi o meu método no CentOS 7:

Primeiro, ative o encaminhamento IPv4 - em /etc/sysctl.conf, verifique se existe a seguinte linha:

net.ipv4.ip_forward=1

Em seguida, configure o iptables:

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination <WINDOWS SERVER IP>

iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

iptables -t nat -A POSTROUTING -j MASQUERADE

Finalmente, certifique-se de que o iptables aplique estas regras na inicialização - muitos guias na internet.

    
por 18.09.2017 / 08:11