Como SSH para instância ec2 na sub-rede privada VPC via servidor NAT

16

Eu criei uma VPC no aws com uma sub-rede pública e uma sub-rede privada. A sub-rede privada não tem acesso direto à rede externa. Portanto, há um servidor NAT na sub-rede pública que encaminha todo o tráfego de saída da sub-rede privada para a rede externa.

Atualmente, eu posso SSH de sub-rede pública para sub-rede privada, também SSH de NAT para sub-rede privada. No entanto, o que eu quero é SSH de qualquer máquina (laptop doméstico, escritório e móvel) para instâncias na sub-rede privada.

Eu fiz algumas pesquisas que eu posso configurar a caixa NAT para encaminhar o SSH para instância na sub-rede privada. Mas não tive sorte por isso.

Alguém pode listar o que eu preciso configurar para tornar isso possível.

Os nomes são:

laptop (qualquer dispositivo fora da VPC)

nat (o servidor NAT na sub-rede pública)

destino (o servidor na sub-rede privada à qual eu quero conectar)

Não tenho certeza a seguir são limitações ou não:

O "destino" não possui um IP público, apenas um ip de sub-rede, por exemplo 10.0.0.1 O "destino" não pode se conectar ao "nat" via público do nat. Existem vários servidores de "destino", preciso configurar um para cada um?

obrigado

jasonfungsing
fonte
Este link descreve as etapas necessárias para conectar-se às instâncias do EC2 na sub-rede privada por meio do encaminhamento do agente SSH.
Shailender Rawat

Respostas:

25

Você pode configurar um host bastião para conectar-se a qualquer instância da sua VPC:

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

Você pode optar por iniciar uma nova instância que funcionará como um host bastião ou usar sua instância NAT existente como bastião.

Se você criar uma nova instância, como uma visão geral, você:

1) crie um grupo de segurança para seu host bastião que permita o acesso SSH a partir do seu laptop (observe este grupo de segurança na etapa 4)

2) inicie uma instância separada (bastião) em uma sub-rede pública em sua VPC

3) conceda a esse host bastião um IP público no lançamento ou atribuindo um IP Elastic

4) atualize os grupos de segurança de cada uma das suas instâncias que não possuem um IP público para permitir o acesso SSH a partir do host bastião. Isso pode ser feito usando o ID do grupo de segurança do host bastião (sg - #####).

5) use o encaminhamento do agente SSH (ssh -A usuário @ publicIPofBastion) para conectar-se primeiro ao bastião e, uma vez no bastião, o SSH em qualquer instância interna (ssh user @ private-IP-of-Internal-Instance). O encaminhamento de agente cuida do encaminhamento de sua chave privada, para que ela não precise ser armazenada na instância do bastião ( nunca armazene chaves privadas em nenhuma instância !! )

A postagem do blog da AWS acima deve ser capaz de fornecer detalhes sobre o processo. Também incluí o abaixo, caso você queira mais detalhes sobre os hosts bastiões:

Conceito de hosts do bastião: http://en.m.wikipedia.org/wiki/Bastion_host

Se você precisar de esclarecimentos, sinta-se à vontade para comentar.

jca-
fonte
3
Certifique-se de permitir o SSH / 22 na entrada e na saída no bastião.
user464180
Esse é um ponto tão crítico que deve fazer parte da resposta!
Tariq
Além da resposta aceita, que ajuda muito, mas não totalmente, eu tinha que garantir que os grupos de segurança permitissem tráfego de entrada e saída. À primeira vista, parecia que eles já o fazem, mas desde que eu usei o modelo CloudFormation, não havia notado que a origem do tráfego de entrada para a sub-rede privada era meu ELB. Portanto, permitiu todo o tráfego, mas apenas vindo do ELB. Alterar isso para minha sub-rede pública corrigiu o problema.
Milan Markovic
1

A única maneira de fazê-lo funcionar.

1) Verifique se o grupo de segurança desta instância privada possui na regra de entrada o grupo de segurança da sub-rede pública

Origem do Protocolo de Portas
Tudo Tudo sg-0b6616e070b9ea2d (grupo de segurança pública)

2) Usando comandos proxy, configure seu arquivo de configuração ssh, para ter algo parecido com isto

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

Executá- ssh privatehost lo deve funcionar

Leonardo Ampuero
fonte
0

Apenas para esclarecer: depois de fazer o ssh no host do bastião, você precisará ssh no host do NAT como usuário ec2-user. Isso me incomodou um pouco, pois normalmente o usuário do Ubuntu é o Ubuntu na AWS. Então eu fiz:

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

Além disso, lembre-se de que seu ssh_bastion deve ter uma regra de saída que permita o tráfego para outros hosts e sgs.

Joel
fonte
Esse nome é 'ec2_user' como resultado da ativação específica de uma Amazon AMI, já configurada para o serviço NAT? Então, como 'ec2-user' conseguiu uma conta na máquina particular?
Dennis