Raspberry Pi als OpenVPN Gateway und Privoxy

Projekt >uboot<

Ich möchte euch zeigen wie Ihr euer Heimnetz schützen (OpenVPN) und gleichzeitig Werbefrei (Privoxy) im Netz surfen könnt.

uboot

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 …

Es kann genauso gut eine Virtuelle Maschine sein, diese sollte aber dann im dauer betrieb laufen 😉

blogger-image--1381855968

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.057

LOGFILE=/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 ]; then

if [ ${__KEEPLOG} -ne 1 ]; then

bash /boot/config/bin/clearlog.sh

else

echo „clearlog                     : skip“ | tee -a $LOGFILE

fi

fi


firstboot=0

if [ -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 ]; then

echo „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“ ]; then

GATEWAY=`ip route show | awk ‚$1 == „default“ {print $3}’`

fi


if [ „x“$IPADDRESS == „x“ ]; then

IPADDRESS=`ifconfig eth0 | grep ‚inet addr\|inet Adresse:‘ | awk -F: ‚{print $2}‘ | awk ‚{print $1}’`

fi


if ! grep -q ‚[ ]*novpn‘ /etc/iproute2/rt_tables ; then

echo „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 $LOGFILE

ip rule add fwmark 65 table novpn > /dev/null 2>&1


echo „ip route flush cache“ | tee -a $LOGFILE

ip route flush cache


if [ „x“$AUTOUPDATE == „xY“ ]; then

echo „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/motd

echo „“ >> /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 ]; then

init 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öschen

iptables -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 setzen

iptables -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:

Geheimmenü 1er BMW (I-Drive / BC)

In das Geheimmenü (I-Drive) im 1er BMW gelangt ihr wie folgt:

  • I-Drive lange drücken ca. 15 Sekunden, dann loslassen.
  • I-Drive drehen:– 3 mal rechts– 3 mal links
     1 mal rechts– 1 mal links– 1 mal rechts
  • I-Drive drücken.

In das Geheimmenü (BC) im 1er BMW gelangt ihr wie folgt:

  • Zündung auf Stufe 1
  • Den Rückstellknopf für die Tageskilometer lange drücken, bis Ihr in einem Menü seit.
  • Im Menü 1.0 wird die Fahrgestellnummer angezeigt
  • Die letzten 7 Zahlen müssen zusammengezählt werden (Quersumme), z.B. DG23278 = 22, Buchstaben einfach ignorieren.
  • Warten bis Ihr wieder im Hauptmenü seit und dann den Rückstellknopf so oft drücken, bis „Menü 19“ erscheint und kurz warten bis er ins Menü springt
  • Dann so oft drücken, bis die angezeigte Zahl der oben errechneten Quersumme entspricht.

SAMSUNG HT-TZ222 Lüfter-Mod

Das Lüftergeräusch der SAMSUNG Heimkinoanlage HT-TZ222 hat mich schon lange gestört.

Im AVForums habe ich einen Beitrag gelesen in dem das Lüftergeräusch gelöst wurde.

Hier der Beitrag der mich inspirierte meine Anlage auch zu modifizieren.

Meine Lösung sieht etwas anders aus. Da ich für eine XBOX-1 schon mal eine ähnliche Lösung gebastelt habe, durchsuchte ich mein Ersatzteillager nach einem weiteren Poti.

In wenigen Minuten war die Anlage aufgeschraubt und der Poti verbaut.

Ein Loch für den Regler hat die Anlage von Werk aus 😉

Hierfür einfach den Kabelbinder entfernen und schon kann der Poti eingesetzt werden.

 lüfter-mod

Rip MP3 von SoundCloud

Seit ich von SoundCloud gehört habe und es nutze, bin ich begeistert. SoundCloud ist eine Plattform für Musiker um z.B. Tracks mit anderen Musiker oder Remixer zu teilen.

Wem ein Track gefällt der kann sich das Musikstück als MP3 Downloaden, sofern der Download freigeschaltet ist.

Bei Tracks die man nicht Downloaden kann, gibt es zwei andere Möglichkeiten um an die MP3 Datei zukommen. Leider handelt es sich bei dieser Methode nicht um die Original MP3 in Original Qualität, sondern um den Stream den man hört und dieser ist in 128kb/s encoded.

Wen dies nicht stört der kann sich nach folgender Anleitung den Stream speichern.

Als Beispiel nehme ich folgen Track:

http://soundcloud.com/maydn/a-c-n-alexander-avilla-makes-me-wonder-maydn-remix

  • Öffnen wir die URL im Browser (Firefox) und schauen uns den Quellcode an (im Firefox STRG+U)
  • Jetzt suchen wir nach dem Parameter „streamUrl“
  • Kopieren wir nun den Wert des Parameters also das „http://media.soundcloud.com/stream/1PfFsdvGctfc?stream_token=2VRy9“
  • Die URL fügen wir in einem neuen Fenster ein und bestätigen
  • Je nach Browser Plugin kann man die MP3 gleich speichern oder es öffnet sich ein Plugin das den Stream abspielen möchte
  • Falls das Plugin den Stream abspielt, klicken wir im Firefox im Menü auf „Seite Speichern unter…“ und die MP3 Datei wird gespeichert.
  • Jetzt muss man nur noch die MP3 ID3-Tags (Artist und Interpret) hinzufügen.

 

Die zweite Möglichkeit ist die MP3 mit jDownloader runterzuladen. Einfach die URL zum Track (nicht die streamUrl) in jDownloader hinzufügen und den Rest macht jDownloader. Hierzu werde ich aber nicht näher eingehen 😉

Neue Repositories / Quellen in Cydia hinzufügen

Es kommt ab und an vor, dass man eine neue Quelle oder auch Repository genannt, in Cydia hinzufügen muss um bestimmte Pakete zu installieren.

Hier eine kurze Anleitung, wie man eine Quelle bei Cydia hinzufügt.

  • Öffnet das Cydia
  • klickt „Verwalten“
  • klickt „Quellen“
  • klickt rechts oben „Bearbeiten“
  • klickt links oben „Hinzufügen“
  • Jetzt die URL von der Quelle in das Eingabefenster
  • klickt „Quelle hinz…“

Jetzt habt ihr die Quelle hinzugefügt.


Es geht aber auch anders, wenn man gleich eine Liste hinzufügen möchte.

Das hinzufügen einer eigenen Liste ist ganz einfach.

Per SSH mit dem iDevice verbinden oder iFile auf dem iDevice starten.

In dem Ordner „\etc\apt\sources.list.d\“ könnt ihr eure eigene Liste anlegen.

Zum Beispiel nenen wir die Datei „bernisrepos.list“ und schreiben in diese die URL.

Beginnend mit „deb“ wird danach die URL hinzugefügt und mit „./“ abgeschlossen.

deb http://rpetri.ch/repo/ ./

deb http://apt.pwncenter.com/ ./

deb http://filippobiga.me/repo ./

Die Datei speichern und beim nächsten Start von Cydia werden die Quellen geladen.