MotionEye oder Synology Survilance Station

Kürzlich stand ich vor dem Problem mehr als zwei Kameras in einer Überwachungssoftware zu betreiben. Synology bietet mit der Survilance Stattion ein sehr gutes und einfach zu administrierendes Tool an. Leider schlagen die Lizenzen deutlich zu Buche. Aus diesem Grund habe ich mich entschieden eine OpenSouce zu nutzen.

Auf der suche stieß ich auf MotionEye. Ebenso gibt es docker als auch native Versionen. Ich entschied mich, die Last von meinen Server zu “off-loaden” und nahm eine Raspberry Pi 3, die sowieso im Schrank rum lag.

Zum Einsatz kam nun das fertige Image von Github und dre ganze Prozess, vom Download, Image-Schreiben bis zum booten dauert nur wenige Minuten.

Nun noch die Initiale Konfiguration durchführen und schon ist die kostenlose Survilance Station mit MotionEye online.

Free and Public PiHole [NO ADS]

Hallo, Werbung nervt immer! Aus diesem Grund haben sich einige Entwickler zusammen getan, und einen Ad-Blocker auf Netzwerkebene etabliert.

Primärer Pi-hole/DNS Server

IPv4: 217.182.98.27

Web-Statistiken: https://pihole.server1.tschoerner.eu/admin

Datacenter: Roubaix, Frankreich

Sekundärer Pi-hole/DNS Server

IPv4: 185.94.252.78

Web-Statistiken: https://pihole.server4.tschoerner.eu/admin

Datacenter: Deutschland

Generelles

Ich benutze diese Adlist: http://git.tschoerner.eu/felix/piholeadlist

Beide Server unterstützen RPL Query’s, und leiten Anfragen an die OpenDNS Server weiter.

Disclaimer

Ich betreibe den Dienst. Daten werden nicht weitergegeben. Für mich sind Netz Neutralität, Privatsphäre und Internet Sicherheit  sehr wichtig, weshalb ich diesen Dienst betreibe.

Da man im Internet typischerweise nichts umsonst bekommt, möchte ich hier ganz besonders noch ein mal betonen, dass keine Daten weitergegeben werden und DU nicht “das Produkt” bist!

Nichtsdestotrotz betreibe ich diesen Dienst ohne jegliche Granite und unter Ausschluss sämtlicher Haftung.

Um zu starten, kannst Du hier schauen: Setup Pihole

Routing für PrivateInternetAccess/Socks, aber ohne VPN

Hi, heute möchte ich Euch ein kurzes HowTo zusammen stellen, wie Ihr ohne OpenVPN oder l2tp einen Router mittels eines anonymen Socksservers aufsetzt. Ich werde das am Beispiel von Private Internet Access machen, aber es funktioniert natürlich ebenso mit jedem anderen Dienst.

Das Stichwort lautet hier “badvpn-tun2socks”.

Viele von Euch werden das Problem kennen. Ich möchte “anonymer” im Internet unterwegs sein. Typischerweise wird im gleichen Satz das Wort VPN-Provider mit genannt. Diese Provider nutzen meist OpenVPN als Technologie. Leider müssen somit alle Pakete, sofern AES-NI nicht hardwareseitig unterstützt, von der CPU verarbeitet werden. Dieses ver-/entpacken der Pakete geschieht zudem auch nicht multi-threaded, was dazu führt, dass der Router alles mittels eines CPU-Kerns erledigen muss. Da gerade in bei solchen vorhaben eher auf “alte” Hardware gesetzt wird, denn diese liegt sowieso im Schrank herum, habe ich dieses Tutorial erarbeitet. Hierbei möchte ich noch 2 Punkte erwähnen. Zu einem ist ein Socks-Tunnel kein 100%iger Schutz. Pakete können dechiffriert werden. Zum anderen bietet die Kombination mit nur einem VPN-Provider weniger Schutz als die Kombination von verschiedenen Diensten.

Nun zum entgeltlichen Tutorial. Ich habe mein Socks-Gateway mit Ubuntu 16.04 realisiert. Der Grund hierfür war einfach, denn das Paket badvpn-tun2socks war direkt verfügbar. Los geht es mit der Installation:

add-apt-repository ppa:hda-me/badvpn-tun2socks
apt-get update
apt install badvpn-tun2socks

