Teil 2.4 : Sichern von Linux mithilfe einer lokalen 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 diese Komponente gibt, würde das ideale Setup den Anweisungen aus den vorherigen Teilen folgen. Sie sollten über Folgendes verfügen:

  • Nginx wird automatisch ausgeführt und lauscht auf Anforderungen, die an Port 80 gesendet werden
  • Nginx, das als Reverseproxy konfiguriert ist und eingehende Anforderungen an eine ASP.NET Core Anwendung weiterleitet, die an Port 5000 lauscht.
  • Die ASP.NET Core Anwendung, die so konfiguriert ist, dass sie automatisch gestartet wird, nachdem der Server neu gestartet wurde oder wenn der Prozess beendet wird oder abstürzt

Konfigurieren einer lokalen Firewall zum Zulassen des Zugriffs von Remotecomputern

Fast alle Linux-Distributionen enthalten eine lokale Firewall mit dem Namen "iptables". Dieser Leitfaden für Anfänger ist für einen Schnellstart ausreichend. Iptables ist eine einfache und dennoch leistungsstarke Firewall, die Richtlinienketten verwendet, um Datenverkehr zuzulassen oder zu blockieren.

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

Obwohl iptables eine einfache Firewall ist, ist es nicht einfach, die persistenten Regeln zu verwalten. Glücklicherweise gibt es mehrere Firewallkonfigurationstools, die die Konfiguration von Firewallregeln in Linux erheblich vereinfachen. Gemäß der offiziellen Ubuntu-Firewalldokumentationist das Standardmäßige Firewallkonfigurationstool für Ubuntu ufw . Dieses Tool bietet eine benutzerfreundlichere Methode als iptables zum Erstellen einer hostbasierten IPv4- oder IPv6-Firewall.

Hinweis

ufw ist anfänglich 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 durch keine Firewallregel geschützt. Dies liegt daran, dass iptables zwar installiert sind und ausgeführt werden, es aber keine definierten Regeln gibt.

Screenshot des Befehls "sudo iptables".

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

  1. Stellen Sie vor dem Aktivieren ufw sicher, dass die Standardrichtlinienregel auf "Zulassen" festgelegt ist. Andernfalls besteht das Risiko, dass die SSH-Verbindung mit dem virtuellen Computer verloren geht. Die Standardregel ist die Regel, die verarbeitet wird, wenn keine andere Regel gefunden wird. Wenn Sie die Standardregel "Zulassen" aktivieren, wird sichergestellt, dass eingehender SSH-Datenverkehr nicht blockiert wird. An diesem Punkt gibt es überhaupt keine "Deny"-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 diesen Port zulassen sollten, wenn Sie den SSH-Port auf einen anderen Wert als den Standardwert 22 konfiguriert haben. Wenn Sie beispielsweise den SSH-Port in 2222 geändert haben, sollten Sie den folgenden Befehl ausführen: sudo ufw allow 2222 .

  3. Legen Sie die Standardregel als "Verweigerungsregel" fest. Dadurch wird sichergestellt, dass bei einem anderen Protokoll als SSH oder HTTP die Standardregel "Verweigern" den Datenverkehr verweigert. Beispielsweise wird eingehender HTTP-Datenverkehr verweigert.
  4. Aktivieren Sie die 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 sudo ufw status verbose wird. Standardmäßig ist der Ufw nicht aktiviert und inaktiv.

  2. führt sudo ufw default allow den Befehl aus. 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 der Liste zugelassener Benutzer 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 den anderen Port explizit hinzufügen sollten, wenn Sie den SSH-Dienst so konfigurieren, dass er auf einen anderen Port als den Standardport 22 überwacht wird. Wenn Sie Z. B. SSH so konfigurieren, dass Port 2222 überwacht wird, führen Sie den folgenden Befehl aus: sudo ufw allow 2222 .

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

    Hinweis

    Nachdem Sie sowohl die SSH- als auch die HTTP-Protokolle zugelassen haben, sollten Sie der Liste "Verweigern" alle anderen Protokolle hinzufügen.

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

  6. Aktivieren Sie ufw .

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

Screenshot des ausführlichen Befehls "sudo ufw status".

Nachdem die Firewall konfiguriert wurde, testen Sie, ob sie funktioniert.

Testen der lokalen Firewall

Testen Sie die Firewall ganz einfach: Erstellen Sie eine "Verweigerungsregel" 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 "Verweigern"-Regel erstellen, stellen Sie sicher, dass der Browser in der aktuellen Konfiguration auf die Anwendung zugegriffen werden kann. Bearbeiten Sie dazu die Datei "C:\Windows\System32\drivers\etc\hosts" auf dem Clientcomputer, indem Sie den Hostnamen "csvamb" hinzufügen und die öffentliche IP-Adresse Ihrer Linux-VM verwenden. Der hostname des computersamb löst die IP-Adresse der Linux-VM auf. Sie können ihrer Hostdatei einen beliebigen Hostnamen hinzufügen oder 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 hierzu eine "Verweigern"-Regel für HTTP hinzu, indem Sie sudo ufw deny http ausführen. Dadurch werden zwei "Deny"-Regeln für das HTTP-Protokoll (an Port 80) hinzugefügt. Eine ist für IPv4, die andere für IPv6.

Screenshot des Befehls "sudo ufw deny http".

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

Screenshot der ungültigen Seite.

Dieser Screenshot zeigt das erwartete Ergebnis.

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

Screenshot von vier sudo-Befehlen.

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 vielleicht vermuten, löst der Hostname "gifamb-external" die öffentliche IP-Adresse des virtuellen Linux-Computers auf. Bearbeiten Sie dazu die /etc/hosts Datei mithilfe von vi. Wie gezeigt, wget hat versucht, eine Verbindung herzustellen, aber nie erfolgreich. Um den Vorgang zu beenden, mussten Sie STRG+C drücken.

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

  4. Durch erneutes Ausführen des wget buggyamb-external Befehls wurden unterschiedliche Ergebnisse erzielt. Dieses Mal konnte eine wget Verbindung hergestellt werden, 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 an der Fertigstellung 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 Sudo ufw-Statusbefehls.

Nächste Schritte

Teil 2.5 – Kopieren Sie Dateien aus Ihrer Entwicklungsumgebung auf eine Linux-VM, und extrahieren Sie dann die Dateien in Linux.