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

16

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. Ainsi, il existe 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 du NAT au sous-réseau privé. Cependant, ce que je veux, c'est SSH à partir de n'importe quelle machine (ordinateur portable, ordinateur de bureau et mobile) vers des instances dans un sous-réseau privé.

J'ai fait des 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 ça.

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'IP publique, seulement une 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

jasonfungsing
la source
Ce lien décrit les étapes requises pour se connecter aux instances EC2 dans le sous-réseau privé via le transfert d'agent SSH.
Shailender Rawat

Réponses:

25

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 NAT existante 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 hôte 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 prend en charge le transfert de 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 ce qui suit au cas où vous souhaiteriez 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.

jca-
la source
3
Assurez-vous d'autoriser SSH / 22 à la fois en entrée et en sortie sur le bastion.
user464180
C'est un point tellement critique qu'il doit faire partie de la réponse!
Tariq
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.
Milan Markovic
1

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

Ports Protocol Source
All All sg-0b6616e070b9ea2d (groupe de sécurité publique)

2) À l'aide des 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

Exécutez ssh privatehost cela devrait fonctionner

Leonardo Ampuero
la source
0

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.

Joel
la source
Ce nom «ec2_user» est-il le résultat de la rotation d'une Amazon AMI spécifiquement, déjà configurée pour le service NAT? Alors, comment «ec2-user» a-t-il obtenu un compte sur la machine privée?
Dennis