J'ai besoin d'une solution de proxy inverse pour SSH

10

Salut voici une situation J'ai un serveur dans un centre de données d'entreprise pour un projet. J'ai un accès SSH à cette machine sur le port 22. Il y a des machines virtuelles en cours d'exécution sur ce serveur, puis à l'arrière de tout ce que de nombreux autres systèmes d'exploitation fonctionnent. Maintenant que je suis derrière le pare-feu des centres de données, mon superviseur m'a demandé si je pouvais faire quelque chose par lequel je peux donner à de nombreuses personnes sur Internet un accès direct à ces machines virtuelles. Je sais que si j'étais autorisé à obtenir du trafic sur un port autre que 22, je peux faire une redirection de port. Mais comme je ne suis pas autorisé à le faire, quelle peut être la solution dans ce cas? Les personnes qui souhaitent se connecter peuvent être des idiots complets, qui peuvent être heureux simplement en ouvrant du mastic sur leurs machines ou même être filezilla.

Je n'ai pas de pare-feu entre mes mains ni aucun port autre que 22 ouvert et en fait, même si je demande qu'ils ne permettent pas d'ouvrir.2 fois SSH n'est pas quelque chose que mon superviseur veut.

Liaison
la source
1
question connexe avec une autre excellente solution: serverfault.com/questions/361794/…
Kaii
SSH Reverse Proxy github.com/tg123/sshpiper
farmer1992
sshpiperd fonctionne très bien!
Király István

Réponses:

5

Vous devez ouvrir le tunnel ssh de votre ordinateur au serveur dans le centre de données. Appelons cela "serveur1". Si vous utilisez openssh, vous pouvez simplement exécuter

ssh -L0.0.0.0:8080:localhost:8080 you_username@server1

Cela ouvrira la connexion de votre ordinateur au port 8080 au serveur, port 8080, en ignorant le pare-feu entre les deux. En supposant que votre apache écoute sur le port 8080. Le format de retransmission du port écoute IP: port local: adresse distante: port distant. Bien sûr, pour un seul serveur, vous pouvez également utiliser

ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1

Veuillez noter que localhost dans le paramètre -L est relatif à server1. En d'autres termes, le serveur voit des connexions provenant de localhost, alors qu'en fait, elles proviennent de votre ordinateur via une connexion ssh.

Vous avez également besoin d'un paramètre

AllowTcpForwarding yes

dans la configuration ssh du serveur (généralement / etc / ssh / sshd_config).

Après cela, d'autres peuvent se connecter à votre ordinateur sur le port 8080 pour obtenir une connexion via Apache Reverse Proxy. Si vous avez besoin d'un proxy général (pour que les utilisateurs puissent choisir l'adresse, et pas seulement des adresses spécifiques dans la configuration Apache), vous devez installer squid sur server1 et utiliser le tunnel ssh pour squid le port.

Olli
la source
Vous voulez dire quand je le ferai ssh -L0.0.0.0:8080:localhost:8080 you_username@server1 alors si la connexion passera toujours par le port 22 du pare-feu (car si cela ne se produit pas, je ne peux rien faire) et le tunnel ssh serait établi entre la machine locale et la machine distante aux ports spécifiés mais le trafic entier se produirait (port 22) au pare-feu.
Bond
Lorsque vous exécutez le tunnel ssh, ce trafic (du port 8080 au port 8080) passe à l'intérieur de la connexion ssh, en utilisant le port 22. Le pare-feu voit le trafic vers le port 22, pas 8080.
Olli
Lorsque vous donnez cette commande, ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1 je veux savoir ce qui peut être mis comme adresse_serveur_distant, c'est que l'adresse IP de la machine interne à laquelle je veux utiliser server1 comme serveur intermédiaire. Ai-je bien compris?
Bond
Bond: oui, c'est exact. Vous pouvez également spécifier plusieurs tunnels -L (avec différents ports source, bien sûr) pour ouvrir des connexions à plusieurs machines internes. Par exemple "-L0.0.0.0: 8080: remote_server1: 80 -L0.0.0.0: 8081: remote_server2: 80 -L0.0.0.0: 8082: remote_server2: 22" (sans guillemets).
Olli
Pour que cela soit solide, il faudrait définir un serveur agissant comme un rebond en dehors du centre de données et autoriser le trafic. Bien sûr, le tunnel ssh est correct comme solution temporaire, mais pour quelque chose en production, je conseillerais d'installer un véritable proxy inverse sur le rebond et adaptez le pare-feu pour autoriser les connexions 8080 uniquement à partir de ce rebond. Cela dit, il est plus intelligent de placer le proxy inverse comme l'une des machines virtuelles à l'intérieur du contrôleur de domaine. Pour que la connexion ne soit sécurisée avec SSL que vers cette machine.
2018
0

Peut-être que vous pourriez utiliser quelque chose comme SshMeIn . C'est un système web open source qui fera ssh tunnel à travers les pare-feu, vous n'avez même pas besoin d'ouvrir les ports.

Belug
la source