steht für "uncomplicated firwall" und ist in fast allen debianbasierten Linux-Distributionen zu finden und unter Ubuntu sogar standardmäßig installiert. Es hilft dabei das sehr mächte, aber leider auch sehr komplizierte, Iptables einfacher zu verwalten. UFW unterstützt dabei Regeln für IPv4 und IPv6.
Anmerkung: Für UFW gibt es übrigens auch ein grafisches Tool (GUFW) für die GUI.
Installation
Ein simples apt-get install ufw
reicht schon aus.
Erste Einrichtung
Bevor wir mit UFW beginnen und eigene Regeln verwenden, müssen wir zunächst dafür sorgen, dass UFW mit dem Systemstart läuft. Es wird dann automatisch ein Standardregelsatz geladen. Dieser "besagt", dass alle neuen eingehenden Verbindungen abgelehnt werden und nur Verbindungsaufbau von innen nach außen erlaubt ist.
ufw enable
Firewall started and enabled on system startup
Der Standardregelsatz ist normalerweise automatisch gesetzt. Händisch kann man das aber auch machen, falls notwendig:
ufw default deny incoming
ufw default allow outgoing
Hinweis: Solltest du per SSH verbunden sein, so wird dir vermutlich nach dem Start von UFW die Netzwerkverbindungen abbrechen. Bitte das beachten und vor dem Start eine Regel erstellen, die SSH erlaubt. Falls du einen anderen SSH-Port verwendest als 22, so ist das zu berücksichtigen. Sonst wird es blöd für dich. ;-)
Einfache eigene Firewallregeln erstellen/löschen
UFW kennt die wichtigsten Dienste (Standardport!) mit Namen. So lassen sich einige Dienste mit Angabe eines Namen wie "ssh" setzen.
ufw allow ssh
Falls ein anderer Port als 22 verwendet wurde, so kann man das auch wie folgt machen:
ufw allow 52244
Die gerade erstellte Regel kannst du auch wieder löschen mit
ufw delete allow ssh
oder
ufw delete allow 52244
UFW Status abfragen
Natürlich möchte man auch abfragen welche Regeln gesetzt wurden. Da man die Firewall nicht ständig anfasst, weiß man häufig auch nicht mehr so genau was man "damals" mal gesetzt hat.
ufw status
Eine Ausgabe könnte wie folgt ausschauen:
UFW resetten
Für den Fall, dass du dich vertan hast oder eine grundlegende Änderung aller Firewallregeln möchtest und ein Reset benötigt wird, um den Standard wiederherzustellen, so reicht ein:
ufw reset
völlig aus. Danach ist wieder alles so wie nach der Installation.
Protokolle TCP/UDP
Man möchte sicherlich auch das Protokoll festlegen für welches man den Port öffnen will. So beispielsweise für SSH das TCP-Protokoll. UDP würde keinen Sinn machen. Um es genauer zu bestimmen fügt man einfach bei der zu erstellenden Regel das Protokoll hinten an.
ufw allow 52244/tcp
Analog dazu wäre ein /udp nötig, wenn man einen UDP-Port öffnen will.
Port-Ranges
Es gibt Dienste, für die mehrere aneinanderhängende Ports geöffnet werden müssen. Denke man beispielsweise an SIP. Es gibt aber auch genug andere Dienste für die das zutrifft.
ufw allow 8000:8010/udp
ufw allow 5060:5069/udp
Sources
In einigen Fällen ist eine Bindung an die IP der zugreifenden Quelle (Source) erforderlich. Möchte man beispielsweise, dass sich via VPN ein Standort mit fester IP-Adresse an der Hauptniederlassung verbinden kann, dann wäre das wie folgt:
ufw allow from 195.29.104.219
Will man das noch etwas zuspitzen und nur einen bestimmten Port erlauben, dann sähe das so aus:
ufw allow from 195.29.104.219 to any port 54422
Und jetzt sogar runter auf das Protokoll
ufw allow from 195.29.104.219 to any port 54422
Mit "any" ist hier die Schnittstelle am Server gemeint. Bedeutet, dass 54422 an jeder NIC des Servers durchgelassen wird. Auch logische NICs (Multihomed).
Destination
Server haben nicht selten mehrere LAN-Schnittstellen und es kann gut sein, dass ein Dienst nur an einer Schnittstelle bereitgestellt werden kann/muss, aber der Dienst selbst nicht konfigurierbar für einzelne Schnittstellen ist. In diesem Fall können wir die Firewall für eine bestimmte NIC öffnen.
In folgendem Beispiel öffne ich unseren umgelenkten SSH-Port 54422 auf der Schnittstelle, die mit der IP 192.168.19.201 konfiguriert ist und definiere, dass nur TCP-Verbindungen durchgelassen werden dürfen.
ufw allow proto tcp from any to 192.168.19.201 port 54422
Das folgende Beispiel erlaubt einem Client mit der IP 192.168.2.162 den Zugriff auf den Server an der Schnittstelle mit der IP 192.168.2.10 mit den Protokoll TCP auf Port 443.
ufw allow proto tcp from 192.168.2.10 to 192.168.2.10 port 443
Protokoll ICMP Echo Request
Per Default ist Ping nicht erlaubt. Wer es braucht, muss es aktivieren. Leider erlaubt UFW keinen Ausdruck, der direkt ICMP Echo Request (Ping!) erlaubt. Es gibt also keine Eingabe wie "ufw allow icmp" oder ähnliches. Dazu muss man in die Datei /etc/ufw/before.rules gehen und dort ein -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
einfügen. Danach den Regelsatz von UFW neu laden mit: ufw reload
Kommentare bei Regeln hinzufügen
Was mir persönlich gut gefällt ist die Möglichkeit bei den Regeln Kommentare zu hinterlassen, die man bei Aufruf von "ufw status" mit angezeigt bekommt. So kann man gut erkennen welchen Grund die Regel hat, wenn man erst mal eine gewissen Anzahl Regeln im Laufe der Jahre erstellt hat.
ufw allow proto tcp to 192.168.2.148 port 443 comment "HTTPS fuer Apache2"
Regeln löschen
Das Löschen geht auf zwei Arten. Die erste Möglichkeit ist wie oben beschrieben ufw delete allow ssh womit die Regel gelöscht wird. Eine etwas bequemere Weise ist wie folgt:
ufw status numbered
ufw delete 3
Mit dem ersten Befehl werden die Regeln alle mit einer Nummer angezeigt. Bei dem zweiten Kommando gibt man dann die Nummer an die für die Regel steht. In diesem Falle würden wir die Regel 3 löschen.