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.
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:
- Stellen Sie vor dem Aktivieren
ufwsicher, 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. -
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. - 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.
- Aktivieren Sie die
ufw.
Die Befehle für diese Schritte sind im folgenden Screenshot aufgeführt.
Dies geschieht in jedem Schritt.
überprüft den Status des Ufw, indem der Befehl ausgeführt
sudo ufw status verbosewird. Standardmäßig ist der Ufw nicht aktiviert und inaktiv.führt
sudo ufw default allowden Befehl aus. Da es keine andere Regel als die Standardregel "Zulassen" gibt, wird jeder Port auf dem virtuellen Computer als geöffnet betrachtet.-
Wichtig
Fügen Sie das SSH-Protokoll der Liste zugelassener Benutzer hinzu, indem Sie den
sudo ufw allow sshBefehl 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. 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 dersudo ufw allow httpBefehl ausgeführt werden. Die Ausführungsudo ufw allow 80ist 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.
Sie können dies tun, indem Sie die Standardregel so ändern, dass sie verweigert wird, indem Sie den
sudo ufw default denyBefehl ausführen. Nur die SSH- und HTTP-Protokolle sind zulässig. Die anderen Protokolle werden abgelehnt.Aktivieren Sie
ufw.
Dies ist die sudo ufw status verbose Ausgabe, nachdem Sie dieses Verfahren abgeschlossen haben.
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.
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.
Öffnen Sie den Browser erneut, und versuchen Sie dann, auf die ASP.NET Core Anwendung zuzugreifen, die unter Linux ausgeführt wird.
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.
Dies geschieht in jedem Schritt.
Die Regel "Verweigern" für das HTTP-Protokoll wurde hinzugefügt.
Der
wget buggyamb-externalBefehl 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/hostsDatei mithilfe von vi. Wie gezeigt,wgethat versucht, eine Verbindung herzustellen, aber nie erfolgreich. Um den Vorgang zu beenden, mussten Sie STRG+C drücken.Eine "Allow"-Regel für das HTTP-Protokoll wurde hinzugefügt.
Durch erneutes Ausführen des
wget buggyamb-externalBefehls wurden unterschiedliche Ergebnisse erzielt. Dieses Mal konnte einewgetVerbindung hergestellt werden, da das HTTP-Protokoll zulässig war. Wie gezeigt,wgetlä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.