UFW-Firewall

Tomasz Wyszolmirski, 123RF

Geradlinig

Die Firewall-Konfiguration unter Linux ist nicht ganz trivial. Etwas einfacher macht die Bedienung auf der Kommandozeile die Uncomplicated Firewall UFW.
ADMIN 11/13 stellt die besten Lösungen vor und klärt, ob Browser-Plugins, Anonymisierer sowie Verschlüsselung wirklich helfen. Weitere Themen: Small ... (mehr)

Seit Menschengedenken bildet das Netfilter-Modul die Grundlage für die Firewall-Funktionalität unter Linux. Nun, das stimmt nicht ganz. Aber kann sich wirklich noch jemand an IPChains erinnern? Das war noch im Kernel 2.2 und seit Linux 2.4 regiert wirklich Netfilter die Firewall-Welt des Torvaldsschen Mikrokosmos. Verwaltet wird die Netfilter-Firewall mit den bekannten IPTables-Befehlen, über die sich das Verhalten der Firewall im Detail steuern lässt [2].

Eigentlich hätten irgendwann die NFTables die komplizierten IPTables ablösen sollen [3], aber dazu ist es bisher nicht gekommen. Mittlerweile gibt es den Versuch, einen Kompatibilitäts-Layer zwischen IPTables und NFTables zu schaffen, aber bis auf Weiteres bleibt IPTables das Maß der Dinge:

iptables -A INPUT -p tcp --dport 22 -jACCEPT

Was das alles bedeutet, kann man lernen, und Tutorials zu IPTables gibt es im Netz genügend. Einen anderen Weg hat allerdings die Ubuntu-Distribution mit Version 8.04 eingeschlagen und das Paket UFW (Uncomplicated Firewall) mitgebracht, das die Verwaltung der eingebauten Netfilter-Firewall drastisch vereinfacht.

UFW zu Hilfe

Installieren lässt sich UFW recht einfach, denn es ist in den Paketquellen enthalten – jedenfalls, wenn man eine Ubuntu- oder Debian-Distribution verwendet. Andere, wie Fedora-User, laden sich von [4] das Quellcode-Paket herunter, entpacken es und geben »python setup.py config« ein. Der folgene Befehl »python setup.py install« erfordert Root-Rechte. Danach sollte UFW funktionieren, auch wenn es eventuell noch überflüssige Gruppenschreibrechte moniert. Dieses Problem lässt sich gegebenenfalls so beheben:

chmod g-w /usr/sbin/ufw /etc/default/ufw/lib/ufw/ufw-init /etc/ufw/ufw.conf/etc/ufw/applications.d/

Wir gehen im Folgenden davon aus, dass es keine IPTables-Konfiguration gibt. Red-Hat- und Fedora-Anwender sollten daher erst den IPTables-Dienst mit »service iptables stop« stoppen. Dauerhaft schalten sie ihn mit »chkconfig iptables off« ab.

Damit kann nun die Konfiguration der Firewall per UFW starten. Um zu verhindern, dass man sich nicht mehr übers Netz einloggen kann, sollte man sicherheitshalber als Erstes eine Regel anlegen, die das Login per SSH erlaubt:

ufw allow ssh/tcp

Wie man sieht, versteht UFW die Namen der Dienste, die es aus der Datei »/etc/services« bezieht. Alternativ funktioniert das auch mit den Portnummern, also »ufw allow 22/tcp« . Das »tcp« hinter dem Schrägstrich beschränkt die Regel auf TCP, die Angabe von »udp« steht für UDP. Ohne weitere Angaben bezieht sich die Regel auf beide Protokolltypen. Der Befehl »ufw enable« startet schließlich die Firewall-Funktion. Ein Aufruf von »ufw status« verschafft einen Überblick über die Funktion (siehe Listing 1).

Listing 1

UFW-Status

 

