UFW: Das Übliche – freigeben, routen, blacklisten

UFW: Das Übliche – freigeben, routen, blacklisten

Ich hatte es satt, nach jeder Neu- Installation von Ubuntu 14.04 LTS, die Regelsätze der ‘Uncomplicated Firewall’ (UFW) im Internet zu suchen. Also habe ich mir ein einfaches script geschrieben, welches die relevanten Werte setzt. Dieses script ist für meine Umgebung optimiert – solltest Du es nutzen wollen, müssen sicherlich Werte angepasst werden. Das script aktiviert das routing mit NAT und bedient 3 Netzwerkschnittstellen: eth0, eth1 und wlan0. Außerdem setzt es die Port- Freigaben für Samba (in eine Richtung), DHCP (in jede Richtung) und Zeitserver (über UDP). Zusätzlich bietet es eine Option, eine Textdatei mit IP-Adressen einzulesen (blacklist).

Die Erläuterungen stehen im Script und sind wichtig! Beachte, zur Ausführung muss UFW natürlich vorher installiert und das folgende script ausführbar (777) sein. Benenne es z.B. firewall.sh und führe es auf der Konsole aus. Die erwähnte blacklist ist eine einfache Datei, in der IP-Adressen untereinander ohne Trennzeichen gesammelt und UFW übergeben werden kann. Wenn nicht gebraucht, einfach # davor. Was ports sind, erkläre ich hier nicht – wer mit einer Firewall spielt, sollte sich mit den Grundlagen beschäftigt haben.

#!/bin/sh
#
# Wenn der Server als Router zwischen Internet und Heimnetz dienen soll:
#
# 1. Routing aktivieren: Setze in /etc/default/ufw den Wert Default_Forward_Policy=ACCEPT
#
# 2. NAT aktivieren: Trage ganz zu Beginn der Datei /etc/ufw/before.rules folgende 3 Zeilen
# ein (eventuell eth0 anpassen, ist das device zum Internet, beachte Groß/Kleinschreibung!):
#
# *nat
# :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o eth0 -j MASQUERADE
# COMMIT
#
# 3. Beachte: Der Eintrag in /etc/ufw/before.rules wird mit Kommando 'ufw reset' beseitigt!
#
# 4. Die sysctl.conf im Ordner /etc/ufw sollte genutzt werden.
#
# 5. Aktiviere in der /etc/ufw/sysctl.conf durch löschen der Rauten folgende Optionen:
#
# net/ipv4/ip_forward=1
# net/ipv6/conf/default/forwarding=1
# net/ipv6/conf/all/forwarding=1
#
# 6. Dieses script anpassen und ausführen: deny und komplizierte Regeln (route,limit,usw.) 
# immer zuerst setzen, dann allow. Die erste Regel, welche passt, greift auch!
# 
# 7. 'while read line; do ufw delete deny from $line; done < /ordner/blacklist.txt' entfernt 
# alle Eintraege aus der blacklist wieder.
#
##

## ufw de-aktivieren (kein reset!):
ufw disable

## Routing zwischen Internet und Heimnetz erlauben (eth0 ist am Internet, eth1 und wlan0 
# ist am Heimnetz):
ufw route allow in on eth1 out on eth0
ufw route allow in on wlan0 out on eth0

## ufw schreibt in ein Logfile: (aus = off)
ufw logging on

## Der SSH port wird erlaubt, bei 6 Anmeldeversuchen in 30 Sekunde blockiert (build-in python) 
# und im log vermerkt:
ufw allow log 22/tcp
ufw limit proto tcp from any port 22

## Erlaube den Zugriff auf Samba nur aus dem Heimnetz:
ufw allow from 192.168.1.0/24 to any port 137,138 proto udp
ufw allow from 192.168.1.0/24 to any port 139,445 proto tcp

## Wenn auf dem Server ein DHCP Dienst läuft und/oder der Server selbst DHCP Client ist:
ufw allow from any port 68 to any port 67 proto udp

## Wenn ein Zeitserver aktiviert ist (udp Protokoll reicht):
ufw allow 123/udp

## Damit DNS Abfragen funktionieren:
ufw allow 53/udp
ufw allow 53/tcp

## Freischalten sonstiger Ports:
# smtp
ufw allow 25/tcp 
# http
ufw allow 80/tcp 
# imap
ufw allow 143/tcp 
# https
ufw allow 443/tcp 
# smtps
ufw allow 587/tcp 
# imaps
ufw allow 993/tcp 

## Zum Abschluss: Spiele deine blacklist.txt ein. Die blacklist Eintraege müssen vor allen
# stehen (deswegen insert 1). logisch.
# Die blacklist ist eine einfache Datei und enth#lt IP-Adressen(-Netze) untereinander
# (siehe meinen Download- Bereich).
while read line; do ufw insert 1 deny from $line to any; done < /ordner/blacklist.txt

## ufw aktivieren:
ufw enable

Im Download Bereich kann eine blacklist.txt heruntergeladen werden, die von mir zusammen gestellt wurde. Sollte jemand von Euch diese blacklist nutzen wollen und viele Kontakte im Asiatischen Raum haben, ist diese Liste entsprechend anzupassen. Der Pfad im script zur blacklist.txt ist natürlich zu konfigurieren – alternativ kann die blacklist Option mit # deaktiviert werden.

Wer nachträglich noch IP-Adressen/-Bereiche sperren möchte, kann auch einfach folgende Zeile mit erweiterter blacklist.txt ausführen. Es erscheinen zwar Fehlermeldungen, weil UFW erkennt, dass einige Adressen schon übergeben wurde, aber das stört nicht – UFW nimmt unbekannte Adressen aus dieser Liste automatisch auf:

ufw insert 1 deny from $line to any; done < /ordner/blacklist.txt

Nochmal: Beachte die Option ‘insert 1’. Diese Option sorgt dafür, dass alle Deny Einträge vor den Allow Einträgen im iptables Regelsatz stehen. Prüfe mit ‘ufw status’ auf der Konsole die Ausgabe der Regelsätze.

Have fun…


Autor: Mathias R. Ludwig

MCSE, MCITP, MCDBA, RHCT, CompTIA, ITILv3, AdA, VWA Ökonom, Dipl.SozArb., Kfz-Mechaniker, Panzer-Mechaniker/-Fahrer (HptGefr), Stanislaw Lem und Linux Fan, Feuerpferd.

Kommentare “UFW: Das Übliche – freigeben, routen, blacklisten”