it-swarm.com.de

SSH zur ec2-Instanz im privaten VPC-Subnetz über NAT Server)

Ich habe eine VPC in aws mit einem öffentlichen Subnetz und einem privaten Subnetz erstellt. Das private Subnetz hat keinen direkten Zugriff auf ein externes Netzwerk. Es gibt also einen NAT Server im öffentlichen Subnetz, der den gesamten ausgehenden Datenverkehr vom privaten Subnetz an das äußere Netzwerk weiterleitet.

Derzeit kann ich SSH von öffentlichem Subnetz zu privatem Subnetz, auch SSH von NAT zu privatem Subnetz). Ich möchte jedoch SSH von jedem Computer (Heim-Laptop, Büromaschine und Handy) zu Instanzen im privaten Subnetz.

Ich habe einige Nachforschungen angestellt, dass ich das Feld NAT) einrichten kann, um SSH an eine Instanz in einem privaten Subnetz weiterzuleiten. Aber ich habe kein Glück dafür.

Kann jemand auflisten, was ich einrichten muss, um dies zu ermöglichen.

Namen sind:

laptop (jedes Gerät außerhalb der VPC)

nat (der NAT Server im öffentlichen Subnetz)

ziel (der Server im privaten Subnetz, zu dem ich eine Verbindung herstellen möchte)

Nicht sicher, ob die folgenden Einschränkungen vorliegen oder nicht:

Das "Ziel" hat keine öffentliche IP, nur eine Subnetz-IP, zum Beispiel 10.0.0.1. Das "Ziel" kann keine Verbindung zu "nat" über die öffentliche Adresse von nat herstellen. Es gibt mehrere "Ziel" -Server. Muss ich für jeden einen einrichten?

Vielen Dank

17
jasonfungsing

Sie können einen Bastion-Host einrichten, um eine Verbindung zu einer beliebigen Instanz in Ihrer VPC herzustellen:

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

Sie können eine neue Instanz starten, die als Bastion-Host fungiert, oder Ihre vorhandene NAT -Instanz als Bastion verwenden).

Wenn Sie als Übersicht eine neue Instanz erstellen, werden Sie:

1) Erstellen Sie eine Sicherheitsgruppe für Ihren Bastion-Host, die den SSH-Zugriff von Ihrem Laptop aus ermöglicht (beachten Sie diese Sicherheitsgruppe für Schritt 4).

2) Starten Sie eine separate Instanz (Bastion) in einem öffentlichen Subnetz in Ihrer VPC

3) Geben Sie diesem Bastion-Host entweder beim Start oder durch Zuweisen einer elastischen IP eine öffentliche IP

4) Aktualisieren Sie die Sicherheitsgruppen jeder Ihrer Instanzen, die keine öffentliche IP-Adresse haben, um den SSH-Zugriff vom Bastion-Host aus zu ermöglichen. Dies kann mithilfe der Sicherheitsgruppen-ID des Bastion-Hosts (sg - #####) erfolgen.

5) Verwenden Sie die SSH-Agentenweiterleitung (ssh-a user @ publicIPofBastion), um zuerst eine Verbindung zur Bastion herzustellen, und dann einmal in der Bastion SSH in eine interne Instanz (ssh user @ private-IP-of-Internal-Instance). Die Agentenweiterleitung kümmert sich um die Weiterleitung Ihres privaten Schlüssels, damit dieser nicht auf der Bastion-Instanz gespeichert werden muss (. Speichern Sie niemals private Schlüssel auf einer Instanz !! )

Der obige AWS-Blog-Beitrag sollte in der Lage sein, einige Details zum Prozess zu liefern. Ich habe auch das Folgende aufgenommen, falls Sie zusätzliche Details zu Bastion-Hosts wünschen:

Konzept der Bastion-Hosts: http://en.m.wikipedia.org/wiki/Bastion_Host

Wenn Sie weitere Informationen benötigen, können Sie dies gerne kommentieren.

30
jca-

Nur so konnte ich es schaffen.

1) Stellen Sie sicher, dass die Sicherheitsgruppe für diese private Instanz in der eingehenden Regel die Sicherheitsgruppe aus dem öffentlichen Subnetz enthält

Ports-Protokollquelle
Alle Alle sg-0b6616e070b9ea2d (öffentliche Sicherheitsgruppe)

2) Konfigurieren Sie Ihre SSH-Konfigurationsdatei mithilfe von Proxy-Befehlen so, dass sie so etwas enthält

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

Lauf ssh privatehost es sollte funktionieren

1

Nur um zu verdeutlichen: Sobald Sie in Ihren Bastion-Host ssh haben, müssen Sie in den NAT Host als Benutzer ec2-user Ssh. Dies hat mich seitdem ein wenig übertrumpft Normalerweise ist der Ubuntu-Benutzer Ubuntu in AWS. Also habe ich Folgendes getan:

laptop> ssh -A [email protected]_bastion
ssh_bastion> ssh [email protected]_private_dns_or_private_ip

Denken Sie auch daran, dass Ihre ssh_bastion eine ausgehende Regel haben sollte, die den Datenverkehr zu anderen Hosts und SGs zulässt.

0
Joel

Zusätzlich zu der akzeptierten Antwort, die viel, aber nicht vollständig hilft, musste ich sicherstellen, dass Sicherheitsgruppen eingehenden und ausgehenden Verkehr zulassen. Auf den ersten Blick sah es so aus, als hätten sie es bereits getan, aber da ich die CloudFormation-Vorlage verwendet hatte, war mir nicht aufgefallen, dass die Quelle für eingehenden Datenverkehr in das private Subnetz meine ELB war. Es erlaubte also den gesamten Verkehr, kam aber nur von ELB. Das Ändern in mein öffentliches Subnetz hat das Problem behoben.

0
Milan Markovic