6 votes

Transfert de RDP via une machine Linux en utilisant iptables : Ne fonctionne pas

J'ai une machine Linux et une machine Windows derrière un routeur qui implémente le NAT (le diagramme peut être exagéré, mais c'était le plaisir de faire ):

network setup

Je fais suivre le port RDP (3389) sur le routeur à la machine Linux parce que je veux auditer les connexions RDP. Pour que la machine Linux fasse suivre le trafic RDP, j'ai écrit ces règles 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

Le port est en écoute sur la machine 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..)

Et le port est transféré sur la machine 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

Cependant, je n'obtiens aucune connexion RDP réussie depuis l'extérieur. Le port ne répond même pas :

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

Des idées ?

Mise à jour

Par @Zhiqiang Ma, j'ai regardé nf_conntrack proc pendant une tentative de connexion et voici ce que je vois (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

2ème mise à jour

J'ai trouvé tcpdump sur le routeur et il semble que win-box envoie un paquet 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

Pourquoi Windows ferait-il cela ?

5voto

user63064 Points 11

Ajouter un port dans les règles 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

Je ne suis pas très sûr que ce soit la raison. Mais je le fais habituellement de cette façon : http://www.systutorials.com/816/port-forwarding-using-iptables/

Vous pouvez tous essayer de vider les tables d'abord : iptables -t nat -F ; iptables -F et ensuite ajouter ces deux règles au cas où d'autres règles dans votre iptables bloquent la connexion.

Vous pouvez également

cat /proc/net/nf_conntrack

et voir le contenu qui s'y trouve. Chaque connexion de transfert a des entrées à cet endroit.

Note : MASQUERADE est nécessaire également si la route sortante de Windows ne passe pas par défaut par le iptables voir les commentaires ci-dessous (il se peut que vous deviez dé-cacher).

0 votes

Bonjour à tous ! 8 articles sur 10 font référence à votre propre blog. Bien que vous citiez également certaines informations : est-il vraiment nécessaire de faire référence à ce blog ?

0 votes

@Zhigiang Ma : J'ai ajouté une mise à jour.

0 votes

@Arjan Salut ! Merci de l'avoir signalé. Je vais y veiller. En fait, je me réfère à mon propre blog qui résout un problème similaire auparavant et ensuite je réponds à ces questions. La réponse est généralement courte et précise, et le blog fournit plus de détails. Mais je ferai attention à cela et n'ajouterai le lien que s'il est très utile à la réponse.

2voto

Chris Points 2224

J'ai vu que vous avez résolu le problème avec MASQUERADE. Je n'ai pas remarqué que le dernier commentaire était caché, j'ai donc dû résoudre la question par moi-même, grâce à l'excellent tutoriel Iptables (à chercher dans Freshmeat). J'ai fait presque la même chose que vous, mais en faisant un SNAT au lieu de MASQUERADE, puisque la boîte linux a une IP locale statique. MASQUERADE serait plus approprié si l'adresse IP de la machine linux était donnée par DHCP, sinon il s'agirait d'une tâche plus gourmande en processeur.

Je n'ai pas eu besoin de règle FORWARD, bien que j'aie dû

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

0 votes

Oui, ça me semble être la bonne réponse. SNAT devrait bien fonctionner pour les connexions provenant d'une plage d'IP connue, MASQUERADE a bien fonctionné dans mon cas (le proxy sortant était no la route par défaut de retour sur le côté Windows)

0voto

Thomas Wilkins Points 1

C'était ma méthode sur CentOS 7 :

Premièrement, activez la redirection IPv4 - dans /etc/sysctl.conf assurez-vous qu'il y a la ligne suivante :

net.ipv4.ip_forward=1

Ensuite, configurez 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

Enfin, assurez-vous qu'iptables applique ces règles au démarrage - de nombreux guides sur Internet.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X