UFW (Uncomplicated Firewall)

☰ Menü

 

Ein Beispiel

Betrachten wir ein einfaches Beispiel:

root@debian:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] 5900                       ALLOW IN    Anywhere
[ 5] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 7] 443/tcp (v6)               ALLOW IN    Anywhere (v6)
[ 8] 5900 (v6)                  ALLOW IN    Anywhere (v6)

Box 1: Nummerierte Liste von Regeln

Sie sehen acht Regeln. Alle Regeln beziehen sich auf eingehenden Datenverkehr (ALLOW IN). Die ersten vier beziehen sich auf IPv4, die letzten auf IPv6. Weiterhin ist abzulesen, dass Zugriffe auf die Ports 22, 80, 443 und 5900 erlaubt sind. Der Port 5900 ist sowohl für UDP (User Datagram Protocol) als auch für TCP (Transmission Control Protocol) geöffnet, die anderen Ports ausschließlich für TCP.

 

Räumen wir auf: [sudo] ufw reset und schalten die Firewall wieder ein: [sudo] ufw enable.
root@debian:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

Box 2: Status nach dem Aufräumen

Nun sind keine Netzwerkdienste erreichbar. Sie möchten den Webserver für alle erreichbar machen.

Zu Erinnerung: Standardmäßig nutzt ein Webserver TCP und wird über den Port 80 angesprochen.

Wir müssen einen Netzwerkienst erlauben (allow) der die Protokollvariante TCP und den Port 80 nutzt. Der Befehl lautet:
[sudo] ufw allow proto tcp to any port 80
Das sieht immer noch etwas kompliziert aus. Einfacher ist folgende Varainte:
[sudo] ufw allow http
Eine Fülle von Netzwerkdiensten lassen sich über ihren Namen in die Erlaubnisliste eintragen.
Weil es so einfach ist, fügen Sie gleich noch den SSH-Dienst hinzu:
[sudo] ufw allow ssh

Vorsicht:
Netzwerkdienste lassen sich über den Protokollnamen nicht für einzelne Adressbereiche spezifizieren. Sie sind dann pauschal aktiviert.
Wichtig:
Firewallregeln bleiben nach einem Reboot des Rechners erhalten!

 

Regeln für eine einzelne Adresse definieren

Beispiel: Ihre virtuelle Linuxmaschine hat die IP-Adresse 192.168.52.132. Ihr Rechner hat dann die Adresse 192.168.52.1. Sie möchten Ihrem Rechner Zugriff auf den Webserver gewähren.

Der entsprechende Befehl lautet:
[sudo] ufw allow proto tcp to any port 80 from 192.168.52.1

Die Adresse der virtuellen Maschine zeigt der Befehl ip a s an.

 

Regeln für einen Adressbereich definieren

Im lokalen Netzen werden meist IPv4-Adressen der Klasse C genutzt.

Der Adressbereich des privaten Teils der Klasse C geht von 192.168.0.0 bis 192.158.255.255. Mit der Subnetzmaske 255.255.0.0 versehen, kennzeichnen die ersten beiden Bytes der Adresse das Netz und die letzten beiden den jeweiligen Rechner. Die CIDR-Schreibweise (Classless Interdomain Routing) dieses Bereichs lautet: 192.168.0.0/16. Die Zahl 16 steht für die Anzahl der gesetzten Bits in der Subnetzklasse.

Der entsprechende Befehl lautet:
[sudo] ufw allow proto tcp to any port 80 from 192.168.0.0/16

 

Adressen sperren

Beispiel: Sie möchten den Rechner mit der IP-Adresse 192.168.7.16 sperren:

Der entsprechende Befehl lautet:
[sudo] ufw deny proto tcp to any port 80 from 192.168.7.16
Sie möchten den Bereich von 192.168.9.0 bis 192.168.9.255 sperren:
[sudo] ufw deny proto tcp to any port 80 from 192.168.9.0/24

 

Regeln priorisieren

Sind diese Einstellungen sinnvoll gewählt?

Natürlich nicht! Betrachten Sie die Liste der Regeln!

root@debian:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 80/tcp                     ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 80/tcp                     ALLOW IN    192.168.52.1
[ 4] 80/tcp                     ALLOW IN    192.168.0.0/16
[ 5] 80/tcp                     DENY IN     192.168.7.16
[ 6] 80/tcp                     DENY IN     192.168.9.0/24
[ 7] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 8] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
Box 3: Liste der erstellten Regeln
Was haben wir angerichtet?
  1. Sie sehen, dass die Regeln 3 und 4 überflüssig sind. Die Regel 1 erlaubt bereits alle Adressbereiche für Zugriffe auf Port 80.
  2. Sie sollten sehen, dass die Regeln 5 und 6 nicht berücksichtigt werden. Begründung: s. Regel 1
Merke:
Regeln sollte man nicht wahllos hintereinander hängen. Es kommt auf die Reihenfolge der Regeln an! Die Reihenfolge bestimmen Sie mit dem insert-Parameter.
Grundsätzlich gilt: Verbotsregeln stehen oberhalb von Erlaubnisregeln.

 

Aufgaben

Schreiben Sie die jeweiligen ufw-Befehle mit korrekter Syntax auf!

  1. Entfernen Sie alle http-bezogenen Regeln erlauben Sie den privaten Bereich der Netzwerkklasse C!
  2. Sperren Sie anschließend den http-Zugriff für die Adresse 192.168.7.16!
  3. Sperren Sie anschließend den http-Zugriff für den Bereich 192.168.9.0/24!
  4. Überprüfen Sie, ob Sie folgende Statusanzeige (s. Box 4) erzielen!
  5. Erläutern Sie die Regeln in Box 4!
  6. Was ist zu tun, wenn Sie SSH ausschließlich aus privaten lokalen Netzen erlauben wollen? Erstellen Sie entsprechende Regeln! Die privaten Adressbereiche der Klassen A, B und C sind zu berücksichtigen.
root@debian:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 80/tcp                     DENY IN     192.168.7.16
[ 2] 80/tcp                     DENY IN     192.168.9.0/24
[ 3] 80/tcp                     ALLOW IN    192.168.0.0/16
[ 4] 22/tcp                     ALLOW IN    Anywhere
[ 5] 22/tcp (v6)                ALLOW IN    Anywhere (v6)

Box 4: Gewünschte Statusanzeige zu den Aufgaben 4 bis 8.

 

W. Hermanns, © 2018