Firewall zu Hause

by Volker Diels-Grabsch

Anleitung zum Erstellen eines einfachen Firewall-Scripts "für den Hausgebrauch" mit iptables

Created 2006-03-23, Last updated 2009-01-24
Articles

Einleitung

Will man unter Linux eine Firewall aufsetzen, ist iptables das Werkzeug der Wahl. Es ist für einfache wie komplexe Firewalls sehr gut geeignet.

Leider lassen sich viele von unnötig komplizierten iptables-Scripten abschrecken, die im Internet kursieren. Stattdessen wird auf Firewall-Lösungen zurückgegriffen, die zwar eine grafische Oberfläche für iptables bieten, aber noch komplizierter sind.

Dabei ist das Erstellen einer einfachen Firewall "für den Hausgebrauch" wirklich nicht schwer. Diese Howto soll zeigen, wie schnell man sich ein einfaches iptables Firewall-Script selbst zusammenbauen kann.

Firewall-Script erstellen

Wir bauen ein kleines Shell-Script, das mithilfe des iptables Kommandos unsere Firewall-Regeln aufstellt.

Das Shell-Script beginnt wie üblich mit der sh'bang-Zeile:

#!/bin/sh

Zuerst wird die Liste der Firewall-Regeln entleert, damit man das Script auch mehrfach hintereinander starten kann:

/sbin/iptables -F

Dann werden die Standard-Regeln festgelegt. Wir legen fest, dass grundsätzlich alle eingehenden Datenpakete blockiert werden (DROP), aber ausgehende Datenpakete nicht (ACCEPT):

/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT

Nun definieren wir konkrete Regelsätze für die eingehenden Datenpakete, da wir sie ja nicht komplett blockieren wollen.

Alle lokalen Datenpakete dürfen passieren:

/sbin/iptables -A INPUT -j ACCEPT -i lo

Dadurch können wir auf den eigenen Webserver, SSH, etc. zugreifen. Aber nur vom eigenen Rechner aus!

Von außerhalb erlauben wir alle ICMP-Pakete. Sie sind wichtig und stellen keine Gefahr da:

/sbin/iptables -A INPUT -j ACCEPT -p icmp

Auch Antwort-Pakete auf eigene Anfragen werden hineingelassen:

/sbin/iptables -A INPUT -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED

Für den einfachen Computer zu Hause reicht das bereits! Jetzt können wir surfen, Mails abrufen, Dateien hoch- und herunterladen, und uns frei im Netz bewegen. Auch DHCP funktioniert.

Die letzten Regeln sind nur für diejenigen interessant, die Zugriff auf ihren Rechner von außerhalb erlauben möchten. Hier werden Anfragen von außerhalb erlaubt, aber nur zu bestimmten Ports:

/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport ssh
/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport http

In diesem Fall haben wir unseren SSH-Server (ssh) und den Webserver (http) nach außen freigegeben. Statt ssh und http könnten wir auch direkt die Portnummern 22 und 80 angeben.

Zum Schluss nicht vergessen, das Script ausführbar zu machen:

chmod a+x DATEINAME

Beispiel-Script

Eine einfache Firewall, die keinen Zugriff von außerhalb erlaubt, könnte so aussehen:

#!/bin/sh

/sbin/iptables -F
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -A INPUT -j ACCEPT -i lo
/sbin/iptables -A INPUT -j ACCEPT -p icmp
/sbin/iptables -A INPUT -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED

Firewall-Script installieren

Das Firewall-Script ist bereits einsatzbereit. Einfach starten, und schon werden unsere Firewall-Regeln gesetzt.

Natürlich möchten wir die Firewall aber automatisch aktivieren lassen. Prinzipiell ist es egal, wann es gestartet wird. Hauptsache, vor dem Initialisieren der Netzwerk-Karte.

Leider hat jede Distribution dafür ihren eigenen Platz.

Unter Debian sollte das Script hierhin installiert werden:

/etc/network/if-pre-up.d/iptables

Alle Scripte, die in /etc/network/if-pre-up.d/ liegen, werden immer kurz vor dem Aktivieren des Netzwerks gestartet.

Weblinks