Login
Newsletter
Werbung

Do, 26. April 2012, 15:00

Verschüsselte IPv6-Verbindung zum Heim-Netzwerk

Start des VPN-Clients

Das Starten der VPN-Verbindung benötigt Root-Rechte. Bei manchen Distributionen ist es möglich, die Verbindung zur Bootzeit zu starten, dies ist aber nicht immer erwünscht. Mit nachstehendem Skript kann die Verbindung erstellt werden:

#!/bin/sh
# Please set the correct netname, see tinc documantation
NETNAME=heimnetzwerk

SU_COMMAND=
PROTECTED=yes

# no graphical tool, you must set one of
######################################
SU_COMMAND=su
#SU_COMMAND=sudo

# Graphical command will be detected
#####################################
# fedora example: beesu ls -l
# SU_COMMAND=beesu

# openSuse example_ gnomesu -c "ls -l"
# SU_COMMAND="gnomesu -c"

# ubuntu
# SU_COMMAND=gksu

# KDE Desktop
# SU_COMMAND="kdesu -c"

start()
{
# get interface name
iface=`grep -i interface /etc/tinc/$1/tinc.conf| tr '=' ' '`
if [ ! -n $iface ]
then
  iface=$1
else
  iface=`echo $iface | awk '{ print $NF }'`
fi

# create a persistent tap device
if ! ip link sh dev $iface >/dev/null 2>/dev/null
then
  ip tuntap add mode tap dev $iface
fi

# start vpn
tincd -n $1
}

stop()
{
tincd -k -n $1
}

case $1 in
start)start  $NETNAME; exit;;
stop) stop $NETNAME; exit;;
esac

ans=`zenity  --list  --text "Start / Stop $NETNAME VPN" \
--radiolist  --column "Choose" --column "" TRUE Start FALSE Stop`


# Search graphical command
for cmd in beesu gnomesu gksu
do
tmp=`which $cmd`
if [ $? -eq 0 ]
then
    command=`basename $tmp`
    break;
fi
done

# if not found set the default
if [ ! -n $command ]
then
command=$SU_COMMAND
fi

# set args if required and for sudo tell that the
# args may not be protected
case $command in
beesu)   SU_COMMAND=beesu ;;
gksu)    SU_COMMAND=gksu ;;
gnomesu) SU_COMMAND="gnomesu -c" ;;
kdesu)   SU_COMMAND="kdesu -c" ;;
su)      SU_COMMAND="su root -c" ;;
sudo)    SU_COMMAND="sudo -u root"; PROTECTED=no ;;
esac

# call us again with arguments via the root password utility
case $PROTECTED in
no)
case $ans in
Start)  $SU_COMMAND $0 start home ;;
Stop)   $SU_COMMAND $0 stop home ;;
esac
;;
yes)
case $ans in
Start)  $SU_COMMAND "$0 start home" ;;
Stop)   $SU_COMMAND "$0 stop home" ;;
esac
;;
esac

Wenn zur Passwort-Abfrage kein GUI-Programm vorhanden ist, können su oder sudo Verwendung finden.

Dieses Skript kann irgendwo auf dem Rechner installiert werden und muss als ausführbar markiert sein:

chmod +x heimnetzVPN.sh

Danach kann ein Starter installiert werden, entweder auf dem Desktop oder in der Task-Leiste. Diese Anwendung muss innerhalb eines Terminals laufen. Falls su oder sudo zum Einsatz kommen, ist das Passwort im Terminal einzugeben.

Firewall

Da die IPv6-Adressen auf der Internet-Seite öffentlich sind, kann auf jedes IPv6-Gerät des Heimnetzes zugegriffen werden. Ein Schutz durch den Router ist nicht gegeben, außer wenn ein Firewall Router-seitig installiert ist. Wenn ein Tunnel zur Verbindung mit dem IPv6-Netz verwendet wird, ist der Rechner auf jeden Fall exponiert. Eine Firewall ist daher ein Muss.

Je nach Distribution stehen unterschiedliche graphische Oberflächen zu Verfügung. In der Regel sind diese zu sehr auf IPv4 getrimmt und für bestimmte Aufgaben nicht gerade leicht handhabbar.

Da Firewalling immer auf iptables bzw. dem IPv6-Pendant ip6tables basiert, kann eine kleine Datei erstellt und später von Hand ergänzt werden. Das Einspielen und Starten der Firewall erfolgt dann über ip6tables-restore < Datei. Dies sollte auf allen Systemen funktionieren.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i nat64 -j ACCEPT
-A INPUT -i vpn -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 5353 -d ff02::fb -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 655 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 655 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p ipv6-icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i nat64 -j ACCEPT
-A FORWARD -i vpn -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

Als erstes nach der Filter-Deklaration und den folgenden drei Zeilen werden angeforderte Nachrichten von externen Diensten zugelassen.

Danach werden alle eingehende ICMPv6-Verbindungen erlaubt, dies ist für den IPv6-Betrieb wichtig.

Der Verkehr von den angegebenen Schnittstellen lo, eth0, eth1 nat64 und vpn wird grundsätzlich erlaubt.

Anschließend werden einige Dienste für eingehende Verbindungen freigegeben (mdns, ipp, ssh, http/https und schließlich tinc (655).

Die Forwarding-Regeln gelten für das interne Netz, deswegen wird für die angegebenen Schnittstellen alles akzeptiert.

Die letzten Regeln senden eine ICMPv6-Fehlernachricht an den Absender zurück.

Die Zulassung weiterer Dienste kann leicht erreicht werden, indem Zeilen

-A INPUT -m state --state NEW -m udp -p udp --dport # -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport # -j ACCEPT

hinzugefügt werden. # steht für die Portnummer des Dienstes. Falls UDP bzw. TCP für den Dienst nicht notwendig ist, sollte die entsprechende Zeile ausgelassen werden.

Bemerkungen

Die Einträge mit IP-Adressen und Namen müssen an die eigenen Gegebenheiten angepasst werden.

Das Tap-Gerät, das mittels des Kommandos ip tuntap ... angelegt wurde, ist persistent. Dies erlaubt es, immer die gleiche IP-Adresse zu erhalten. Dies ist wichtig für den Fall, dass eine volle Einbindung des Clients ins Heim-Netzwerk erwünscht ist. Ohne dieses persistente Tap-Gerät würde tincd ein neues Gerät (mit einer anderen Mac-Adresse und demzufolge einer anderen IPv6-Adresse) anlegen. Dies könnte das DNS stören, wenn die Verbindung gestoppt und kurze Zeit danach neu gestartet wird.

Kommentare (Insgesamt: 1 || Alle anzeigen )
Korrektur (hans, Fr, 27. April 2012)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung