Freigeben über


Teil 2.4 – Sicheres Linux mit lokaler Firewall und Zulassen des Remote-HTTP-Zugriffs

Gilt für: .NET Core 2.1, .NET Core 3.1, .NET 5

In diesem Artikel wird erläutert, wie Sie eine lokale Firewall konfigurieren, um Ihren virtuellen Linux-Computer (VM) zu schützen.

Voraussetzungen

Es gibt keine Voraussetzungen, um diesen Teil des Lernprogramms abzuschließen.

Ziel dieses Teils

Sie erfahren, wie Sie Ihre Linux-VM schützen, indem Sie eine Firewall konfigurieren.

Obwohl es keine Voraussetzungen für diesen Teil gibt, würde die ideale Einrichtung den Anweisungen der vorherigen Teile folgen. Sie sollten folgendes haben:

  • Nginx wird automatisch ausgeführt und überwacht Anforderungen, die an Port 80 gesendet werden
  • Nginx ist als Reverseproxy konfiguriert und routing eingehende Anforderungen an eine ASP.NET Core-Anwendung, die auf Port 5000 lauscht.
  • Die ASP.NET Core-Anwendung, die so konfiguriert ist, dass sie nach dem Neustart des Servers automatisch gestartet wird oder wenn der Prozess beendet oder abstürzt

Konfigurieren einer lokalen Firewall für den Zugriff von Remotecomputern

Fast alle Linux-Distributionen enthalten eine lokale Firewall, die iptables genannt wird. Dieser Anfängerleitfaden reicht für einen Schnellstart aus. Iptables ist eine einfache und dennoch leistungsstarke Firewall, die Richtlinienketten verwendet, um Datenverkehr zuzulassen oder zu blockieren.

Gemäß der Hilfeseite der Ubuntu-Community wird iptables standardmäßig auf allen offiziellen Ubuntu-Distributionen installiert und ist so konfiguriert, dass der gesamte Datenverkehr zulässig ist.

Obwohl iptables eine einfache Firewall sind, ist es nicht einfach, die persistenten Regeln zu verwalten. Glücklicherweise gibt es mehrere Firewallkonfigurationstools, die die Konfiguration von Firewallregeln in Linux erheblich vereinfachen. Laut offizieller Ubuntu Firewall-Dokumentation ist ufwdas Standard-Firewall-Konfigurationstool für Ubuntu . Dieses Tool bietet eine benutzerfreundlichere Methode als iptables zum Erstellen einer hostbasierten IPv4- oder IPv6-Firewall.

Notiz

ufw ist standardmäßig deaktiviert. Daher müssen Sie es aktivieren, um es verwenden zu können.

Die linux-VM, die in diesem Lernprogramm verwendet wurde, ist nicht durch Firewallregel geschützt. Dies liegt daran, dass, obwohl iptables installiert und ausgeführt werden, keine definierten Regeln vorhanden sind.

Screenshot des Befehls

Ziel ist es, nur HTTP- und SSH-Datenverkehr (Secure Shell) zuzulassen, um den virtuellen Computer von außen zu erreichen. Führen Sie die folgenden Schritte aus, um dies zu erreichen:

  1. Stellen Sie vor der Aktivierung ufwsicher, dass die Standardrichtlinienregel auf "Zulassen" festgelegt ist. Andernfalls führen Sie das Risiko aus, dass die SSH-Verbindung mit dem virtuellen Computer verloren geht. Die Standardregel ist die Regel, die verarbeitet wird, wenn keine andere Regel übereinstimmt. Durch aktivieren der Standardregel "Zulassen" wird sichergestellt, dass eingehender SSH-Datenverkehr nicht blockiert wird. An diesem Punkt gibt es überhaupt keine "Verweigern"-Regel. Daher ist der gesamte eingehende Datenverkehr zulässig.
  2. Wichtig

    Fügen Sie explizit SSH- und HTTP-Zulassungsregeln hinzu. Beachten Sie außerdem, dass Sie, wenn Sie den SSH-Port auf einen anderen Wert als den Standardwert von 22 konfiguriert haben, diesen Port zulassen sollten. Wenn Sie beispielsweise den SSH-Port in 2222 geändert haben, sollten Sie diesen Befehl ausführen: sudo ufw allow 2222.

  3. Legen Sie die Standardregel als "Verweigern"-Regel fest. Dadurch wird sichergestellt, dass die Standardregel "Verweigern" den Datenverkehr verweigert, wenn das Protokoll etwas anderes als SSH oder HTTP ist. Beispielsweise wird eingehender HTTP-Datenverkehr verweigert.
  4. Aktivieren Sie das ufw.

Die Befehle für diese Schritte sind im folgenden Screenshot aufgeführt.

Screenshot von sechs sudo-Befehlen.