Wie das Listing zeigt, blockiert UFW per Default alle eingehenden (»deny (incoming)« ) und erlaubt alle ausgehenden Verbindungen (»allow (outgoing)« ). Die Firewall ist aktiv und das Logging erzeugt nur wenige Daten. Apropos Logging: Bei den Debian- und Ubuntu-Installationen ist eine Konfigurationsdatei für den Rsyslog-Daemon enthalten. Gegebenenfalls müssen Debian-Anwender nur noch den normalen Syslog-Daemon durch Rsyslog austauschen, damit alles wie gewünscht funktioniert. Die Logging-Datei ist dann »/var/log/ufw.log« . Wer UFW aus dem Quellcode installiert, findet eine passende Konfiguration in »doc/rsyslog.example« . Das gleiche gilt für die Komplettierung der Befehle in der Bash: Bei Ubuntu/Debian ist sie schon dabei, die anderen finden die Datei im Quellcode-Archiv.

Was man dem Listing 1 auch noch entnehmen kann, ist die Tatsache, dass es je eine Regel für IPv4 und IPv6 gibt. Dies war bei der Installation auf einem Fedora-System aus dem Quellcode der Fall. Bei Debian ist per Default IPv6 deaktiviert. Die dazu gehörige Einstellung findet sich in »/etc/default/ufw« mit »IPV6=yes« respektive »no« .

Prinzipiell kann UFW natürlich die Firewall auch feiner regulieren, statt einen Dienst nur pauschal freizuschalten. So erlaubt der folgende Befehl die SSH-Verbindungen nur vom Host 192.168.1.136:

ufw allow from 192.168.1.136 port 22

UFW unterstützt nicht nur blindwütiges Blockieren von Verbindungen, sondern auch eine sensible Begrenzung von Verbindungsversuchen, etwa um Brute-Force-Angriffe auf SSH-Logins zu verhindern. Dies lässt sich mit

ufw limit ssh/tcp

bewerkstelligen. UFW blockiert per Default eine IP-Adresse, wenn sie innerhalb 30 Sekunden sechsmal oder mehr eine Verbindung aufzubauen versucht. Einen unbelehrbaren Bot-Host sperrt der folgende Befehl dauerhaft aus:

ufw deny from 10.0.10.10

Auf einfache Weise lassen sich Regeln wieder löschen, wenn man sie sich mit »ufw status numbered« durchnummeriert anzeigen lässt. »ufw delete Nummer« löscht die Regel, fragt aber vorher noch einmal nach.

Alles auf Anfang

Um alle Regeln zu löschen und UFW wieder auf den Ausgangszustand zurückzusetzen, bietet das Programm die Option »reset« . Der Aufruf von »/lib/ufw/ufw-init flush-all« löscht auch alle IPTables-Chains aus dem System.

Um die Anwendung noch weiter zu vereinfachen, unterstützt UFW sogenannte Anwendungsprofile. Dabei sind für typische Anwendungen die entsprechenden Ports in Konfigurationsdateien zusammengefasst, etwa für einen Printserver der Cups-Port 631 und der LPD-Port 515. Die installierten Anwendungsprofile listet »ufw apps list« auf, »ufw app info Anwendung« verrät mehr Details dazu. Wie bei den Diensten erlaubt »ufw allow Anwendung« die entsprechende Anwendung, respektive die darin enthaltenen Ports. Das ist ein bisschen verwirrend, denn oft heißt die Anwendung wie der entsprechende Dienst, aber in Großbuchstaben geschrieben (»ssh« und »SSH« , »pop3« und »POP3« und so weiter). In anderen Fällen unterscheiden sich Dienst und App aber wieder (etwa »http« und »WWW« , »https« und »Web Secure« ).

Die Regeln speichert UFW ab und lädt sie beim nächsten Neustart wieder. Dafür trägt das Start-Skript Sorge, das bei Ubuntu automatisch installiert ist. Eine Beispieldatei, die im Test ohne weitere Änderungen funktionierte, findet sich für Upstart und das klassische Init-System im »doc« -Verzeichnis.

comments powered by Disqus

Artikel der Woche

Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2018