Anleitung zum Erstellen eines einfachen Firewall-Scripts "für den Hausgebrauch" mit iptables
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.
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
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
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.