Im Anschluss bereite wir das System für das Routing vor. Dazu wird die Datei /etc/sysctl.conf bearbeitet. Hier muss das “#” vor net.ipv4.ip_forward=1 entfernt werden. Und anschließend die Konfiguration mit sysctl -p übernommen werden.

nano /etc/sysctl.conf

####
net.ipv4.ip_forward=1
####

sysctl -p

Jetzt haben wir schon einen Großteil geschafft. Das System ist vorbereitet. Als nächstes legen wir uns ein Script an, welches das “Fake”-tun Device erzeugt und die Verbindung zum Socks Server herstellt. Hierzu legen wir die Datei /root/restart_socks_Route.sh an.

nano /root/restart_socks_Route.sh

#/bin/bash
/usr/bin/killall badvpn-tun2socks
#Remove default gateway
/sbin/route del -net 0.0.0.0
#Only allow the connection thru my router to dns & Socks-Server
/sbin/route add 46.166.190.150 gw 192.168.178.1 metric 5
/sbin/route add 84.200.69.80 gw 192.168.178.1 metric 5
/sbin/route add 84.200.70.40 gw 192.168.178.1 metric 5
#Announce the DNS-Server
echo "nameserver 84.200.69.80" > /etc/resolv.conf
echo "nameserver 84.200.70.40" > /etc/resolv.conf
#Start the connection to the Socks-Server
/usr/bin/badvpn-tun2socks --loglevel none --tundev tun0 --netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0 --socks-server-addr 46.166.190.150:1080 --username XXX --password geheim &
#Ugly but secure ;)
/bin/sleep 1
#Bring up the tun Device
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
#Announce the default Gateway
/sbin/route add default gw 10.0.0.2 metric 6
#Do the Routing stuff
/sbin/sysctl -w net.ipv4.ip_forward=1
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Im Script sind folgende Parameter anzupassen. Die IP des Gateways, also eures Routers müsst Ihr ändern. Mein Default Gateway ist 192.168.178.1. Als weiteren Punkt müsst Ihr natürlich die socks-server-addr anpassen. In meinem Beispiel habe ich den Socksserver von PrivateInternetAccess eingetragen (46.166.190.150). Als letztes müsst ihr die Authentifizierung anpassen, für XXX den Usernamen eintragen und euer Passwort.

Als letztes nun das Script ausführbar machen und anstarten.

chmod a+x /root/restart_socks_Route.sh

#Starten des tunnels
/root/restart_socks_Route.sh

Ab jetzt seit ihr sicher … sicherer online im Netz unterwegs. Leider funktionieren traceroute und ping nicht durch diesen Tunnel, aber ihr könnt mit dieser Abfrage eure public Ip bestimmen. Diese sollte nun der IP eures Socks Providers gehören. Ggf. müsst Ihr noch curl installieren.

/usr/bin/curl -t 10 -s http://server4.tschoerner.eu/ip.php

Das Ergebnis könnte so aussehen:

Hier noch ein Script, welches prüft ob ihr sicher unterwegs seit

#!/bin/bash