Dies geschieht in jedem Schritt.

  1. überprüft den Status des ufw, indem der Befehl ausgeführt wird sudo ufw status verbose . Standardmäßig ist der ufw nicht aktiviert und inaktiv.

  2. Befehl wird ausgeführt sudo ufw default allow . Da es keine andere Regel als die Standardregel "Zulassen" gibt, wird jeder Port auf dem virtuellen Computer als geöffnet betrachtet.

  3. Wichtig

    Fügen Sie das SSH-Protokoll zur Liste zugelassener Elemente hinzu, indem Sie den sudo ufw allow ssh Befehl ausführen. Protocol.ssh ist ein bekanntes Protokoll und wird in der Datei "/etc/services " definiert. Daher kann "ssh" anstelle von "22" verwendet werden. Denken Sie daran, dass Sie, wenn Sie den SSH-Dienst so konfigurieren, dass er auf einem anderen Port als dem Standardport von 22 lauscht, explizit den anderen Port hinzufügen. Wenn Sie beispielsweise SSH für die Überwachung von Port 2222 konfigurieren, führen Sie den folgenden Befehl aus: sudo ufw allow 2222.

  4. Zulassen des HTTP-Protokolls durch Ausführen sudo ufw allow http. HTTP ist ein bekanntes Protokoll, das in der Datei "/etc/services" definiert ist. Daher kann der Protokollname verwendet werden, und der sudo ufw allow http Befehl kann ausgeführt werden. Das Laufen sudo ufw allow 80 ist auch perfekt gültig.

    Notiz

    Nachdem Sie sowohl die SSH- als auch die HTTP-Protokolle zugelassen haben, möchten Sie alle anderen Protokolle zur Liste "Verweigern" hinzufügen.

  5. Sie können dies tun, indem Sie die Standardregel ändern, um zu verweigern, indem Sie den sudo ufw default deny Befehl ausführen. Nur die SSH- und HTTP-Protokolle sind zulässig. Die anderen Protokolle werden verweigert.

  6. ufwaktivieren.

Dies ist die sudo ufw status verbose Ausgabe, nachdem Sie dieses Verfahren abgeschlossen haben.

Screenshot des befehls

Testen Sie nach der Konfiguration der Firewall, ob sie funktioniert.

Testen der lokalen Firewall

Testen Sie die Firewall einfach: Erstellen Sie eine "Verweigern"-Regel für das HTTP-Protokoll, und versuchen Sie dann, von einem anderen Computer aus auf die Website zuzugreifen. Die Anforderung sollte blockiert werden.

Bevor Sie diese Regel "Verweigern" erstellen, stellen Sie sicher, dass die Anwendung in der aktuellen Konfiguration für den Browser zugänglich ist. Bearbeiten Sie dazu die Datei "C:\Windows\System32\drivers\etc\hosts " auf dem Clientcomputer, indem Sie den Hostnamen des Bugamb hinzufügen und die öffentliche IP-Adresse Ihrer Linux-VM verwenden. Der Bugamb-Hostname löst die IP-Adresse der Linux-VM auf. Sie können Ihrer Hostdatei einen beliebigen Hostnamen hinzufügen, oder Sie können versuchen, eine direkte Verbindung mit der öffentlichen IP-Adresse Ihrer Linux-VM herzustellen.

Screenshot der Willkommensseite

Nachdem Sie überprüft haben, ob HTTP-Anforderungen den virtuellen Computer erreichen können, versuchen Sie, eine Regel zu aktivieren, die HTTP-Datenverkehr blockiert. Dadurch wird sichergestellt, dass die Firewall funktioniert. Fügen Sie dazu eine Regel "Verweigern" für HTTP hinzu, indem Sie ausführen sudo ufw deny http. Dadurch werden zwei "Verweigern"-Regeln für das HTTP-Protokoll (am Port 80) hinzugefügt. Eine ist für IPv4, die andere ist für IPv6.

Screenshot des Befehls

Öffnen Sie den Browser erneut, und versuchen Sie dann, auf die ASP.NET Core-Anwendung zuzugreifen, die unter Linux ausgeführt wird.

Screenshot einer ungültigen Seite.

Dieser Screenshot zeigt das erwartete Ergebnis.

Sie können einen ähnlichen Test direkt innerhalb der Linux-VM ausführen, indem Sie den wget Befehl verwenden. Der folgende Screenshot zeigt die erforderlichen Schritte für denselben Test durch Ausführen wget.

Screenshot von sudo four commands.

Dies geschieht in jedem Schritt.

  1. Die Regel "Verweigern" für das HTTP-Protokoll wurde hinzugefügt.

  2. Der wget buggyamb-external Befehl wurde ausgeführt. Wie Sie vermuten, löst der Hostname "bugamb-external" die öffentliche IP-Adresse der Linux-VM auf. Bearbeiten Sie dazu die /etc/hosts Datei mithilfe von vi. Wie gezeigt, hat versucht, wget eine Verbindung damit herzustellen, aber nie erfolgreich. Um den Vorgang aufzubrechen, mussten Sie STRG+C drücken.

  3. Es wurde eine "Allow"-Regel für das HTTP-Protokoll hinzugefügt.

  4. Wenn Sie den wget buggyamb-external Befehl erneut ausführen, wurden unterschiedliche Ergebnisse erzielt. Dieses Mal konnte eine Verbindung hergestellt werden, wget da das HTTP-Protokoll zulässig war. Wie gezeigt, wget lädt die Index.html Datei in Ihr aktuelles Verzeichnis herunter.

Sie sind nun einen Schritt näher bei der Durchführung der erforderlichen Konfiguration zum Debuggen der ASP.NET Core-Anwendung. Bevor Sie zum nächsten Teil wechseln, stellen Sie sicher, dass sowohl SSH als auch HTTP in der lokalen Firewall zulässig sind.

Screenshot des Befehls

Nächste Schritte

Teil 2.5 – Kopieren Sie Dateien aus Ihrer Entwicklungsumgebung auf einen virtuellen Linux-Computer, und extrahieren Sie dann die Dateien in Linux.