Come SSH all'istanza ec2 nella sottorete privata VPC tramite server NAT


16

Ho creato un VPC in aws con una sottorete pubblica e una sottorete privata. La sottorete privata non ha accesso diretto alla rete esterna. Quindi, esiste un server NAT nella sottorete pubblica che inoltra tutto il traffico in uscita dalla sottorete privata alla rete esterna.

Attualmente, posso SSH da sottorete pubblica a sottorete privata, anche SSH da NAT a sottorete privata. Tuttavia, quello che voglio è SSH da qualsiasi macchina (laptop di casa, macchina da ufficio e mobile) alle istanze nella sottorete privata.

Ho fatto alcune ricerche che posso impostare la casella NAT per inoltrare SSH all'istanza nella sottorete privata. Ma non ho avuto fortuna per questo.

Qualcuno può elencare ciò che devo configurare per renderlo possibile.

I nomi sono:

laptop (qualsiasi dispositivo esterno al VPC)

nat (il server NAT nella sottorete pubblica)

destinazione (il server nella sottorete privata a cui voglio collegarmi)

Non sono sicuri i seguenti limiti o no:

La "destinazione" non ha un IP pubblico, ma solo un IP di sottorete, ad esempio 10.0.0.1 La "destinazione" non può connettersi a "nat" tramite il pubblico di nat. Esistono diversi server "di destinazione", devo installarne uno per ciascuno?

Grazie


Questo collegamento delinea i passaggi necessari per connettersi alle istanze EC2 nella sottorete privata tramite l'inoltro dell'agente SSH.
Shailender Rawat,

Risposte:


25

È possibile impostare un host bastione per connettersi a qualsiasi istanza all'interno del VPC:

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

Puoi scegliere di avviare una nuova istanza che funzionerà come host di un bastione o utilizzare la tua istanza NAT esistente come bastione.

Se crei una nuova istanza, come panoramica, dovrai:

1) crea un gruppo di sicurezza per il tuo host bastione che consentirà l'accesso SSH dal tuo laptop (nota questo gruppo di sicurezza per il passaggio 4)

2) avviare un'istanza separata (bastione) in una sottorete pubblica nel VPC

3) assegnare a quel bastione host un IP pubblico all'avvio o assegnando un IP elastico

4) aggiorna i gruppi di sicurezza di ciascuna delle tue istanze che non dispongono di un IP pubblico per consentire l'accesso SSH dall'host bastion. Questo può essere fatto usando l'ID del gruppo di sicurezza dell'host bastion (sg - #####).

5) utilizzare l'inoltro dell'agente SSH (ssh -A user @ publicIPofBastion) per connettersi prima al bastione, quindi una volta nel bastione, SSH in qualsiasi istanza interna (ssh user @ private-IP-of-Internal-Instance). L'inoltro dell'agente si occupa di inoltrare la chiave privata in modo che non debba essere archiviata nell'istanza del bastione ( mai archiviare le chiavi private in nessuna istanza !! )

Il post di blog AWS sopra dovrebbe essere in grado di fornire un po 'di grinta per quanto riguarda il processo. Ho anche incluso quanto segue nel caso in cui volessi ulteriori dettagli sugli host bastion:

Concetto di Bastion Hosts: http://en.m.wikipedia.org/wiki/Bastion_host

Se hai bisogno di chiarimenti, non esitare a commentare.


3
Assicurati di consentire SSH / 22 sia in entrata che in uscita sul bastione.
user464180,

Questo è un punto così critico che deve far parte della risposta!
Tariq,

Oltre alla risposta accettata che aiuta molto ma non del tutto, ho dovuto assicurarmi che i gruppi di sicurezza consentissero il traffico in entrata e in uscita. A prima vista sembrava che lo fossero già, ma da quando ho usato il modello CloudFormation, non avevo notato che la fonte per il traffico in entrata verso la sottorete privata fosse il mio ELB. Quindi, ha permesso tutto il traffico ma proveniente solo da ELB. Cambiarlo nella mia sottorete pubblica ha risolto il problema.
Milan Markovic

1

L'unico modo per farlo funzionare.

1) Assicurarsi che il gruppo di sicurezza per questa istanza privata abbia nella regola in entrata il gruppo di sicurezza dalla sottorete pubblica

Porte Protocollo Origine
Tutti Tutti sg-0b6616e070b9ea2d (gruppo di sicurezza pubblica)

2) Usando i comandi proxy, configura il tuo file di configurazione ssh, per avere qualcosa del genere

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

Eseguirlo ssh privatehost dovrebbe funzionare


0

Giusto per chiarire: una volta che hai fatto l'shsh nell'host del tuo bastione, devi usare l'host NAT come utente ec2-user. Questo mi ha un po 'sconvolto, dal momento che normalmente l'utente Ubuntu è Ubuntu su AWS. Così ho fatto:

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

Inoltre, ricorda che ssh_bastion dovrebbe avere una regola in uscita che consenta il traffico verso altri host e sg.


Quel nome 'ec2_user' è il risultato di una specifica AMI Amazon, già configurato per il servizio NAT? Quindi, come ha fatto 'ec2-user' a ottenere un account sul computer privato?
Dennis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.