localip=$(/usr/bin/dig <Your public DDNS> +short)
remoteip=$(/usr/bin/curl -t 10 -s http://server4.tschoerner.eu/ip.php)

#echo "Local IP:" $localip
#echo "Remote IP:"$remoteip"XXX"

if [[ $localip == $remoteip ]] || [ -z $remoteip ];
then
        echo "not secure"
        echo $localip
        echo $remoteip
else
        echo $localip
        echo "Public IP: "$remoteip
        echo "secure"
fi

Viel Spaß damit! Und bis bald!

Es geht wieder los …

Nach nun einer längeren Pause habe ich wieder Zeit gefunden, meinen Blog weiter zu führen. In nächster Zeit werde ich über einige Themen wie “Privacy beim Surfen”, Virtualisierung, Netzwerktechniken und verschiedene Linux Topics wieder bloggen.

Ein großes Thema meiner Abstinenzzeit war auch das Thema – Hausautomatisierung. Hier habe ich mich speziell mit HomeAssistant, verschiedenen Arduino’s auseinander gesetzt.

Es gibt also viel zu berichten.

VMWare – Shrink/Compact Disk eines Linux Gastes

Im Zeitalter von SSDs ist man wieder mehr darauf bedacht, Speicherplatz zu sparen. Im Normalfall hat man seine VMs ja heutzutage auf eher kleineren SSD liegen, so dass man sicher stellen muss, dass diese Files von Zeit zu Zeit “ge-shrinked” werden.

Ein einfaches schrinken des Diskfiles unter VMWare führt in den meisten fällen nicht zu gewünschten Ergebnis.

So sind beispielsweise nur ~13GB im Gast belegt, das Diskfile ist jedoch ganze 100GB groß. Um für VMWare den freien Speicherplatz zu markieren, muss dieser mit NULL/Zero vollgeschrieben werden. Dies mach aber auch nur sinn, wenn vorher alle Daten an den Anfang des Files verschoben wurden. Somit besteht die Prozedur aus 1. dem Defragmentieren und 2. dem Wipen der Disk, wo sich keine Daten befinden.

# 1. Defragmentieren (no need to un/remount anything)
sudo e4defrag /

#Fehler können ignoriert werden. Symlinks & Devices können nicht defragmentiert werden.

#2. Wipe the unused disk.
dd if=/dev/zero of=wipefile bs=1M; sync; rm wipefile

#3. Starte den VMWare Shrink Prozess
sudo vmware-toolbox-cmd disk shrinkonly

Danach wurden knapp 87GB wieder freigegeben, da diese nicht benutzt wurden.

Dias digitalisieren “like a Boss”

Vor einiger Zeit stand ich vor dem Problem, dass ich eine große Anzahl von Dias digitalisieren musste. Es gibt im Netz verschiedene Anbieter die professionell Dias digitalisieren, dies jedoch zu erstaunlich hohen Preisen. Da meine Bilder zum größten Teil eher einen idealistischen Wert haben, als einen künstlerischen beschloss ich mir was zu überlegen.

Nach einiger Zeit und Recherche stieß ich auf die Idee die Dias zu projizieren und dann nochmal zu fotografieren.
Die Qualität eines an die Wand projizierten Bildes, welches noch einmal fotografiert wurde, war wie zu erwarten nicht zu prickelnd. Im nächsten Schritt beschloss ich direkt in den Projektor zu fotografieren und das Bild spiegelverkehrt aufzunehmen. Hier ließ mich die enorme Wärmeentwicklung des Dia-Projektors etwas zögern. Da war mir meine DSLR doch zu schade für.

Was also tun? Kurzerhand habe ich mir eine Halogenlampe mit deutlich weniger Leistung besorgt und zudem den Projektions-Glaskörper durch Milchiges-Streuglas ersetzt. Jetzt musste ich nur noch die Kamera auf den Projektor richten und alle Dias umlegen.

581522_417938808235366_1789021984_n

 

tar auf einen remote Server per ssh

Wie kann man per tar direkt auf einen remote Server schreiben? Warum möchte man direkt per tar auf einen remote Server sichern? Diese Fragestellung tritt speziell dann auf, wenn man auf den zu sichernden Server nur wenig verbleibende Disk-Kapazität hat. Typischerweise sind das dann Datenbankserver, oder wie in meinem Fall Webserver, die eine OwnCloud Instanz hosten. Da auch im Web der Festplattenspeicher teuer ist, nutze ich mein NAS zu Hause zu die Daten zu sichern. Hier steht ja in gewissem Maße unbegrenzter Speicherplatz zur Verfügung.

Also gut, dann erzeugen wir ein Archiv und pipen die Ausgabe direkt per SSH auf den Remote Speicher um.

tar zcvf - /var/www/ | ssh -p 22 root@nas.tschoerner.eu "cat > /media/backup/WebServer.tar.gz"

Nun wird das erzeugte Archiv direkt auf den SSH Server umgeleitet.

Müsst Ihr nun ein Backup wieder herstellen, so könnt Ihr das auch, ohne das Archiv kopieren zu müssen:

cd /
ssh -p 22 root@nas.tschoerner.eu "cat /media/backup/WebServer.tar.gz" | tar zxvf -

 

[HowTo] Passwortschutz in Hiawatha

Möchtet ihr ein Verzeichnis mit einem Passwortschutz versehen, geht das wie folgt.

  1. User:Passwort Kombination erzeugen
  2. In Datei speichern
  3. Referenze in Konfig herstellen
  4. Hiawantha neu starten

Nun die Schritte im Detail

  1. Passwort erzeugen
root@server:~# wigwam -b USERNAME

Enter password:
USERNAME:$1$NgPZr/kS$AoYOt7e1.hKk5g99EjkX3

2. Ergebnis in Datei Speichern

echo "USERNAME:$1$NgPZr/kS$AoYOt7e1.hKk5g99EjkX3" > /pathToFolder/.password

3. In Konfig einfügen (/etc/hiawatha/hiawatha.com)

# Add this to vHost or folder to protect

PasswordFile = basic:/pathToFolder/.passwords

4. Neustarten des Webservers

/etc/init.d/hiawatha restart

 

[HowTo] WordPress auf Hiawantha hosten

Kürzlich habe ich meinen WebServer umgestellt und betreibe einen Hiawantha Server. Um WordPress zu betreiben, setze ich mal voraus, dass der Server installiert ist (vergleiche hier), und ihr eine Datenbank angelegt habt.

Nun müsst ihr in der Datei /etc/hiawantha/hiawantha.conf die Rewrite-Rule einfügen:

UrlToolkit {
    ToolkitID = wp-multi
    Match ^/index\.php$ Return
    Match ^/([_0-9a-zA-Z-]+/)?wp-admin$ Redirect /$1wp-admin/
    RequestURI exists Return
    Match ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) Rewrite /$2
    Match ^/([_0-9a-zA-Z-]+/)?(.*\.php)$ Rewrite /$2
    Match .* Rewrite /index.php?$1
}

