Einführung in die uncomplicated firewall

Wenn man unter Linux eingehende und abgehende Pakete kontrollieren, umleiten oder blockieren möchte, so kann man für diese Aufgabe iptables nutzen. Das Problem an iptables ist das es relativ kompliziert in der Anwendung ist.

Damit man hier nicht im Regen steht, gibt es (neben vieler anderer Firewall-Lösungen für Linux) die uncomplicated firewall kurz ufw. Technisch gesehen handelt es sich bei ufw um ein Frontend für iptables. Seit der Version 8.04 (Hardy Hedon) ist ufw ein Bestandteil der Ubuntu-Distribution. Neben Ubuntu ist ufw unter anderem auch für Debian verfügbar. Installiert werden kann ufw mittels des Befehls:

apt-get install ufw

Standardmäßig ist ufw deaktiviert, so das die Installation im ersten Schritt keinerlei Auswirkungen hat. Den aktuellen Status sowie die definierten Regeln können dabei mittels:

ufw status

eingesehen werden. Das könnte dann z.B. so aussehen:

Status: Aktiv

Zu                   Aktion      Von
--                   ------      ---
8080/tcp             DENY        Anywhere                                
22/tcp               ALLOW       Anywhere                            
22/tcp (v6)          ALLOW       Anywhere (v6)

Ist der Status auf inaktiv gesetzt, so muss ufw erst mit dem Befehl:

ufw enable

aktiviert werden. Hierbei muss man beachten das eine unbedachte Aktivierung von ufw dazu führen kann das man sich aus dem Rechner aussperrt. Dies liegt daran das am Anfang keinerlei Regeln definiert sind – so werden Pakete an Port 22 ignoriert; dies führt dazu das keine Verbindung per SSH möglich ist. Um dem vorzubeugen sollte eine Regel für SSH definiert werden, bevor ufw aktiviert wird:

ufw allow 22/tcp

Bei dieser Schreibweise handelt es sich um die vereinfachte Form zum Anlegen einer Regel. Neben allow, sind dabei auch die Werte deny und reject möglich. Während bei allow die Pakete passieren können, werden sie bei deny blockiert – im Gegensatz dazu wird bei reject der Absender darüber informiert das die Pakete abgelehnt wurden. Möchte man komplexere Regeln definieren nutzt man ufw nach folgendem Schema:

ufw allow proto tcp from any to 127.0.0.1 port 1234

Damit werden alle Verbindungen per TCP von beliebigen IP-Adressen an die spezifizierte IP-Adresse weitergeleitet. Als Port wird als Eingangs- und Zielport Port 1234 genutzt. Die Regeln welche ufw verwaltet werden in drei Dateien gespeichert:

/etc/ufw/before.rules
/var/lib/ufw/user.rules
/etc/ufw/after.rules

Abgearbeitet werden die Regeln in der Reihenfolge wie oben angegeben – somit könnte eine Regel in der user.rules-Datei definiert sein, welche anschließend von einer anderen Regel in der after.rules-Datei überschrieben wird. Die selbst definierten Regeln sind dabei in der user.rules zu finden. Neben dem Anlegen ist es natürlich auch möglich Regeln wieder zu löschen. Für obige SSH-Regel würde das dabei so aussehen:

ufw delete allow 22/tcp

Daneben ist es möglich ufw auf die Standardeinstellungen zu setzen. Dazu dient der Befehl:

ufw reset

Alle Regeln werden dabei auf die Standardeinstellungen zurückgesetzt. Für die bestehenden Regeln wird ein Backup im Verzeichnis /etc/ufw/ angelegt. Möchte man ufw wieder deaktivieren, so nutzt man den Befehl:

ufw disable

Beim beschriebenen reset-Befehl wird ufw ebenfalls deaktiviert. Damit sind die grundlegenden Konfigurationsschritte erklärt – für die weitergehende Konfiguration empfiehlt sich der entsprechende Artikel bei ubuntuusers.

IPv4 über DNS tunneln

Viele Netzwerke, wie z.B. öffentliche WLAN-Zugänge lassen Verbindung ohne Authentifikation zu. Nachdem man sich mit dem Netzwerk verbunden hat, muss man sich meist auf einem sogenannten Captive Portal anmelden. Dabei handelt es sich um eine Vorschaltseite, welche einem beim Aufruf einer Webseite angezeigt wird und der Anmeldung bzw. Identifizierung dient. Bei vielen dieser Netzwerken funktioniert die Kommunikation über das DNS-Protokoll ohne weitere Probleme (trotz Captive Portal) und Authentifikation, so das man diese nutzen kann um einen Tunnel ins freie Internet zu errichten.

code.kryo.se/iodine/

code.kryo.se/iodine/

Eine Lösung um einen solchen DNS Tunnel einzurichten ist iodine. Mit iodine ist es möglich IPv4-Verkehr über DNS zu tunneln. Pro DNS-Request können dabei bis zu einem Kilobyte an Daten übertragen werden, was sich positiv auf die Performance und den Durchsatz auswirkt. iodine läuft dabei auf vielen unixodien Systemen, sowie unter Windows. Lizenziert ist iodine unter der ISCL und damit freie Software. Der Quelltext ist auf GitHub zu finden.

Konnektivität nach der Installation von CentOS 7 herstellen

Wenn man ein CentOS 7 in der Minimal-Installation installiert (und dabei nicht aufpasst), wird man nach der Installation feststellen das man über keine Konnektivität verfügt. Das ist bedingt dadurch das die entsprechende Netzwerkschnittstelle beim Booten nicht konfiguriert wird. Um die Schnittstelle zu konfigurieren, sollte im ersten Schritt in den entsprechenden Ordner gewechselt werden:

cd /etc/sysconfig/network-scripts/

In diesem Ordner befindet sich eine Datei ifcfg-eth0 (alternativ sind auch andere Schnittstellennamen wie ifcfg-enp0s3, em1 und ähnliche möglich). Die entsprechende Datei wird nun mittels vi geöffnet:

vi ifcfg-eth0

In dieser Datei gibt es eine Option mit dem Namen ONBOOT, deren Wert standardmäßig auf no gestellt ist. Dieser Wert muss in yes geändert werden und anschließend die Datei gespeichert werden (:w zum Speichern der Datei, :q um VIM zu schließen). Nach einem anschließenden Neustart, sollte die Netzwerkschnittstelle konfiguriert und funktionsfähig sein.

TL-WR702N im Client-Modus betreiben

Beim TL-WR702N handelt es sich um einen mobilen Access Point von TP-Link für WLAN mit einer Reihe von Zusatzbetriebsmodi. Unter anderem verfügt der Access Point über einen Betriebsmodi namens Client, mit welchem kabelgebundene Geräte in ein WLAN eingebunden werden können. Leider lässt sich dieser Modus nur umständlich aktivieren.

Nach dem Reset des Gerätes kann sich per WLAN mit diesem verbunden werden. Die Einstellung über das Quick Setup funktioniert nicht, da der Client Mode dort zwar eingestellt werden kann, aber anschließend nicht übernommen wird. Stattdessen muss der Modus über das Menü Working Mode eingestellt werden und der AP neugestartet werden.

Der TL-WR702N montiert an einer Wand

Der TL-WR702N montiert an einer Wand

Danach ist der TL-WR702N nur noch per Kabel unter der IP-Adresse 192.168.0.254 erreichbar. Die Netzverbindung am Rechner sollte zum Aufbau einer Verbindung auf 192.168.0.1 mit dem Subnetz 255.255.255.0 gestellt werden. Nachdem man sich wieder mit dem Gerät verbinden konnte, kann auf dem Gerät eine statische IP-Adresse im Punkt Network -> LAN eingestellt werden. Nach einem erneuten Neustart ist das Gerät unter der eingestellten IP-Adresse erreichbar. Im letzten Schritt muss in den DHCP Settings der eingebaute DHCP-Server deaktiviert werden. Damit ist der Client Mode nach einem erneuten Neustart nutzbar.

Probleme mit der Netzwerkbrücke

Für einen Server hatte ich vor einigen Tagen unter Ubuntu 14.04 LTS eine Netzwerkbrücke eingerichtet. Die /etc/network/interfaces Datei sah danach in etwa so aus:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto br0
iface br0 inet dhcp
bridge_ports eth0

Nach einem Neustart gab es dann allerdings ein Problem. Der Server war nicht mehr erreichbar. Der Grund dafür war simpel – es fehlte das Paket bridge-utils – nach der Installation desselben mittels:

apt-get install bridge-utils

funktionierte die Netzwerkbrücke wieder ohne Probleme.