web-dev-qa-db-fra.com

Comment puis-je spécifier un port local lors de l'établissement des connexions SSH?

J'ai deux serveurs hébergés dans IDC. Je ne peux utiliser que les ports 20/21/22/23/3389/33101-33109 pour établir des connexions entre deux serveurs. Le périphérique réseau IDC bloquera tous les autres paquets dont le port source ou de destination ne se trouve pas dans la liste/plage 20/21/22/23/80/3389/33101-33109. Mais le port source de SSH est aléatoire.

Utilisation de la commande ssh username@server -p remote_port on peut facilement spécifier un port distant.

Existe-t-il donc un paramètre de commande ssh ou une autre manière de spécifier un port source local afin que je puisse utiliser, par exemple, le port 33101 pour établir la connexion SSH?

Ma topologie de réseau est la suivante:
network topology

13
fajin yu

Vous ne pouvez pas spécifier le port source pour le client ssh.

Mais vous pouvez utiliser nc comme proxy, comme ceci:

ssh -p 33101 -o 'ProxyCommand nc -p 33101 %h %p' $SERVER_2

De ( Comment puis-je définir le port source pour SSH sur le serveur unbuntu? (sur ServerFault) .

26
PapEr

Pour des situations ponctuelles, ou de toute façon occasionnelles, l'approche ProxyCommand est facilement très pratique.

D'un autre côté, si vous avez besoin de plusieurs connexions simultanées, ou lorsque vous devez peut-être utiliser cette commande fréquemment pour le travail quotidien, vous pouvez également envisager de définir une règle de traduction d'adresse réseau (NAT) sur votre serveur.

Cela nécessite un accès superutilisateur (généralement root) sur votre serveur pour appliquer d'abord la seule règle NAT. Notez que pourrait ne pas être autorisé (ou efficace) pour appliquer la règle NAT, même lorsque vous disposez d'un accès superutilisateur, si votre "serveur" est en fait un conteneur (comme un Docker) au lieu d'une machine.

En parlant d'un système Linux typique avec la suite iptables, la règle NAT à appliquer sur votre serveur1 pour votre exemple de cas pourrait ressembler à:

iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109

Cette commande demande au noyau Linux de faire toutes les connexions vers le port server2-port of server2-ip-address pour sortir en utilisant un port source choisi dans la plage 33101-33109 qui est disponible à ce moment.

Une fois cette règle en place, vous vous connectez à votre serveur2 juste avec votre habitude:

ssh username@server2 -p remote_port

et vous pouvez également utiliser cette même commande ssh simultanément autant de fois que nécessaire, tant qu'il existe des ports disponibles dans la plage spécifiée dans la règle NAT.

Notez cependant qu'un netstat (ou une commande équivalente) exécuté sur votre serveur signale l'adresse locale de la connexion comme étant le numéro de port source non modifié, choisi au hasard, même si le trafic réel qui est délivré à votre serveur2 porte le modifié numéro de port source.

Pour annuler la règle NAT, la commande est la même sauf pour un -D option à la place de -I.

Avoir la règle NAT appliquée automatiquement au démarrage dépend de la distribution Linux que vous avez sur votre serveur et de la présence ou non d'une configuration de pare-feu.

Je n'ai aucune expérience avec les systèmes de type BSD, mais j'espère qu'il existe un équivalent.

2
LL3