So sichern Sie die Webserverinfrastruktur mit DigitalOcean Cloud-Firewalls mithilfe von Doctl

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:

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.