web-dev-qa-db-fra.com

Comment SSH à l'instance ec2 dans le sous-réseau privé VPC via NAT server

J'ai créé un VPC dans aws avec un sous-réseau public et un sous-réseau privé. Le sous-réseau privé n'a pas d'accès direct au réseau externe. Il existe donc un serveur NAT dans le sous-réseau public qui transfère tout le trafic sortant du sous-réseau privé vers le réseau externe.

Actuellement, je peux SSH du sous-réseau public au sous-réseau privé, également SSH de NAT au sous-réseau privé. Cependant, ce que je veux, c'est SSH de n'importe quelle machine (ordinateur portable, ordinateur de bureau et mobile) vers des instances dans un sous-réseau privé.

J'ai fait quelques recherches pour configurer la boîte NAT pour transférer SSH vers l'instance dans un sous-réseau privé. Mais je n'ai pas eu de chance pour cela.

Quelqu'un peut-il indiquer ce que je dois configurer pour que cela soit possible?.

Les noms sont:

ordinateur portable (tout appareil en dehors du VPC)

nat (le serveur NAT dans le sous-réseau public)

destination (le serveur du sous-réseau privé auquel je veux me connecter)

Je ne suis pas sûr que les limitations suivantes soient ou non:

La "destination" n'a pas d'adresse IP publique, seulement une adresse IP de sous-réseau, par exemple 10.0.0.1 La "destination" ne peut pas se connecter à "nat" via nat's public. Il existe plusieurs serveurs "de destination", dois-je en configurer un pour chacun?

Merci

17
jasonfungsing

Vous pouvez configurer un hôte bastion pour vous connecter à n'importe quelle instance de votre VPC:

http://blogs.aws.Amazon.com/security/post/Tx3N8GFK85UN1G6/Securely-connect-to-Linux-instances-running-in-a-private-Amazon-VPC

Vous pouvez choisir de lancer une nouvelle instance qui fonctionnera comme hôte bastion, ou utiliser votre instance existante NAT comme bastion.

Si vous créez une nouvelle instance, comme aperçu, vous:

1) Créez un groupe de sécurité pour votre hôte bastion qui permettra l'accès SSH depuis votre ordinateur portable (notez ce groupe de sécurité pour l'étape 4)

2) Lancez une instance distincte (bastion) dans un sous-réseau public de votre VPC

3) donner à ce bastion Host une adresse IP publique au lancement ou en attribuant une adresse IP élastique

4) Mettez à jour les groupes de sécurité de chacune de vos instances qui n'ont pas d'adresse IP publique pour autoriser l'accès SSH à partir de l'hôte bastion. Cela peut être fait en utilisant l'ID du groupe de sécurité de l'hôte bastion (sg - #####).

5) utilisez le transfert d'agent SSH (ssh -A user @ publicIPofBastion) pour vous connecter d'abord au bastion, puis une fois dans le bastion, SSH dans n'importe quelle instance interne (ssh user @ private-IP-of-Internal-Instance). Le transfert d'agent se charge de transférer votre clé privée afin qu'elle ne doive pas être stockée sur l'instance bastion ( ne stockez jamais de clés privées sur aucune instance !! )

Le billet de blog AWS ci-dessus devrait être en mesure de fournir quelques détails sur le processus. J'ai également inclus ci-dessous au cas où vous voudriez des détails supplémentaires sur les hôtes bastions:

Concept d'hôtes Bastion: http://en.m.wikipedia.org/wiki/Bastion_Host

Si vous avez besoin d'éclaircissements, n'hésitez pas à commenter.

30
jca-

La seule façon dont je pouvais le faire fonctionner.

1) Assurez-vous que le groupe de sécurité de cette instance privée a dans la règle entrante le groupe de sécurité du sous-réseau public

Source du protocole des ports
Tous Tous sg-0b6616e070b9ea2d (groupe de sécurité publique)

2) À l'aide de commandes proxy, configurez votre fichier de configuration ssh, pour avoir quelque chose comme ça

vim ~/.ssh/config

Host publichost
   HostName 24.123.34.45
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand none
Host privatehost
   HostName 10.0.2.133
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand ssh publichost -W %h:%p

Courir ssh privatehost ça devrait marcher

1
Leonardo Ampuero

Juste pour clarifier: une fois que vous êtes entré dans votre hôte bastion, vous devez entrer dans l'hôte NAT en tant qu'utilisateur ec2-user. Cela m'a un peu trompé, car normalement l'utilisateur ubuntu est ubuntu sur AWS. J'ai donc fait:

laptop> ssh -A ubuntu@ssh_bastion
ssh_bastion> ssh ec2-user@nat_private_dns_or_private_ip

N'oubliez pas non plus que votre ssh_bastion doit avoir une règle sortante qui autorise le trafic vers d'autres hôtes et sg.

0
Joel

En plus de la réponse acceptée qui aide beaucoup mais pas entièrement, j'ai dû m'assurer que les groupes de sécurité autorisent le trafic entrant et sortant. À première vue, cela semblait déjà le cas, mais depuis que j'utilisais le modèle CloudFormation, je n'avais pas remarqué que la source du trafic entrant vers le sous-réseau privé était mon ELB. Ainsi, il autorisait tout le trafic, mais uniquement en provenance d'ELB. Changer cela sur mon sous-réseau public a résolu le problème.

0
Milan Markovic