Einführung
DigitalOcean Cloud Firewalls bietet einen leistungsstarken Firewall-Service auf Netzwerkebene, der Ihre Ressourcen vor nicht autorisiertem Datenverkehr schützt.
Obwohl Sie Cloud-Firewalls über die DigitalOcean-Systemsteuerung konfigurieren können, kann eine Befehlszeilenschnittstelle die bessere Wahl sein, wenn Sie viele Droplets verwalten müssen, ein Skript für einen Prozess erstellen oder lieber vom Terminal aus arbeiten möchten.
In diesem Tutorial erfahren Sie, wie Sie mit "+ doctl +" - dem offiziellen "https://github.com/digitalocean/doctl[DigitalOcean Command-Line Client" - Cloud-Firewalls für einen Webserver erstellen und verwalten.
Voraussetzungen
Für dieses Tutorial benötigen Sie:
-
+ doctl +
Version 1.7.0 installiert und authentifiziert durch Befolgen der offiziellen Installationsanweisungen im+ doctl +
GitHub-Repository. (Verwenden Sie den Befehl "+ doctl version ", um zu überprüfen, welche Version von " doctl +" Sie ausführen.) -
Ein SSH-Schlüssel, der Ihrem DigitalOcean-Konto unter How To Use SSH Keys with DigitalOcean Droplets hinzugefügt wurde. Lernprogramm.
Wir werden ein Ein-Klick-LAMP-Stack-Image (Linux, Apache, MySQL, PHP) unter Ubuntu 16.04 in der Region * nyc1 * erstellen und dieses auf ein 512-MB-Droplet übertragen. Bevor Sie mit diesem Tutorial beginnen, empfehlen wir Ihnen, sich mit + doctl +
und Cloud Firewalls vertraut zu machen, indem Sie https://www.digitalocean.com/community/tutorials/how-to-use-doctl-the-official-digitalocean lesen -Befehlszeilen-Client [So verwenden Sie Doctl, den offiziellen DigitalOcean-Befehlszeilen-Client] und Eine Einführung in DigitalOcean Cloud Firewalls.
Schritt 1 - Einrichten des Webservers
Zunächst wählen wir eine Region für unser Droplet aus. In diesem Lernprogramm wird * nyc1 * verwendet. Mit dem folgenden Befehl können Sie jedoch alle Regionen und ihre Slugs anzeigen:
doctl compute region list
OutputSlug Name Available
nyc1 New York 1 true
sfo1 San Francisco 1 true
ams2 Amsterdam 2 true
sgp1 Singapore 1 true
lon1 London 1 true
nyc3 New York 3 true
ams3 Amsterdam 3 true
fra1 Frankfurt 1 true
tor1 Toronto 1 true
sfo2 San Francisco 2 true
blr1 Bangalore 1 true
Da wir keine Passwörter über das Netzwerk senden und die Wahrscheinlichkeit eines Brute-Force-Angriffs verringern möchten, sichern wir unseren Webserver mit einer SSH-Schlüsselauthentifizierung.
Um ein Droplet zu erstellen, das einen SSH-Schlüssel enthält, benötigt + doctl +
den Fingerabdruck des SSH-Schlüssels, den Sie mit dem folgenden Befehl erhalten können:
doctl compute ssh-key list
OutputID Name FingerPrint
9763174 sammy_rsa
Kopieren Sie den Fingerabdruck des SSH-Schlüssels, den Sie mit Ihrem Droplet verwenden möchten.
Lassen Sie uns nun alles in einem einzigen Befehl zusammenfassen, der ein 512-MB-Droplet mit dem Namen * nyc1 * erstellt. Verwenden Sie dazu ein LAMP-Stack-Image mit einem Mausklick, auf dem Ubuntu 16.04 mit unserem SSH-Schlüssel ausgeführt wird.
doctl compute droplet create \
--region \
--image \
--ssh-keys \
--size
Die Ausgabe gibt uns einen Überblick über das soeben erstellte Droplet, einschließlich der ID, des Namens, der IPv4-Adresse, des Speichers usw. des Droplets:
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
52059458 web-1 512 1 20 nyc1 Ubuntu LAMP on 16.04 new
Verwenden Sie den folgenden Befehl, um den Status Ihres Droplets zu überprüfen. Wenn es vollständig bereitgestellt ist, notieren Sie sich die ID, die Sie benötigen, wenn Sie die Firewall dem Droplet in Schritt 2 zuweisen. Bewegen Sie sich nicht über diesen Schritt hinaus, bis der Status Ihres Droplets "+ active +" lautet.
doctl compute droplet list
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
web-1 203.0.113.1 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
Verwenden Sie anschließend "+ doctl ", um sich über SSH beim Droplet anzumelden. Dadurch wird Ihre LAMP-Installation aktiviert und Sie erhalten zusätzliche Anweisungen zur Vorbereitung Ihres Servers für die Verwendung in der Produktion. Wenn Sie die Fehlermeldung " Verbindung abgelehnt " erhalten, ist Ihr Droplet noch nicht bereit. Warten Sie einige Minuten und führen Sie dann den Befehl " liste " erneut aus, um sicherzustellen, dass der Status Ihres Droplets auf " aktiv +" gesetzt ist, bevor Sie fortfahren.
doctl compute ssh
Output...
-------------------------------------------------------------------------------
Thank you for using DigitalOcean's LAMP Application.
LAMP has now been enabled. You can access your LAMP instance at:
Your web root is located at /var/www/html and can be seen from
http://203.0.113.1
...
Beenden Sie die SSH-Sitzung, nachdem Sie das Droplet für Ihre Anforderungen konfiguriert haben.
[environment]
exit
Zeigen Sie mit Ihrem Webbrowser auf die IP-Adresse des Droplets, um sicherzustellen, dass der LAMP-Stack ordnungsgemäß funktioniert. Die Standard-Ein-Klick-LAMP-Stack-Startseite von DigitalOcean sollte mit der Meldung angezeigt werden: "Bitte melden Sie sich über SSH bei Ihrem Droplet an, um Ihre LAMP-Installation zu konfigurieren." LAMP aktiviert und dass Sie die IP-Adresse Ihres Droplets korrekt in Ihren Browser kopiert haben.
Da wir die für dieses Lernprogramm erforderliche LAMP-Konfiguration bereits abgeschlossen haben, können Sie das Droplet vor unbefugtem Datenverkehr schützen.
Schritt 2 - Erstellen der Firewall für den Webserver
Zunächst verwenden wir die Droplet-ID, die wir aus dem Befehl "+ doctl compute droplet list " in Schritt 1 erhalten haben, um eine Cloud-Firewall mit dem Namen "+" zu erstellen, die eingehende SSH-Verbindungen an Port "+ 22 +" und allen zulässt ausgehende TCP-, UDP- und ICMP-Verbindungen. Auf diese Weise können wir den Server über die Befehlszeile verwalten und gleichzeitig vielen grundlegenden Diensten die Möglichkeit geben, normal zu arbeiten.
Das Feld "+ protocol " ist erforderlich und muss entweder auf " tcp ", " udp " oder " icmp " gesetzt werden. Außerdem müssen Sie für alle Protokolle außer " icmp " einen " ports +" -Wert angeben. Laut specification ist keine erforderlich.
- Das Feld "+ address " gibt an, welche IP-Adressen auf einen bestimmten Port zugreifen dürfen. Wenn Sie Datenverkehr von allen IPv4-Adressen zulassen möchten, verwenden Sie "+0: 0: 0: 0/0 +". Wenn Sie Datenverkehr von allen IPv6-Adressen zulassen möchten, verwenden Sie "
-
0/0 +".
Zuletzt muss jede Firewall, die Sie erstellen, mindestens eine Regel haben, entweder unter dem Flag "+ - eingehende Regeln " oder " - ausgehende Regeln ", und alle Werte müssen als durch Kommas getrennte " Schlüssel eingegeben werden: Wert + `Listen. Verwenden Sie für mehrere Regeln eine in Anführungszeichen gesetzte Zeichenfolge von durch Leerzeichen getrennten Werten.
Verwenden Sie nun den Befehl "+ create +", um die Firewall zu erstellen:
doctl compute firewall create --name \
--droplet-ids \
--inbound-rules "protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0" \
--outbound-rules "protocol:icmp,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:all,address:0.0.0.0/0,address:::/0 protocol:udp,ports:all,address:0.0.0.0/0,address:::/0"
Die Ausgabe enthält eine grundlegende Übersicht über die neue Cloud Firewall. Notieren Sie sich die ID der Cloud-Firewall, da Sie sie in Schritt 3 verwenden werden, um der Firewall zusätzliche Regeln hinzuzufügen.
OutputID Name Status Created At Inbound Rules Outbound Rules Droplet IDs Tags Pending Changes
web-firewall waiting 2017-06-17T21:20:38Z protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0 protocol:icmp,ports:0,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:0,address:0.0.0.0/0,address:::/0 protocol:udp,ports:0,address:0.0.0.0/0,address:::/0 droplet_id:,removing:false,status:waiting
Wenn Sie jemals einen Portbereich angeben müssen, verwenden Sie das folgende Format:
--inbound-rules "protocol:tcp,,address:0.0.0.0/0,address:::/0"
Sie können auch das Flag "+ droplet_id " anstelle des Flags " address +" verwenden. Dies kann besonders in Setups nützlich sein, in denen mehrere Droplets miteinander kommunizieren.
--inbound-rules "protocol:tcp,ports:8000-8080,droplet_id:"
Sie können auch mehrere Felder "+ address " oder " droplet_id +" in einer einzigen Regel kombinieren, z.
--inbound-rules "protocol:tcp,ports:8000-8080,droplet_id:,droplet_id:"
Stellen Sie zu diesem Zeitpunkt sicher, dass die Cloud-Firewall ordnungsgemäß funktioniert, indem Sie Ihren Webbrowser auf die IP-Adresse des Droplets richten. Es sollte eine Meldung angezeigt werden, dass die Site nicht mehr erreichbar ist. Wenn dies nicht der Fall ist, überprüfen Sie die Ausgabe des vorherigen Befehls "+ create +", um sicherzustellen, dass Sie keine Fehlermeldung verpasst haben.
Auch wenn unsere eingehende Regel bereits SSH zulassen sollte, wird dies mit "+ doctl +" überprüft.
doctl compute ssh
Wenn Sie keine Verbindung zu Droplet herstellen können, können Sie das Problem anhand der Lernserie How To Troubleshoot SSH diagnostizieren.
Beenden Sie die SSH-Sitzung, sobald Sie eine erfolgreiche Verbindung mit dem Droplet hergestellt haben:
[environment]
exit
Da wir nun überprüft haben, ob die Cloud-Firewall ordnungsgemäß funktioniert, fügen wir eine zusätzliche Regel hinzu, um eingehenden Datenverkehr zum Webserver zuzulassen.
Schritt 3 - Hinzufügen zusätzlicher Regeln
Unter Verwendung der Firewall-ID, die wir vom Befehl "+ doctl compute firewall create " in Schritt 2 erhalten haben, fügen wir jetzt eine Regel hinzu, die eingehenden TCP-Verkehr für Apache an Port " 80 +" zulässt.
Wir verwenden den Befehl "+ add-rules ", für den eine Firewall-ID und mindestens eine Regel erforderlich sind. Regeln werden wie in Schritt 2 mit den Flags " - Outbound-Rules " und " - Inbound-Rules +" angegeben.
doctl compute firewall add-rules \
--inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0"
Wenn Sie HTTPS benötigen, erlauben Sie eingehenden TCP-Verkehr an Port + 443 +
.
doctl compute firewall add-rules \
--inbound-rules "protocol:tcp,ports:443,address:0.0.0.0/0,address:::/0"
Bei Erfolg erzeugt dieser Befehl keine Ausgabe. Wenn eine Fehlermeldung angezeigt wird, befolgen Sie die Anweisungen auf dem Bildschirm, um das Problem zu diagnostizieren.
Richten Sie Ihren Webbrowser jetzt erneut auf die IP-Adresse Ihres Droplets. Diesmal sollte wieder die Standard-Zielseite für den DigitalOcean-LAMP-Stapel mit einem Klick angezeigt werden. Wenn dies nicht der Fall ist, überprüfen Sie nochmals, ob Sie Ihre IP-Adresse korrekt in Ihren Webbrowser kopiert haben, und verfolgen Sie die vorherigen Schritte erneut.
Wenn Sie über zusätzliche Webserver verfügen, die Sie schützen möchten, fahren Sie mit Schritt 4 fort. Fahren Sie andernfalls mit Schritt 5 fort, in dem wir Cloud-Firewalls mit Tags verwalten.
(Optional) Schritt 4 - Hinzufügen von Tröpfchen zur Firewall
Wenn Sie mehrere Droplets haben, können Sie auf jedes dieselbe Cloud-Firewall anwenden.
Verwenden Sie den Befehl + add-droplets +
, um einer Cloud-Firewall zusätzliche Droplets hinzuzufügen. Für diesen Befehl ist eine Cloud-Firewall-ID als Argument erforderlich. Mithilfe des Flags "+ droplet-ids +" wird bestimmt, auf welche Droplets die Firewall angewendet werden soll.
Wenn Sie die Cloud-Firewalls-ID nicht kennen, verwenden Sie den Befehl "+ list":
doctl compute firewall list
OutputID Name Status Created At Inbound Rules Outbound Rules Droplet IDs Tags Pending Changes
web-firewall succeeded 2017-06-17T21:20:38Z protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0 protocol:icmp,ports:0,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:0,address:0.0.0.0/0,address:::/0 protocol:udp,ports:0,address:0.0.0.0/0,address:::/0 52059458
Sie können auch den Befehl "+ list +" verwenden, um die Droplets-IDs abzurufen:
doctl compute droplet list
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
test-1 203.0.113.1 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
web-1 203.0.113.2 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
Mit dem folgenden Befehl + doctl +
fügen wir das ` Droplet der `
Firewall hinzu, die die ID ++
hat:
doctl compute firewall add-droplets \
--droplet-ids
Wenn Sie keine Ausgabe erhalten, war der Befehl erfolgreich. Wenn eine Fehlermeldung angezeigt wird, befolgen Sie die Anweisungen auf dem Bildschirm, um das Problem zu diagnostizieren.
Wenn Sie mehrere Tropfen gleichzeitig hinzufügen möchten, trennen Sie sie durch Kommas voneinander. Beachten Sie, dass zwischen zwei IDs keine Leerzeichen stehen:
--droplet-ids ,
Verwenden Sie nun Tags, um die Verwaltung der Cloud-Firewall zu vereinfachen.
Schritt 5 - Verwenden von Tags
Zu diesem Zeitpunkt haben wir der Cloud-Firewall einzelne Droplets hinzugefügt. Cloud-Firewalls unterstützen jedoch auch Tags, um die Verwaltung mehrerer Ressourcen zu vereinfachen. Weitere Informationen zur Funktionsweise von Tags finden Sie unter How To Tag DigitalOcean Droplets.
In diesem Schritt markieren wir Droplets, fügen Tags zur Cloud-Firewall hinzu und entfernen dann die einzelnen Droplet-IDs aus der Firewall, sodass die Droplets mithilfe von Tags sicher sind.
Bevor wir einem Droplet ein Tag mit + doctl +
hinzufügen können, müssen wir zuerst das Tag mit dem Befehl + tag create +
erstellen:
doctl compute tag create
OutputName Droplet Count
0
Sobald das Tag erstellt ist, wenden Sie es mit dem Befehl + droplet tag +
auf das Droplet an. Dieser Befehl verwendet die Droplet-ID als Argument und ruft den Tag-Namen vom Flag "+ - Tag-Name +" ab.
doctl compute droplet tag \
--tag-name ""
Wenn Sie mehrere Droplets mit einer Cloud-Firewall sichern möchten, wiederholen Sie den vorherigen Befehl für jedes Droplet.
Fügen Sie als Nächstes das Tag mit dem Befehl + add-tags +
zur Cloud-Firewall hinzu, der die Firewall-ID als Argument verwendet und die Liste der zu verwendenden Tag-Namen aus dem Flag + - tag-names +
abruft:
doctl compute firewall add-tags \
--tag-names
Wenn Sie keine Ausgabe erhalten, war der Befehl erfolgreich. Wenn eine Fehlermeldung angezeigt wird, befolgen Sie die Anweisungen auf dem Bildschirm, um das Problem zu diagnostizieren.
Wenn Sie mehrere Tags hinzufügen müssen, geben Sie diese als durch Kommas getrennte Liste an:
--tag-names ,
Schließlich können wir die Droplet-ID aus der Firewall entfernen, da das Droplet Teil des "+ Webserver +" -Tags ist und das gesamte Tag jetzt geschützt ist.
doctl compute firewall remove-droplets \
--droplet-ids
Wiederholen Sie den vorherigen Schritt für jedes Droplet, das Sie nur mit dem Tag sichern möchten.
Sie haben jetzt eine vollständig konfigurierte Cloud-Firewall, die Ihren Webserver vor nicht autorisiertem Datenverkehr schützt. Wenn Sie auch eine Regel aus der Firewall löschen möchten, fahren Sie mit Schritt 6 fort.
(Optional) Schritt 6 - Entfernen von Regeln aus der Firewall
Wenn Sie eine Regel aus einer Cloud-Firewall entfernen möchten, verwenden Sie den Befehl + remove-rules +
.
Der Befehl "+ remove-rules " verwendet eine Firewall-ID als Argument und Regeln werden mit den Flags " - ausgehende Regeln " und " - eingehende Regeln +" angegeben. Beachten Sie, dass die angegebene Regel genau mit der Regel übereinstimmen muss, die bei der Erstellung verwendet wurde.
doctl compute firewall remove-rules \
--inbound-rules
Wenn Sie keine Ausgabe erhalten, war der Befehl erfolgreich. Wenn eine Fehlermeldung angezeigt wird, befolgen Sie die Anweisungen auf dem Bildschirm, um das Problem zu diagnostizieren.
Fazit
In diesem Tutorial haben wir "+ doctl +" verwendet, um DigitalOcean Cloud-Firewalls zu erstellen, diesen Firewalls Regeln hinzuzufügen, den Firewalls zusätzliche Droplets hinzuzufügen, Firewalls mit Tags zu verwalten und Regeln von Firewalls zu entfernen.
Weitere Informationen zur Verwendung von Cloud-Firewalls finden Sie unter How To Organize DigitalOcean Cloud Firewalls.
Informationen zur Fehlerbehebung bei Cloud-Firewalls finden Sie unter How To Troubleshoot DigitalOcean Firewalls.