Einführung
UFW, oder Uncomplicated Firewall, ist eine Schnittstelle zu iptables
, die darauf ausgerichtet ist, den Prozess der Konfiguration einer Feuerwalle zu vereinfachen. Obwohl iptables
ein stabiler und flexibler Werkzeug ist, kann es für Anfänger schwer sein, zu erfahren, wie man sie richtig konfiguriert, um seine Netzwerk Sicherheit zu gewähren. Wenn Sie nicht sicher sind, welches Tool Sie verwenden sollen, könnte UFW Ihnen die richtige Wahl sein. Dieser Tutorial zeigt Ihnen, wie Sie mit UFW auf Ubuntu v18.04 und abwärts einen Feuerwall einrichten.
In diesem Tutorial werden Sie erfahren, wie Sie mit UFW auf Ubuntu v18.04 und abwärts einen Feuerwall einrichten.
Voraussetzungen
Wenn Sie Ubuntuversion 16.04 oder darunter benutzen, empfehlen wir Ihnen, eine neuere Version von Ubuntu zu installieren, da Ubuntu keine Support-Informationen für diese Versionen mehr bereitstellt. Diese Sammlung von Guiden helfen Ihnen bei der Upgrade-Prozedur.
Zum Folgen dieses Tutorials brauchen Sie:
-
Ein Server, der Ubuntu verwendet, zusammen mit einem nicht-root-Benutzer mit
sudo
-Rechten. Für Anleitungen, wie Sie diese einrichten, wählen Sie bitte Ihre Distribution aus dieser Liste und folgen Sie unserer Anleitung zum initialen ServerSetup. -
UFW ist standardmäßig auf Ubuntu installiert. Wenn es aus irgendeinem Grund deinstalliert wurde, können Sie es mit
sudo apt install ufw
installieren.
Einrichten des Ubuntu-Firewalls mit UFW
- IPv6 aktivieren
- Standardrichtlinien einrichten
- SSH-Verbindungen erlauben
- UFW aktivieren
- Andere erforderliche Verbindungen erlauben
- Verbindungen ablehnen
- Firewall-Rollen und Regeln prüfen
- Ubuntu Firewall status und Regeln überprüfen
- Ubuntu Firewall deaktivieren oder zurücksetzen
Schritt 1 — Sicherstellen, dass IPv6 aktiviert ist
In den letzten Versionen von Ubuntu ist IPv6 standardmäßig aktiviert. In der Praxis bedeutet das, dass die meisten Firewall-Rules, die auf dem Server hinzugefügt werden, sowohl eine IPv4 als auch eine IPv6 Version enthalten, die durch v6
im Output des UFW
Status-Kommandos identifiziert wird. Um zu prüfen, ob IPv6 aktiviert ist, können Sie Ihren UFW
Konfigurationsdatei unter /etc/default/ufw
öffnen und mit nano
oder Ihrem bevorzugten Befehlzeileneditor öffnen:
Sicherheiten Sie sich, dass die Werte für IPV6
auf yes
gesetzt ist. Es sollte so aussehen:
Speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, können Sie dies tun, indem Sie CTRL+X
, dann Y
und ENTER
eingeben.
Wenn später in dieser Anleitung UFW aktiviert wird, wird es konfiguriert, sowohl IPv4 als auch IPv6 Firewall-Rules zu schreiben.
Schritt 2 — Einstellung der Standardpolicies
Wenn Sie nur mit UFW beginnen, ist ein gutes erstes Schritt, Ihre Standard-Firewall-Politiken zu überprüfen. Diese Regeln steuerlen, wie Traffic behandelt wird, der keinem anderen Rule explizit zugeordnet ist.
Standardmäßig ist UFW so eingestellt, dass es alle ankommenden Verbindungen abwehrt und alle ausgehenden Verbindungen zulässt. Das bedeutet, dass sich jeder versucht, mit Ihrem Server zu verbinden, während innerhalb des Servers jede Anwendung die Außenwelt erreichen kann. Zusätzliche Regeln, die bestimmte Dienste und Ports zulassen, sind als Ausnahmen zu diesem allgemeinen Policy enthalten.
Um sicher zu sein, dass Sie mit dem Rest dieser Tutorial schrittweise folgen können, setzen Sie nun die Standardsettings für ankommende und ausgehende UFW-Verbindungen fest.
Um den standardmäßigen Einstellungsvorfall für ankommende Verbindungen auf deny
zu setzen, führen Sie folgendes aus:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Um den standardmäßigen Einstellungsvorfall für ausgehende Verbindungen auf allow
zu setzen, führen Sie folgendes aus:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Diese Befehle setzen die Voreinstellungen für ankommende und ausgehende Verbindungen auf deny
und allow
. Diese Firewall-Standards allein genügen möglicherweise für einen privaten Computer, aber Servern benötigen oft eine Antwort auf Anfragen von außen. Wir schauen uns das nächste Mal an.
Schritt 3 — Erlauben von SSH-Anschlüssen
Wenn Sie Ihr UFW-Feuerwall aktivieren, wird es alle ankommenden Verbindungen ablehnen. Das bedeutet, dass Sie potenzielle Anfragen wie SSH oder HTTP-Anfragen erstellen müssen, um mit Ihrem Server verbinden zu können. Wenn Sie einen Cloud-Server verwenden, wahrscheinlich möchten Sie ankommende SSH-Anfragen erlauben, damit Sie mit Ihrem Server verbinden und daraufhin verwalten können.
Die Erstellung eines OpenSSH-UFW-Anwendungsprofils
Nach der Installation registriert sich die meisten Anwendungen, die auf Netzwerkverbindungen beruhen, automatisch einen Anwendungsprofil innerhalb von UFW, damit Benutzer schnell festlegen können, ob externer Zugriff zu einem Dienst erlaubt oder verboten ist. Sie können mit folgendem Befehl überprüfen, welche Profile momentan in UFW registriert sind:
OutputAvailable applications:
OpenSSH
Zum Enablement des OpenSSH-Anwendungsprofils führen Sie den Befehl aus:
OutputRule added
Rule added (v6)
Dieser wird Firewall-Rollen erstellen, die alle Verbindungen auf dem Standardport 22
zulassen, auf dem das SSH-Daemon normalerweise läuft.
Allow SSH durch Service-Name
Eine weitere Methode, um UFW einzustellen, um SSH-Verbindungen zu erlauben, ist Referenzierung des Service-Namens: ssh
.
OutputRule added
Rule added (v6)
UFW kennt die Ports und Protokolle, die ein Service benötigt, basierend auf der Datei /etc/services
.
Allow SSH by Port Number
Alternativ können Sie die äquivalente Regel durch Angabe des Ports anstelle des Anwendungprofils oder des Dienstnamens festlegen. Zum Beispiel funktioniert dieser Befehl genauso wie die vorherigen Beispiele:
OutputRule added
Rule added (v6)
Wenn Sie Ihren SSH-Daemon so konfiguriert haben, dass er einen anderen Port verwendet, müssen Sie den entsprechenden Port angeben. Wenn zum Beispiel Ihr SSH-Server auf Port 2222
horcht, können Sie diesen Befehl verwenden, um Verbindungen auf diesem Port zu erlauben:
OutputRule added
Rule added (v6)
Nun, da Ihre Firewall so konfiguriert ist, dass eingehende SSH-Verbindungen zulässt, können Sie sie aktivieren.
Schritt 4 — UFW aktivieren
Ihre Firewall sollte nun so konfiguriert sein, dass sie SSH-Verbindungen zulässt. Um zu überprüfen, welche Regeln bisher hinzugefügt wurden, auch wenn die Firewall noch deaktiviert ist, können Sie verwenden:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Nachdem Sie bestätigt haben, dass Sie eine Regel haben, die eingehende SSH-Verbindungen zulässt, können Sie die Firewall mit folgendem Befehl aktivieren:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Sie erhalten eine Warnung, die besagt, dass der Befehl bestehende SSH-Verbindungen unterbrechen könnte. Da Sie jedoch bereits eine Firewall-Regel eingerichtet haben, die SSH-Verbindungen zulässt, sollte es in Ordnung sein, fortzufahren. Antworten Sie auf die Aufforderung mit y
und drücken Sie ENTER
.
Die Firewall ist nun aktiv. Führen Sie den Befehl sudo ufw status verbose
aus, um die gesetzten Regeln anzuzeigen. Der Rest dieser Anleitung behandelt, wie man UFW detaillierter verwendet, um verschiedene Arten von Verbindungen zu erlauben oder zu verweigern.
Schritt 5 — Andere Verbindungen erlauben
An diesem Punkt sollten Sie alle weiteren Verbindungen zulassen, die Ihrem Server zur Antwort bereitstellen müssen. Diejenigen, die Sie zulassen sollen, hängen von Ihren speziellen Bedürfnissen ab. Sie kennen schon die Regeln, wie Sie nach einem Anwendungsprofil, einem Dienstnamen oder einer Portnummer verbindungen zulassen können; Sie haben das schon für den SSH-Port 22
gemacht. Sie können auch so machen:
- HTTP auf Port 80, der für unverschlusselte Web-Server verwendet wird, mit
sudo ufw allow http
odersudo ufw allow 80
- HTTPS auf Port 443, der für verschlusselte Web-Server verwendet wird, mit
sudo ufw allow https
odersudo ufw allow 443
- Apache mit beiden HTTP und HTTPS, mit
sudo ufw allow ‘Apache Full’
- Nginx mit beiden HTTP und HTTPS, mit
sudo ufw allow ‘Nginx Full’
Vergessen Sie nicht, zu prüfen, welche Anwendungsprofile Ihnen für Ihr Server verfügbar sind, indem Sie sudo ufw app list
ausführen.
Es gibt mehrere andere Möglichkeiten, Verbindungen zu erlauben, neben dem Spezifizieren eines Ports oder bekannten Service-Namens. Wir sehen einige davon im nächsten Schritt an.
Spezielle Portbereiche
Sie können mit UFW Portbereiche angeben. Einige Anwendungen verwenden mehrere Ports anstatt eines einzelnen Ports.
Zum Beispiel, um X11-Verbindungen zu erlauben, die Ports 6000
–6007
verwenden, können Sie diese Befehle verwenden:
Beim Angeben von Portbereichen mit UFW müssen Sie das Protokoll (tcp
oder udp
) angeben, auf das die Regeln gelten. Wir haben dies bisher nicht erwähnt, weil die Angabe des Protokolls automatisch beide Protokolle zulässt, was in den meisten Fällen in Ordnung ist.
Spezifische IP-Adressen
Beim Arbeiten mit UFW können Sie auch IP-Adressen in Ihren Regeln angeben. Zum Beispiel, wenn Sie Verbindungen von einer bestimmten IP-Adresse zulassen möchten, wie z.B. einer Arbeits- oder Heimadresse von 203.0.113.4
, müssen Sie den Parameter from
verwenden und die IP-Adresse angeben, die Sie zulassen möchten:
OutputRule added
Sie können auch einen Port angeben, dem die IP-Adresse zugelassen ist, indem Sie to any port
folgen und die Portnummer angeben. Zum Beispiel, wenn Sie 203.0.113.4
zulassen möchten, um auf Port 22
(SSH) zu verbinden, verwenden Sie diesen Befehl:
OutputRule added
Subnetze
Um eine Unternetzadresse zu erlauben, können Sie dies mit dem CIDR-Notation machen. Beispielsweise wollen Sie alle IP-Adressen zwischen 203.0.113.1
und 203.0.113.254
zulassen, können Sie folgendes Kommando verwenden:
OutputRule added
Auch können Sie die Zielportnummer festlegen, über die das Subnetz 203.0.113.0/24
verbinden darf. Wir nehmen hier den Port 22
(SSH) als Beispiel an:
OutputRule added
Zu einem bestimmten Netzwerkinterface verbinden
Wenn Sie einen Firewall-Regel erstellen möchten, die nur auf ein bestimmtes Netzwerkinterface angewendet werden soll, können Sie dies durch die Angabe „allow in on“ gefolgt von dem Namen des Netzwerkinterfaces tun.
Sie könnten sich vor dem Fortfahren die Netzwerkgeräte ausrechnen. Um dies zu tun, verwenden Sie das folgende Kommando:
Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
Die hervorgehobene Ausgabe zeigt die Netzwerkinterface an. Sie sind normalerweise namens eth0
oder enp3s2
genannt.
So, wenn Ihr Server ein öffentliches Netzwerkinterface namens eth0
hat, können Sie HTTP-Traffic (Port 80
) zu ihm mit folgendem Kommando zulassen:
OutputRule added
Rule added (v6)
Dies macht es möglich, dass Ihr Server HTTP-Anfragen vom offenen Internet empfängt.
Or, wenn Sie möchten, dass Ihr MySQL-Datenbankserver (Port 3306
) auf dem privaten Netzwerkinterface eth1
auf Verbindungen horcht, könnten Sie beispielsweise diesen Befehl verwenden:
OutputRule added
Rule added (v6)
Dies würde anderen Servern auf Ihrem privaten Netzwerk ermöglichen, sich mit Ihrer MySQL-Datenbank zu verbinden.
Schritt 6 — Verbindungen verweigern
Wenn Sie die Standardrichtlinie für eingehende Verbindungen nicht geändert haben, ist UFW so konfiguriert, dass alle eingehenden Verbindungen verweigert werden. Dies vereinfacht im Allgemeinen den Prozess der Erstellung einer sicheren Firewall-Richtlinie, indem Sie Regeln erstellen müssen, die spezifische Ports und IP-Adressen explizit zulassen.
Manchmal möchten Sie jedoch spezifische Verbindungen basierend auf der Quell-IP-Adresse oder dem Subnetz verweigern, vielleicht weil Sie wissen, dass Ihr Server von dort angegriffen wird. Auch, wenn Sie Ihre Standardeingabe-Richtlinie auf erlauben ändern möchten (was nicht empfohlen wird), müssten Sie verweigern-Regeln für alle Dienste oder IP-Adressen erstellen, die Sie nicht zulassen möchten.
Um verweigern-Regeln zu schreiben, können Sie die zuvor beschriebenen Befehle verwenden und allow durch deny ersetzen.
Beispielsweise könnten Sie, um HTTP-Verbindungen zu verweigern, diesen Befehl verwenden:
OutputRule added
Rule added (v6)
Oder wenn Sie alle Verbindungen von 203.0.113.4
verweigern möchten, könnten Sie diesen Befehl verwenden:
OutputRule added
Um in einigen Fällen auch die Verbindungen aus dem Server heraus zu blockieren, können Sie den Befehl deny out
mit der Portnummer verwenden:
OutputRule added
Rule added (v6)
Dies blockiert alle ausgehende SMTP-Traffic auf dem Server.
Schritt 7: Die Regeln loschen
Wie schon erwähnt ist es ebenso wichtig, wie das Erstellen, zu wissen, wie man Regeln löscht. Es gibt zwei verschiedene Möglichkeiten, um festzustellen, welche Regeln gelöscht werden sollen: durch die Nummer der Regel oder durch ihren menschlichen Lesbarkeitsnamen (analog zur Bezeichnung, unter der sie erstellt wurden).
Löschen einer UFW-Regel nach der Nummer
Um eine UFW-Regel nach ihrem Nummer zu löschen, erstellen Sie zuerst einen nummerierten Liste aller Ihrer Feuerwallregeln. Der Befehl ufw status
hat eine Option, bei der jede Regel eine Nummer angezeigt wird, wie hier beispielsweise gezeigt:
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Wenn Sie entscheiden, dass Sie die Regel mit der Nummer 2 loschen möchten, die den Port 80 (HTTP) zulässt, können Sie dies in einem UFW-Befehl wie folgt spezifizieren:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Dies werde Sie zu einer Bestätigung prompten und die Regel 2, die HTTP-Verbindungen zulässt, löschen. Notige, dass Sie falls IPv6 aktiviert ist, auch die entsprechende IPv6-Regel loschen sollten.
Die Deletion einer UFW-Regel nach Namen
Anstatt die Regeln mit Nummern zu verwenden, können Sie auch auf eine Regel zurückgreifen, indem Sie den menschenlesbaren Bezeichner verwenden, der aufgrund des Typus der Regel (normalerweise allow
oder deny
) und dem Service-Namen oder Portnummer basiert, auf welchem diese Regel eingestellt wurde. Wenn Sie beispielsweise eine allow
-Regel für einen Applikationsprofil namens Apache Full
loschen möchten, die zuvor aktiviert war, können Sie folgendes benutzen:
OutputRule deleted
Rule deleted (v6)
Die delete
-Befehle funktioniert ähnlich für Regeln, die durch den Service-Namen oder Portnummer festgelegt wurden. Zum Beispiel, wenn Sie vorher eine Regel setzten, die HTTP-Verbindungen mit sudo ufw allow http
erlaubte, so könnten Sie diese Regel wie folgt löschen:
OutputRule deleted
Rule deleted (v6)
Aufgrund der Interchangeabilität zwischen Service-Namen und Portnummern bei der Festlegung von Regeln können Sie auch auf dieselbe Regel als allow 80
verreferen, statt als allow http
.
OutputRule deleted
Rule deleted (v6)
Wenn Sie eine Regel nach Namen loschen, werden sowohl IPv4- als auch IPv6-Rules gelöscht, falls sie existieren.
Schritt 8 — Überprüfen der UFW-Status und Regeln
Sie können jederzeit den Status von UFW mit dem folgenden Befehl überprüfen:
Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, sieht das etwas wie dieses aus:
OutputStatus: inactive
Wenn UFW aktiviert ist, was empfohlen ist, wenn Sie Schritt 3 befolgen, zeigt die Ausgabe an, dass es aktiv ist und zeigt eine Liste der festgelegten Regeln an. Beispielsweise wird es so aussehen, wenn die Firewall auf Anfragen von beliebigen IP-Adressen über Port 22
(SSH-Anfragen) zulässt:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Benutzen Sie den Befehl status
, um zu erkennen, wie UFW die Firewall konfiguriert hat.
Schritt 9 — Deaktivieren oder Resetten des Feuwalls
Wenn Sie entscheiden, dass Sie UFW nicht mehr benötigen, können Sie es mit dem folgenden Befehl deaktivieren:
OutputFirewall stopped and disabled on system startup
Alle durch UFW erstellten Regeln werden nicht mehr aktiv sein. Sie können jederzeit mit sudo ufw enable
aktivieren, falls Sie später darauf zurückkehren möchten.
Falls Sie bereits UFW-Regeln konfiguriert haben, aber entscheiden, dass Sie beginnen wollen, können Sie den reset-Befehl verwenden:
OutputResetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
Dies wird UFW deaktivieren und alle bisher definierten Regeln löschen. Dies sollte Ihnen einen neuen Start mit UFW geben. Denken Sie an, dass die Standardpolicies nicht wieder zu ihrem ursprünglichen Zustand geändert werden, wenn Sie sie irgendwann einmal geändert haben.
Deploy your frontend applications from GitHub using DigitalOcean App Platform. Let DigitalOcean handle the scaling of your app.
Schluss
Ihre Firewall ist nun konfiguriert, um SSH-Anwendungen zu erlauben. Stellen Sie sicher, dass Ihr Server auch die notigen Einheiten für seine Funktionsfähigkeit und Sicherheit zulässt, während Sie unnotige Anwendungen einlimitieren, so dass Ihr Server funktioniert und sicher ist.
Um mehr über übliche UFW-Konfigurationen zu lernen, schauen Sie sich bitte den Tutorial UFW Essentials: Common Firewall Rules and Commands an.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04