#!/bin/bash # # IPv6 firewall script Beispiel von http://www.kernel-error.de/ # eth0 ist hier das Interne Interface zum lokalen Netzwerk # sixxs ist der lokale Tunnelendpunkt zu SixXS! # # Dieses ist ein einfaches init-script welche z.b.: unter Debian läuffähig ist! # # Dieses firefallscript ist nur ein Beispiel welches einem den Einstieg erleichtern soll, # es ist sicher keine perfekte Lösung zur Absicherung des eigenen Netzwerkes. # # Die meisten Netzwerke unterscheiden sich grundlegend. Jeder sollte sein Netzwerk also sehr # bewusst und individuell schützen! # case "$1" in start) echo "Starte IP-Paketfilter" # Als erstes löschen wir mal alle bereits vorhandenen ip6tables Regeln. # Somit gelten nur die unten stehenden Regeln und man kommt sich mit nichts # ins Gehege! ip6tables -F ip6tables -X # Da diese Kiste routen soll, macht es nur sinn wenn unser Kernel die # Pakete auch wirklich weiterleitet. Daher aktivieren wir hier mal das # Forwarding der IPv6 Pakete auf allen Interfaces.. echo "1" >/proc/sys/net/ipv6/conf/all/forwarding # Auf dem internen Loopback device darf ruhig alles herumflippern. # Also packen wir hier mein ein ACCEPT hin. ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT # Simples Beispiel, alle dürfen hier alle ohne jegliche Einstränkungen # ins Internet. Daher erlauben wir hier den Ausgang auf dem Interfaces # sixxs ohne weiter Optionen. ip6tables -A OUTPUT -o sixxs -j ACCEPT # ICMPv6 also ping und ähnliches ist überall erlaubt und natürlich # auch die Weiterleitung :-) ip6tables -I INPUT -p icmpv6 -j ACCEPT ip6tables -I FORWARD -p icmpv6 -j ACCEPT ip6tables -I OUTPUT -p icmpv6 -j ACCEPT # An eth0 ist das lokale Netzwerk angeschlossen. In unserer einfachen # Konfiguration haben wir keine Angst vor dem lokalen Netzwerk, daher # darf dieses auf das Interface zugreifen. ip6tables -A INPUT -i eth0 -j ACCEPT ip6tables -A OUTPUT -o eth0 -j ACCEPT # Alle Pakete mit einem RH0-Header werden weggeworfen. ip6tables -A INPUT -m rt --rt-type 0 -j DROP ip6tables -A FORWARD -m rt --rt-type 0 -j DROP ip6tables -A OUTPUT -m rt --rt-type 0 -j DROP # Multicasts sind auch gerne gesehen. ip6tables -A INPUT -s ff00::/8 -j ACCEPT ip6tables -A OUTPUT -s ff00::/8 -j ACCEPT # Die Link-Local Adressen dürfen auch alles. ip6tables -A INPUT -s fe80::/10 -j ACCEPT ip6tables -A OUTPUT -s fe80::/10 -j ACCEPT # Hier erlauben wir nun das eigentliche Forwarding aus unserem Netz ins Internet, # zusätzlich natürlich noch die zugehörigen Verbindungen... ip6tables -A FORWARD -m state --state NEW -i eth0 -o sixxs -s 2a01:198:6ce::/64 -j ACCEPT ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # An dieser Stelle erlauben wir eingehende Verbindungen auf dem Port 22/TCP als Forward herein. # Sprich wir können aus der großen Internetwolke eine SSH-Verbindung zu jedem System in unserem Subnetz # aufbauen. Man könnte hier auch einzelne Hosts und Services angeben um diese jeweils zu erlauben! ip6tables -A FORWARD -i sixxs -p tcp -d 2a01:198:6ce::/64 --dport 22 -j ACCEPT # Beispiel für smtp zu einem host. ip6tables -A FORWARD -i sixxs -p tcp -d 2a01:198:6ce:bad:dead:beef:babe:1 --dport 25 -j ACCEPT # Als letztes setzen wir die default policy. Alle Pakete auf welche bisher keine Regel passt, wird also # hiermit verworfen! ip6tables -P INPUT DROP ip6tables -P FORWARD DROP ip6tables -P OUTPUT DROP ;; stop) echo "Stoppe IP-Paketfilter" # Alle ip6tables Regeln löschen. Damit sollte die Firwall aus sein! ip6tables -F ip6tables -X # Damit alles seine Ordnung hat, schalten wir an dieser Stelle das Routing auch # wieder ab! echo "0" >/proc/sys/net/ipv6/conf/all/forwarding ;; status) echo "Tabelle filter IPv6" ip6tables -L -vn echo "Tabelle mangle IPv6" ip6tables -t mangle -L -vn ;; *) echo "Fehlerhafter Aufruf" echo "Syntax: $0 {start|stop|status}" exit 1 ;; esac