Projekt >uboot<
Ich möchte euch zeigen wie Ihr euer Heimnetz schützen (OpenVPN) und gleichzeitig Werbefrei (Privoxy) im Netz surfen könnt.
Warum? Wieso? Wozu?
Wenn Ihr euch diese Fragen stellt, dann ist das Internet für euch Neuland.
Fangen wir an.
Hardware:
Bei der Hardware habe ich mich für einen Raspberry Pi Model B entschieden. Diese kann per USB an die FritzBox/Router angeschlossen werden und läuft und läuft …
Software:
Ich möchte das Rad nicht neu erfinden und durch etwas googlen bin ich auf folgenden Blog aufmerksam geworden.
Bitte schaut euch die Seite genau an. Dort steht (fast) alles was Ihr braucht.
Falls doch ein fertiges IMAGE gewüscht wird, dann werde ich eins hochladen.
Ich werde lediglich auf meine Änderung / Erweiterung eingehen.
Das Image auf die SD schreiben.
Meinen Patch runterladen und entpacken -> config_v08.zip.
Den Ordner „config“ auf die FAT32 Partition der SD-Karte kopieren.
Der Ordner „config“ wird später unter „/boot/config“ gemountet.
Konfiguration:
Unter „/boot/config/config.txt“ folgende Einstellungen festgelegt werden.
- Autoupdate beim Start
- Den Namen deines Raspberry Pi’s (Hostname)
- DHCP oder Statische IP
Nach dem Booten starten wir das Script zum Patchen:
bash /boot/config/bin/patch.sh
Das Script wird anschließend neustarten und dein >uboot< ist bereit.
Wurde der Patch bereits ausgeführt und man möchte einfach die Einstellungen (OpenVPN und Netzwerk) neu konfigurieren, dann das Script „/boot/config/bin/firstrun_done.sh“ in „/boot/config/bin/firstrun.sh“ umbenennen und neustarten.
Bei jedem starten wird das Script „/boot/config/bin/autorun.sh“ ausgeführt.
- Alte Logdateien löschen
- Prüfen ob die Datei „/boot/config/bin/firstrun.sh“ existiert und ausführen.
- Iptables Regeln laden
- Gateway Routen konfigurieren
- Nach Updates prüfen
#!/bin/bash
__SCRIPT_VERSION=14.057LOGFILE=/boot/config/log/autorun.log
while (( „$#“ )); do
if [[ „$1“ == „KEEPLOG“ ]]; then
__KEEPLOG=1
fi
shift
done
echo „**********************************************************************“ | tee -a $LOGFILE
echo „autorun v.${__SCRIPT_VERSION}“ | tee -a $LOGFILE
echo „**********************************************************************“ | tee -a $LOGFILE
echo „date : $(date)“ | tee -a $LOGFILE
if [ -e /boot/config/bin/clearlog.sh ]; thenif [ ${__KEEPLOG} -ne 1 ]; then
bash /boot/config/bin/clearlog.sh
else
echo „clearlog : skip“ | tee -a $LOGFILE
fi
fi
firstboot=0if [ -e /boot/config/bin/firstrun.sh ]; then
firstboot=1
echo „starting : firstboot“ | tee -a $LOGFILE
bash /boot/config/bin/firstrun.sh
fi
if [ -e /boot/config/bin/rulesiptables.sh ]; thenecho „restore iptables rules“ | tee -a $LOGFILE
bash /boot/config/bin/rulesiptables.sh
fi
if [ -e /boot/config/config.txt ]; then. /boot/config/config.txt
fi
if [ „x“$GATEWAY == „x“ ]; thenGATEWAY=`ip route show | awk ‚$1 == „default“ {print $3}’`
fi
if [ „x“$IPADDRESS == „x“ ]; thenIPADDRESS=`ifconfig eth0 | grep ‚inet addr\|inet Adresse:‘ | awk -F: ‚{print $2}‘ | awk ‚{print $1}’`
fi
if ! grep -q ‚[ ]*novpn‘ /etc/iproute2/rt_tables ; thenecho „echo \“201 novpn\“ >> /etc/iproute2/rt_tables“ | tee -a $LOGFILE
echo „201 novpn“ >> /etc/iproute2/rt_tables
fi
NOVPN_LIST=`ip route show table novpn`for line in $NOVPN_LIST
do
echo „ip route del $line table novpn“ | tee -a $LOGFILE
ip route del $line table novpn > /dev/null 2>&1
done
NOVPN_NETWORK=`ip route show | grep „$IPADDRESS“`echo „ip route add default via $GATEWAY dev eth0 table novpn“ | tee -a $LOGFILE
ip route add default via $GATEWAY dev eth0 table novpn > /dev/null 2>&1
echo „ip route add $NOVPN_NETWORK table novpn“ | tee -a $LOGFILE
ip route add $NOVPN_NETWORK table novpn > /dev/null 2>&1
NOVPN_LIST=`ip rule show | awk ‚$7 == „novpn“ && $5 == „0x41“ {print $5}’`for line in $NOVPN_LIST
do
echo „ip rule del fwmark $line table novpn“ | tee -a $LOGFILE
ip rule del fwmark $line table novpn > /dev/null 2>&1
done
echo „ip rule add fwmark 65 table novpn“ | tee -a $LOGFILEip rule add fwmark 65 table novpn > /dev/null 2>&1
echo „ip route flush cache“ | tee -a $LOGFILEip route flush cache
if [ „x“$AUTOUPDATE == „xY“ ]; thenecho „updating system“ | tee -a $LOGFILE
apt-get update
apt-get -o Dpkg::Options::=“–force-confnew“ -qq –force-yes upgrade
apt-get clean
fi
echo -en „\033[1;34m“ > /etc/motdecho „“ >> /etc/motd
echo „“ >> /etc/motd
echo „Welcome to >uboot< on Raspberry Pi“ >> /etc/motd
echo „“ >> /etc/motd
echo -en „\033[0m“ >> /etc/motd
echo „autorun : done“ | tee -a $LOGFILE
if [ $firstboot -eq 1 ]; theninit 6
fi
exit 0
IPTABLES
Iptables Anpassungen können über das Script „/boot/config/bin/rulesiptables.sh“ gemacht werden. Es sind ein paar Beispiel Einträge vorhanden.
- Markierte Pakete werden an das Gateway „novpn“ (Puclic IP) geleitet.
- Eingehende (Public IP) RDP-Verbindung an einen Windows-Rechner leiten und als „novpn“ markieren damit die Rückanwort nicht in den VPN-Tunnel verschwindet.
- HTTP traffic (Port 80/443) wird an Privoxy geleitet
#!/bin/bash
#Alle Regeln löscheniptables -X
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t mangle
iptables -X -t mangle
iptables -F -t nat
iptables -X -t nat
#Policies setzeniptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#### Gateway’s splitten
###
# Pakete markieren damit eth0 > novpn
#[MARK]iptables -t mangle -A PREROUTING -m connmark –mark 65 -j MARK –set-mark 65
iptables -t mangle -A OUTPUT -m connmark –mark 65 -j MARK –set-mark 65
#[MARK:RDP-WIN]iptables -t mangle -A PREROUTING -i eth0 -m state –state NEW -p tcp –dport 50001 -j CONNMARK –set-mark 65
#[MARK:SSH-WIN]
iptables -t mangle -A PREROUTING -i eth0 -m state –state NEW -p tcp –dport 50002 -j CONNMARK –set-mark 65
#[MARK:SSH-LOCAL]
iptables -t mangle -A PREROUTING -i eth0 -m state –state NEW -p tcp –dport 50003 -j CONNMARK –set-mark 65
#### Weiterleitung an andere Server
###
# Leitet alle Pakete von Port nach Ziel weiter
#[RDP-WIN]# Router:50001 -> eth0:50001 -> RDP-Win:3389 -> eth0:50001 > novpn
iptables -t nat -A PREROUTING -p tcp –dport 50001 -j DNAT –to-destination 192.168.159.3:3389
# Maskiere den Absender
#iptables -t nat -A POSTROUTING -p tcp –dport 3389 -j SNAT –to-source 192.168.159.2
#[SSH-WIN]# Router:50002 -> eth0:50002 -> SSH-Win:22 -> eth0:50002 > novpn
iptables -t nat -A PREROUTING -p tcp –dport 50002 -j DNAT –to-destination 192.168.159.3:22
# Maskiere den Absender
#iptables -t nat -A POSTROUTING -p tcp –dport 22 -j SNAT –to-source 192.168.159.2
#[SSH-LOCAL]iptables -t nat -A PREROUTING -p tcp –dport 50003 -j REDIRECT –to-ports 22
#[PRIVOXY-LOCAL]iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-ports 8118
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 443 -j REDIRECT –to-ports 8118
#### OpenVPN maskieren
###
# Masquerade: ‚maskiert‘ (Absender ist das Gerät) alle Pakete die über tun0 gesendet werden
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#### Regeln speichern
###
iptables-save > /boot/config/rulesiptables-save
exit 0
PRIVOXY
Privoxy ist so eingestellt, dass im Browser keine Einstellungen vorgenommen werden müssen. Das bedeutet Privoxy läuft transparent im Hintergrund und es werden automatisch Werbung, Popups usw. entfernt.
Änderungen können über den Browser URL: http://config.privoxy.org/ oder über die „/etc/privoxy/config“ gemacht werden.
Allgemeines
Folgende Befehle können nützlich sein:
System Neustarten : init 6
System Ausschalten : init 0
Privoxy Anhalten: /etc/init.d/privoxy stop
Privoxy Starten: /etc/init.d/privoxy start
Privoxy Neustarten: /etc/init.d/privoxy restart
OpenVPN Anhalten: /etc/init.d/openvpn stop
OpenVPN Starten: /etc/init.d/openvpn start
OpenVPN Neustarten: /etc/init.d/openvpn restart
Iptables neu laden : bash /boot/config/bin/rulesiptables.sh
Netzwekänderungen neu laden : bash /boot/config/bin/resetnetwork.sh
Datum setzen : /boot/config/bin/ntpdate -b tick.fh-augsburg.de
—
Quellen: