Projektnetzwerk einrichten
Der Standardaufbau eines NimbusNexus-Netzwerks für eine mehrschichtige Anwendung: ein privates Netzwerk mit zwei Subnetzen (öffentlich erreichbar und nur für die Datenbank), ein Router, der das öffentliche Subnetz mit dem Internet verbindet, und Sicherheitsgruppen, die den Traffic zwischen den Schichten einschränken. Diese Anleitung führt Sie durch das gesamte Setup und erklärt, wozu jedes Teil da ist.
Am Ende haben Sie:
- Ein Netzwerk mit zwei Subnetzen (
10.0.1.0/24für Web,10.0.2.0/24für die Datenbank) - Einen Router mit externem Gateway, an das Web-Subnetz angebunden
- Zwei Sicherheitsgruppen:
web-sg(HTTPS offen zum Internet) unddb-sg(Port 5432 nur vonweb-sg) - Ein Testmuster, mit dem Sie prüfen, ob die Isolation funktioniert
Warum dieser Aufbau
Apps auf einer einzelnen VM brauchen nichts davon — eine VM mit einer Floating-IP und ohne Netzwerkkonfiguration funktioniert problemlos. Dieser Aufbau ist für Apps gedacht, die:
- mehrere Komponenten haben (Web-Schicht + Datenbank, Web-Schicht + Worker-Schicht + Cache, ...)
- Teile des Stacks aus dem öffentlichen Internet heraushalten müssen
- durchsetzen wollen: „Die Web-Schicht darf mit der DB-Schicht sprechen; sonst niemand“
Für eine echte Anwendung auf einer einzelnen VM siehe stattdessen Container-Deployment-Muster.
Voraussetzungen
- Ein API-Key mit den Scopes
networks:writeundvms:write. - Eine gewählte Region (wir verwenden
us-east-1). - Eine grobe Vorstellung davon, welche VMs / Dienste Sie in welcher Schicht haben wollen.
export NIMBUS_KEY="nn_live_xxxxxxxxxxxxxxxx"
export REGION="us-east-1"1 · Netzwerk erstellen
Ein Netzwerk ist die L2-Broadcast-Domain — alle VMs und Ressourcen, die an dasselbe Netzwerk angebunden sind, können untereinander routen (vorbehaltlich der Sicherheitsgruppen).
curl -X POST https://api.nimbusnexus.net/v1/networks \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "app-network",
"region": "us-east-1",
"cidr": "10.0.0.0/16"
}'Der Block 10.0.0.0/16 ist der Adressraum für alles in diesem Netzwerk. Wählen Sie einen Bereich, der sich nicht mit Ihrem Büro-VPN, Ihrem Heimnetz oder einem anderen Netzwerk überschneidet, mit dem Sie später vielleicht ein Peering einrichten (192.168.0.0/16 ist daher meist eine schlechte Wahl — zu verbreitet). 10.0.0.0/16 funktioniert für die meisten Setups; 172.16.0.0/12 ist ebenfalls in Ordnung.
Speichern Sie die Netzwerk-ID:
export NET_ID="net_01HG7Y3..."2 · Zwei Subnetze erstellen
Teilen Sie das Netzwerk in zwei Subnetze auf — eines für alles, was dem öffentlichen Internet zugewandt ist, und eines für alles, was das nicht sein soll.
# Web subnet — VMs that need internet access
curl -X POST https://api.nimbusnexus.net/v1/subnets \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"web\",
\"network_id\": \"$NET_ID\",
\"cidr\": \"10.0.1.0/24\",
\"gateway_ip\": \"10.0.1.1\"
}"
# Database subnet — for tier-2 resources
curl -X POST https://api.nimbusnexus.net/v1/subnets \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"db\",
\"network_id\": \"$NET_ID\",
\"cidr\": \"10.0.2.0/24\",
\"gateway_ip\": \"10.0.2.1\"
}"Die Gateway-IP ist die Adresse der Router-Schnittstelle in diesem Subnetz. VMs verwenden sie als Standardroute.
3 · Router erstellen und an das Web-Subnetz anbinden
Der Router bringt den Traffic aus dem Web-Subnetz ins Internet (und zurück). Das Datenbank-Subnetz bekommt keine Verbindung zum Router — so halten Sie es aus dem öffentlichen Internet heraus.
curl -X POST https://api.nimbusnexus.net/v1/routers \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"app-router\",
\"region\": \"us-east-1\",
\"external_gateway\": true
}"external_gateway: true teilt dem Router eine öffentliche IP zu und aktiviert SNAT für ausgehenden Traffic aus den angebundenen Subnetzen.
Speichern Sie die Router-ID und binden Sie den Router an das Web-Subnetz an:
export ROUTER_ID="rtr_01HG7Y3..."
curl -X POST https://api.nimbusnexus.net/v1/routers/$ROUTER_ID/interfaces \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d "{ \"subnet_id\": \"$WEB_SUBNET_ID\" }"Das DB-Subnetz bleibt ohne Router. Alles im DB-Subnetz erreicht nur, was über das L2-Netzwerk erreichbar ist — also andere Ressourcen im selben Netzwerk, gesteuert durch Sicherheitsgruppen.
4 · Sicherheitsgruppen erstellen
Sicherheitsgruppen sind zustandsbehaftete Firewalls, die auf die Netzwerkschnittstellen einer VM angewendet werden. Sie steuern, welcher Traffic hereinkommt (eingehend) und welcher hinausgeht (ausgehend). „Zustandsbehaftet“ bedeutet, dass eine von innen aufgebaute Verbindung automatisch auch in Gegenrichtung zugelassen wird — Sie brauchen nur Regeln für Verbindungen, die von außen aufgebaut werden.
# Web security group — HTTPS open to the internet
curl -X POST https://api.nimbusnexus.net/v1/security-groups \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "web-sg",
"region": "us-east-1",
"ingress_rules": [
{ "protocol": "tcp", "port": 443, "source_cidr": "0.0.0.0/0", "description": "HTTPS" },
{ "protocol": "tcp", "port": 22, "source_cidr": "203.0.113.5/32", "description": "SSH from office" }
],
"egress_rules": [
{ "protocol": "any", "destination_cidr": "0.0.0.0/0", "description": "anywhere" }
]
}'
# DB security group — port 5432 only from the web SG
curl -X POST https://api.nimbusnexus.net/v1/security-groups \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "db-sg",
"region": "us-east-1",
"ingress_rules": [
{ "protocol": "tcp", "port": 5432, "source_security_group": "web-sg", "description": "Postgres from web tier" }
],
"egress_rules": [
{ "protocol": "any", "destination_cidr": "0.0.0.0/0", "description": "anywhere" }
]
}'source_security_group in der Regel der DB-SG setzt „nur die Web-Schicht darf sich verbinden“ durch — statt eines statischen CIDR verweist die Regel auf die SG selbst. Jede VM, die mit web-sg versehen ist, erreicht die DB. Fügen Sie VMs zu web-sg hinzu oder entfernen Sie sie, und die Zugriffsliste aktualisiert sich automatisch.
Die Web-SG öffnet Port 22 (SSH) für eine bestimmte Büro-IP, nicht für die ganze Welt. Öffnen Sie SSH nicht für 0.0.0.0/0 — in jeder Cloud gibt es Scanner, die Port 22 auf schwache Passwörter prüfen.
5 · VMs anbinden
Geben Sie beim Erstellen einer VM das Netzwerk, das Subnetz und die Sicherheitsgruppen an:
# Web tier VM
curl -X POST https://api.nimbusnexus.net/v1/vms \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"web-01\",
\"size\": \"gp-2-4\",
\"region\": \"us-east-1\",
\"image\": \"ubuntu-24.04\",
\"network_interfaces\": [
{ \"subnet_id\": \"$WEB_SUBNET_ID\", \"security_groups\": [\"web-sg\"] }
]
}"
# Database tier VM (if running DB on your own VM rather than managed DB)
curl -X POST https://api.nimbusnexus.net/v1/vms \
-H "Authorization: Bearer $NIMBUS_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"db-01\",
\"size\": \"gp-4-8\",
\"region\": \"us-east-1\",
\"image\": \"ubuntu-24.04\",
\"network_interfaces\": [
{ \"subnet_id\": \"$DB_SUBNET_ID\", \"security_groups\": [\"db-sg\"] }
]
}"Für den externen Zugriff auf die Web-VM teilen Sie eine Floating-IP zu und hängen sie an. Die DB-VM bekommt nie eine Floating-IP — so funktioniert die Netzwerkisolation.
6 · Isolation prüfen
Testen Sie, ob der Aufbau tatsächlich durchsetzt, was Sie wollten:
# From the web VM, can we reach the DB on 5432? (Should: yes)
nc -v -w 3 10.0.2.10 5432
# From the web VM, can we reach the DB on 22 (SSH)? (Should: no — DB SG only opens 5432)
nc -v -w 3 10.0.2.10 22
# From your laptop, can we reach the DB directly? (Should: no — DB subnet isn't routable from internet)
nc -v -w 3 <DB_PUBLIC_IP> 5432 # there's no public IP, this failsWenn sich einer dieser Tests nicht wie erwartet verhält, stimmen die Regeln der Sicherheitsgruppen oder die Anbindungen an Netzwerk/Subnetz nicht. Prüfen Sie sie erneut.
Was das nicht ist
- Kein VPC-Peering. Das ist das interne Netzwerk eines einzelnen Projekts. Die Netzwerke zweier NimbusNexus-Projekte werden nicht per Peering verbunden — mit Absicht (siehe Sicherheitsmodell).
- Keine vollständige WAF- oder DDoS-Schicht. Sicherheitsgruppen arbeiten auf L3/L4 — sie können die Bodys von HTTP-Requests nicht inspizieren. Für Filterung auf Anwendungsebene betreiben Sie eine WAF (z. B. ModSecurity hinter nginx) in der Web-Schicht.
- Kein Autoscaling. Sie verwalten die VMs manuell. Für automatisch skalierte Flotten funktionieren dieselben Netzwerkbausteine, aber zur Verwaltung im großen Maßstab sollten Sie Infrastructure as Code (Terraform, Pulumi) einsetzen.
Nächste Schritte
- Referenz für Netzwerke — alle Optionen für den Aufruf zum Erstellen.
- Referenz für Subnetze — IPv6-Setup, DHCP-Optionen, Überschreiben von DNS-Nameservern.
- Referenz für Sicherheitsgruppen — die vollständige Regelsyntax.
- Referenz für Router — statische Routen, BGP-Advertisement, fortgeschrittenere Verschaltung.
- Floating-IPs — der Baustein für öffentliche IPs, der das Ganze mit der Außenwelt verbindet.