Jetzt legt Ihr noch ein vHost in der gleichen Konfig an:

VirtualHost {
        Hostname = XXX.tschoerner.eu,*.XXX.tschoerner.eu
        WebsiteRoot = /var/www/XXX.tschoerner.eu/public
        AccessLogfile = /var/www/XXX.tschoerner.eu/log/access.log
        ErrorLogfile = /var/www/XXX.tschoerner.eu/log/error.log
        StartFile = index.php
        TimeForCGI = 60
        UseFastCGI = PHP7 # --> PHP Version
        CustomHeader = X-Frame-Options: sameorigin
        CustomHeader = Vary: Accept-Encoding
        RandomHeader = 64
        UseToolkit = wp-multi # --> This loads the Rewrite Rule
        EnforceFirstHostname = yes
        PreventXSS = yes
        PreventCSRF = yes
        PreventSQLi = yes
}

Nun noch folgende Verzeichnisse anlegen:

mkdir -p /var/www/XXX.tschoerner.eu/log/
mkdir -p /var/www/XXX.tschoerner.eu/public
chown -R www-data:www-data /var/www/XXX.tschoerner.eu

Jetzt WordPress herunterladen:

cd 
wget https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
cd wordpress
mv * ../
cd ..
rm -rf wordpress
rm -rf latest.tar.gz
chown -R www-data:www-data /var/www/XXX.tschoerner.eu

Jetzt Hiawantha einmal neustarten, damit unser vHost erkannt wird.

/etc/init.d/hiawatha restart

Nun kann WordPress installiert werden. Hierzu könnt Ihr einfach eure URL aufrufen, in meinem Fall ist es http://XXX.tschoerner.eu

Wenn ihr WordPress von einem anderen Server umgezogen habt, vergleicht auf den fix der Permalinks.

[HowTo] MySQL/MariaDB User und Datenbank erzeugen

Wenn Ihr einen PHP-Skript (WordPress, Drupal …) auf eurem Server hostet und keine Webhosting Interface nutzt, dann könnt Ihr mit diesen Schritten schnell eine Datenbank & DB-User erstellen. Mit diesen Schritten erzeugt Ihr eine Datenbank & DB-User mit gleichen Namen.

Folgendes nacheinander ausführen und USER_blog und geheim ersetzten.

# mysql

CREATE USER 'USER_blog'@'%' IDENTIFIED BY 'geheim';
GRANT USAGE ON *.* TO 'USER_blog'@'%' IDENTIFIED BY 'geheim' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `USER_blog`;
GRANT ALL PRIVILEGES ON `USER_blog`.* TO 'USER_blog'@'%';
QUIT;