Zum Inhalt

Verbindet Euch sicher und von überall aus mit Eurem Server

Letzte Aktualisierung: Mai 2022. Für fortgeschrittene BenutzerInnen. Solide technische Kenntnisse erforderlich.

Pi-hole installieren

Nachdem Ihr Euren Ubuntu-Server erfolgreich eingerichtet und die grundlegenden sowie erweiterten Sicherheitsmaßnahmen konfiguriert habt, erfahrt Euch dieses Kapitel, wie Ihr:

  • mittels DuckDNS eine (Sub-)Domäne auf Eure Heim-IP-Adresse verweist
  • mittels Let's Encrypt Euren Datenverkehr verschlüsselt
  • mittels Pi-hole auf lokale Dienste zugreift, einen datenschutzfreundlichen DNS-Anbieter nutzt und Werbung blockiert
  • mittels eines Reverse Proxys Euren Server vom Internet abschirmt
  • mittels OpenVPN sicher auf Euren Server zugreift, von überall auf der Welt

Eine Domäne mit DuckDNS einrichten

DuckDNS

Man merkt sich Internet-Adressen leichter als irgendwelche IP-Adressen. Statt 18.192.76.182 in den Browser einzugeben, ziehen es die meisten Nutzer vor www.gofoss.net aufzurufen. Damit das auch mit Eurem Server funktioniert, benötigt Ihr einen eindeutigen Namen – den sogenannte Domänennamen – der auf Eure private IP-Adresse verweist. Der Domänenname ist zudem zur Verschlüsselung des Datenverkehrs erforderlich, wie im nächsten Abschnitt erläutert wird.

DuckDNS ermöglicht es, kostenlos eine (Sub-)Domäne zu registrieren und diese dynamisch auf Eure Heim-IP-Adresse zu verweisen. Diese Methode funktioniert also selbst, wenn sich Eure IP-Adresse häufig ändern sollte. Besucht dazu einfach die DuckDNS-Webseite und registriert eine (Sub-)Domäne Eurer Wahl. Sobald die Registrierung bestätigt ist, erhaltet Ihr ein einmaliges Token.

Für die Zwecke dieses Tutorials haben wir die (Sub-)Domäne gofoss.duckdns.org registriert und das Token ebaa3bd3-177c-4230-8d91-a7a946b5a51e erhalten. Damit können wir später über Adressen wie https://myservice.gofoss.duckdns.org auf Server-Dienste zugreifen.


Let's Encrypt Zertifikate

Datenverkehr mit Let's Encrypt verschlüsseln

Sämtlicher Datenverkehr sollte über HTTPS verschlüsselt werden. Die Adressleiste Eures Browsers sollte immer eine sichere Verbindung anzeigen – ganz egal, ob Ihr im Internet surft oder auf selbst gehostete Dienste zugreift. Damit das auch mit Eurem Server funktioniert, werden SSL-Zertifikate benötigt. Die könnt Ihr entweder kaufen, oder kostenlos von Let's Encrypt erhalten. Let's Encrypt ist eine vertrauenswürdige Zertifizierungsstelle. Untenstehend findet Ihr eine ausführliche Anleitung.

Hier geht's zur Schritt-für-Schritt-Anleitung

Dehydrated installieren

Bevor Let's Encrypt Euch ein Zertifikat ausstellt, wird erst mal überprüft, ob Ihr tatsächlich Eigentümer der Domäne seid. Ein schickes Programm namens Dehydrated macht dies möglich. Meldet Euch auf Eurem Server an und ladet Dehydrated herunter:

sudo apt install git
git clone https://github.com/dehydrated-io/dehydrated.git

Wechselt in das Verzeichnis dehydrated und erstellt eine erste Konfigurationsdatei:

cd dehydrated
vi domains.txt

Fügt die folgende Zeile ein, und gebt dabei unbedingt Euren eigenen Domänennamen an:

*.gofoss.duckdns.org > gofoss.duckdns.org

Speichert und schließt die Datei (:wq!). Erstellt anschließend eine zweite Konfigurationsdatei:

vi config

Fügt die folgenden Zeilen ein. Vergesst nicht, Eure eigene E-Mail-Adresse anzugeben:

CHALLENGETYPE="dns-01"
BASEDIR=/etc/dehydrated
HOOK="${BASEDIR}/hook.sh"
CONTACT_EMAIL=gofoss@gofoss.net

Speichert und schließt die Datei (:wq!). Erstellt anschließend eine dritte Konfigurationsdatei:

vi hook.sh

Fügt die folgenden Zeilen ein. Gebt dabei unbedingt Euren eigenen Domänennamen sowie Euer eigenes DuckDNS-Token an:

DOMAIN="gofoss.duckdns.org"                         # gebt Eure Domäne hier an
TOKEN="ebaa3bd3-177c-4230-8d91-a7a946b5a51e"        # gebt Euer Token hier an

case "$1" in
    "deploy_challenge")
        curl "https://www.duckdns.org/update?domains=$DOMAIN&token=$TOKEN&txt=$4"
        echo
        ;;
    "clean_challenge")
        curl "https://www.duckdns.org/update?domains=$DOMAIN&token=$TOKEN&txt=removed&clear=true"
        echo
        ;;
    "deploy_cert")
        ;;
    "unchanged_cert")
        ;;
    "startup_hook")
        ;;
    "exit_hook")
        ;;
    *)
        echo Unknown hook "${1}"
        exit 0
        ;;
esac

Speichert und schließt die Datei (:wq!).

Hinweis: Die obigen Anweisungen müssen angepasst werden, falls Ihr eine andere Domäne als DuckDNS verwendet. Lest in diesem Fall bitte die Dokumentation von Dehydrated oder fragt in der Let's Encrypt Gemeinschaft nach, um die sogenannte Hook für die DNS-basierte Überprüfung richtig einzurichten.

Die folgenden Befehle erstellen ein certs Verzeichnis, in dem alle SSL-Zertifikate gespeichert werden. Die Dateien dehydrated und hook.sh werden ausführbar gemacht. Das dehydrated Verzeichnis wird nach /etc/dehydrated verschoben. Schließlich wird gofossadmin zum Eigentümer des Verzeichnisses /etc/dehydrated. Stellen sicher, dass Ihr den Namen des Administrators an Eure eigenen Einstellungen anpasst:

mkdir certs
chmod a+x dehydrated
chmod a+x hook.sh
cd ..
sudo mv dehydrated /etc/dehydrated
sudo chown -R gofossadmin:gofossadmin /etc/dehydrated

Überprüft die Verzeichnisstruktur:

sudo ls -al /etc/dehydrated

Die Ausgabe sollte in etwa folgendermaßen aussehen:

drwxr-xr-x 2 gofossadmin gofossadmin   4096 Jan 01 00:00 .
drwxr-xr-x 4 gofossadmin gofossadmin   4096 Jan 01 00:00 ..
-rw-r--r-- 1 gofossadmin gofossadmin    200 Jan 01 00:00 certs
-rw-r--r-- 1 gofossadmin gofossadmin    200 Jan 01 00:00 config
-rwxr-xr-x 1 gofossadmin gofossadmin 700000 Jan 01 00:00 dehydrated
-rw-r--r-- 1 gofossadmin gofossadmin    200 Jan 01 00:00 docs
-rw-r--r-- 1 gofossadmin gofossadmin     20 Jan 01 00:00 domains.txt
-rwxr-xr-x 1 gofossadmin gofossadmin    700 Jan 01 00:00 hook.sh

Zertifikate erstellen

Meldet Euch bei Let's Encrypt an:

bash /etc/dehydrated/dehydrated --register --accept-terms

Der obige Befehl erstellt das Verzeichnis /etc/dehydrated/accounts, das Eure Registrierungsinformationen enthält. Das Terminal sollte nun in etwa folgendes anzeigen:

# INFO: Using main config file /etc/dehydrated/config
+ Generating account key...
+ Registering account key with ACME server...
+ Done!

Erstellt nun die SSL-Zertifikate:

bash /etc/dehydrated/dehydrated -c

Die Terminal-Ausgabe sollte in etwa folgendermaßen aussehen:

+ Creating chain cache directory /etc/dehydrated/chains
Processing gofoss.duckdns.org
+ Creating new directory /etc/dehydrated/certs/gofoss.duckdns.org ...
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting new certificate order from CA...
+ Received 1 authorizations URLs from the CA
+ Handling authorization for gofoss.duckdns.org
+ 1 pending challenge(s)
+ Deploying challenge tokens...
OK
+ Responding to challenge for gofoss.duckdns.org authorization...
+ Challenge is valid!
+ Cleaning challenge tokens...
OK
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Done!

Das war's! Es wurden zwei SSL-Schlüssel erstellt, um den Datenverkehr Eurer selbst gehosteten Dienste zu verschlüsseln. Wir erklären später, wie diese Schlüssel zum Einsatz kommen.

Datei Pfad
Öffentlicher Schlüssel /etc/dehydrated/certs/gofoss.duckdns.org/fullchain.pem
Privater Schlüssel /etc/dehydrated/certs/gofoss.duckdns.org/privkey.pem

Zertifikate automatisch verlängern

Die Zertifikate von Let's Encrypt laufen nach 90 Tagen ab und können 30 Tage zuvor erneuert werden. Es empfiehlt sich, dies zu automatisieren. Erstellen hierzu eine Log-Datei:

sudo touch /var/log/dehydrated

Erstellt anschließend einen wöchentlichen Cron-Job, der die Gültigkeit des Zertifikats überprüft und es bei Bedarf erneuert:

sudo vi /etc/cron.weekly/dehydrated

Fügt die folgenden Zeilen ein:

#!/bin/sh

MYLOG=/var/log/dehydrated
echo "Checking cert renewals at `date`" >> $MYLOG
/etc/dehydrated/dehydrated -c >> $MYLOG 2>&1

Speichert und schließt die Datei (:wq!). Macht das Skript nun ausführbar:

sudo chmod +x /etc/cron.weekly/dehydrated

Testet den Cron-Job:

sudo bash /etc/cron.weekly/dehydrated
sudo cat /var/log/dehydrated

Die Terminal-Ausgabe sollte in etwa folgendermaßen aussehen:

Checking cert renewals at Sun 01 Jan 2021 01:29:06 PM CEST
# INFO: Using main config file /etc/dehydrated/config
Processing *.gofoss.duckdns.org
 + Checking domain name(s) of existing cert... unchanged.
 + Checking expire date of existing cert...
 + Valid till Mar 12 10:23:18 2021 GMT (Longer than 30 days). Skipping renew!
Hier geht's zum 2-minütigen Zusammenfassungsvideo

Und was ist mit selbst signierten Zertifikaten?

Die Verwendung von selbst signierten Zertifikaten für die HTTPS-Verschlüsselung ist durchaus möglich. Allerdings werden diese von Browsern und Anwendungen oft nicht erkannt oder erzeugen Warnungen und Fehlermeldungen. Auf Android-Telefonen beispielsweise müssen selbst signierte Zertifikate erst importiert und als vertrauenswürdig eingestuft werden. Aus diesen Gründen empfehlen wir, eine Zertifizierungsstelle wie Let's Encrypt zu bevorzugen.


Pi-hole

Pi-hole verwaltet den Datenverkehr und blockiert Werbung


Pi-hole Benutzeroberfläche

Pi-hole ist ein nützliches kleines Programm: Es kann lokale Adressen wie https://myservice.gofoss.duckdns.org auflösen, ermöglicht die Auswahl eines Upstream-DNS-Anbieters Eurer Wahl und blockiert Werbung und Tracker. Folgt den nachstehenden Anweisungen, um Pi-hole auf Eurem Server einzurichten.

Hier geht's zur Schritt-für-Schritt-Anleitung

Pi-hole installieren

Zum Zeitpunkt der Abfassung dieses Textes war die Version 5.10 die letzte Pi-hole-Version. Das Programm ist relativ ressourcenarm, 50 MB freier Speicherplatz und 512 MB RAM reichen aus, um es unter Ubuntu zu betreiben. Pi-hole benötigt außerdem eine statische IP-Adresse sowie Apache und PHP, die wir in früheren Kapiteln konfiguriert haben. Führt das Installationsskript von Pi-hole aus:

sudo curl -sSL https://install.pi-hole.net | bash

Folgt den Anweisungen auf dem Bildschirm:

Anweisung Beschreibung
This installer will transform your device into a network-wide ad blocker! Drückt auf EINGABE, um fortzufahren.
The Pi-hole is free, but powered by your donations Drückt auf EINGABE, um fortzufahren.
The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly Wählt Yes und drückt auf EINGABE, um fortzufahren.
Choose An Interface Wählt Eure Netzwerkschnittstelle. Drückt die TABULATORTASTE zur Änderung der Auswahl und die LEERTASTE um Eure Auswahl zu bestätigen. Drückt auf EINGABE, um fortzufahren.
Select Upstream DNS Provider. To use your own, select Custom Wählt einen DNS-Anbieter Eurer Wahl. In diesem Beispiel verwenden wir UncensoredDNS, Ihr könnt natürlich jeglichen anderen DNS-Anbieter auswählen! Wir empfehlen Euch lediglich, einen anderen DNS-Anbieter als Euren Internet-Anbieter, Cloudfare oder Google zu wählen. Weitere Informationen zu DNS-Anbietern findet am Ende dieses Abschnitts.
Pi-hole relies on third party lists in order to block ads. Drückt auf EINGABE, um fortzufahren. Wir erklären etwas später, wie Ihr weitere Blocklisten hinzufügen könnt.
Do you wish to install the web admin interface? Wählt On, falls Ihr eine Administrator-Weboberfläche wünscht (empfohlen) und drückt EINGABE, um fortzufahren.
Do you wish to install the web server (lighttpd)? Wir werden Apache statt lighttpd als Webserver verwenden. Wählt also Off und bestätigt mit der LEERTASTE. Drückt anschließend auf EINGABE, um fortzufahren.
Do you want to log queries? Wählt On (empfohlen) und drückt auf EINGABE, um fortzufahren.
Select a privacy mode for FTL Wählt die gewünschte Datenschutzstufe aus und klickt auf ENTER, um fortzufahren:

Show everything: zeichnet alles auf; liefert die umfangreichsten Statistiken
Hide domains: Zeigt und speichert alle Domänen als "versteckt"; deaktiviert die Tabellen mit den Top Domänen und Top Werbungen auf dem Dashboard
Hide domains and clients: Zeigt und speichert alle Domänen als "versteckt" und alle Client-Geräte als "0.0.0.0"; deaktiviert alle Tabellen auf dem Dashboard
Anonymous mode: Deaktiviert im Grunde alles außer den anonymen Live-Statistiken; es wird kein Verlauf in der Datenbank gespeichert, nichts wird im Abfrageprotokoll angezeigt, es gibt keine Top-Item-Listen; bietet einen verbesserten Datenschutz
Installation Complete! Sobald die Installation abgeschlossen ist, solltet Ihr Folgendes sehen:

Pi-hole Installation

Weboberfläche

Als nächstes richten wir einen Apache Virtual Host als Reverse Proxy ein, um auf die Pi-hole-Weboberfläche zuzugreifen. Klingt kompliziert, aber im Wesentlichen ist der Reverse Proxy dazu da, Euren Server noch stärker vom Internet abzuschirmen. Mehr dazu erfahrt Ihr am Ende dieses Abschnitts.

Legt die richtigen Zugriffsrechte fest:

sudo chown www-data:www-data -R /var/www/html/admin/
sudo usermod -aG pihole www-data
sudo chown -R pihole:pihole /etc/pihole

Erstellt eine Apache-Konfigurationsdatei::

sudo vi /etc/apache2/sites-available/mypihole.gofoss.duckdns.org.conf

Fügt den folgenden Inhalt hinzu und passt die Einstellungen an Eure eigene Konfiguration an, z. B. den Domain-Namen (mypihole.gofoss.duckdns.org), den Pfad zu den SSL-Schlüsseln, die IP-Adressen und so weiter:

<VirtualHost *:80>

    ServerName              mypihole.gofoss.duckdns.org
    ServerAlias             www.mypihole.gofoss.duckdns.org
    Redirect permanent /    https://mypihole.gofoss.duckdns.org/

</VirtualHost>

<VirtualHost *:443>

    ServerName              mypihole.gofoss.duckdns.org
    ServerAlias             www.mypihole.gofoss.duckdns.org
    ServerSignature         Off

    SSLEngine               On
    SSLProxyEngine          On
    SSLProxyCheckPeerCN     Off
    SSLCertificateFile      /etc/dehydrated/certs/gofoss.duckdns.org/fullchain.pem
    SSLCertificateKeyFile   /etc/dehydrated/certs/gofoss.duckdns.org/privkey.pem
    DocumentRoot            /var/www/html/admin

    <Location />
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        Allow from 192.168.1.0/24
        Allow from 10.8.0.1/24
    </Location>

    <Directory /var/www/html/admin/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/mypihole.gofoss.duckdns.org-error.log
    CustomLog ${APACHE_LOG_DIR}/mypihole.gofoss.duckdns.org-access.log combined

</VirtualHost>

Speichert und schließt die Datei (:wq!).

Beachtet, dass die SSL-Verschlüsselung mit der Anweisung SSLEngine On aktiviert und das zuvor erstellte SSL-Zertifikat /etc/dehydrated/certs/gofoss.duckdns.org/fullchain.pem sowie der private SSL-Schlüssel /etc/dehydrated/certs/gofoss.duckdns.org/privkey.pem verwendet wurden.

Aktiviert als nächstes den Apache Virtual Host (passt die Domäne entsprechend an) und ladet Apache neu:

sudo a2ensite mypihole.gofoss.duckdns.org.conf
sudo systemctl reload apache2

Startet Pi-hole neu und prüft, ob alles korrekt läuft. Die Ausgabe sollte "Active" anzeigen:

sudo systemctl restart pihole-FTL
sudo systemctl status pihole-FTL

Pi-hole konfigurieren

Ändert das Standardpasswort für die Pi-hole-Weboberfläche. Gebt ein sicheres, individuelles Passwort an:

sudo pihole -a -p

Ruft http://192.168.1.100/admin/ auf und meldet Euch mit den neuen Zugangsdaten an. Passt dabei die IP-Adresse des Servers an Eure eigenen Einstellungen an. Die Weboberfläche sollte auf Eurem Bildschirm erscheinen. Sie ermöglicht verschiedentliche Einstellungen, die auf Pi-holes Webseite näher beschrieben werden:

Menü-Eintrag Beschreibung
Gravity Ruft den Eintrag Tools ‣ Update Gravity auf, um die Blocklisten zu aktualisieren. Ein wenig Geduld ist gefragt, das kein ein paar Sekunden dauern.
Dashboard Zeigt Statistiken an: wie viele Domänen besucht oder blockiert wurden, wie viele Domänen sich auf der Blockliste befinden, usw.
Queries Detaillierte Informationen zu Anfragen.
Blocklists Ruft den Eintrag Group management ‣ Adlists auf, um weitere Blocklisten hinzuzufügen und zusätzliche Werbung und Schadprogramme zu filtern. Weitere Informationen zu Pi-hole-Blocklisten findet Ihr am Ende dieses Abschnitts.
Settings Von hier aus kann Pi-hole verwaltet und konfiguriert werden: DNS-Server, Datenschutz, usw.
Local DNS Pi-hole ist in der Lage, lokale Adressen aufzulösen. Ruft dazu den Menü-Eintrag Local DNS ‣ DNS Records auf und fügt die folgende Domäne/IP-Kombination hinzu (passt den Eintrag entsprechend Eurer eigenen Einstellungen an):

Domain: mypihole.gofoss.duckdns.org
IP Address: 192.168.1.100

Hier geht's zum 3-minütigen Zusammenfassungsvideo

Übergangslösung für Ubuntu 22.04

Zum Zeitpunkt des Verfassens dieser Zeilen wird Ubuntu 22.04 offiziell nicht von Pi-hole 5.10 unterstützt. Aus diesem Grund funktioniert das übliche Pi-hole-Installationsskript nicht korrekt. Als vorübergehende Abhilfe könnt Ihr stattdessen die folgenden Befehle ausführen:

sudo bash
curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true bash

Vergesst nicht, die Bash-Shell zu beenden, sobald die Installation erfolgreich abgeschlossen ist. Gebt dazu einfach folgenden Befehl ein, sobald Pi-hole installiert ist:

exit
Hier erfahrt Ihr mehr zu DNS und Datenschutz

DNS

Im Internet hat jeder Computer seine eigene [IP-Adresse](https://de.wikipedia.org/wiki/IP-Adresse). Da diese IP-Adressen nicht leicht zu merken sind, wurde das *Domain Name System* ([DNS](https://de.wikipedia.org/wiki/Domain_Name_System)) erfunden. Es funktioniert ein bisschen wie bei den ehemaligen Telefonzentralen: Jedes Mal, wenn Ihr die Adresse einer Webseite eingebt, sucht ein sogenannter DNS-Auflöser nach der entsprechenden IP und verbindet Euer Gerät mit dem passenden Rechner/Server. DNS spielt also eine Schlüsselrolle beim Surfen im Internet. Da jedoch alles automatisch abläuft, vergessen die Nutzer oft, dass DNS-Abfragen ein Datenschutz-Risiko darstellen:

Risiken Beschreibung
Aufzeichnung DNS-Auflöser zeichnen jede Webseite auf, die Ihr besucht. Je nachdem, welchen DNS-Auflöser Ihr nutzt — oder vielmehr, welcher Euch auferlegt wurde — erfassen Google, Cloudflare, Euer Internet- bzw. Telekom-Anbieter oder andere Drittanbieter eine Liste aller Webseiten, die Ihr besucht. Ob Euer Datenverkehr über HTTPS verschlüsselt ist oder nicht, spielt hierbei keine Rolle.
Keine Verschlüsselung DNS-Anfragen sind meist unverschlüsselt. Selbst wenn Ihr Eurem DNS-Auflöser blind vertrauen solltet, könnt Ihr theoretisch von Dritten abgehört oder manipuliert werden (Spoofing-Angriff).
Zensur Internet-Anbieter können ebenfalls Eure Onlineaktivitäten zensieren, indem sie DNS-Anfragen überwachen.

Mit Pi-hole könnt Ihr selbst wählen, welchem DNS-Anbieter Ihr beim Surfen im Internet vertrauen wollt. Hier einige datenschutzfreundlichere DNS-Anbieter:

DNS-Anbieter Land DNS #1 DNS #2 Datenschutz
Digitalcourage Deutschland 5.9.164.112 -- Datenschutz
UncensoredDNS Dänemark 89.233.43.71 91.239.100.100 Datenschutz
Dismail Deutschland 80.241.218.68 159.69.114.157 Datenschutz
DNS Watch Deutschland 84.200.69.80 84.200.70.40 --
FDN Frankreich 80.67.169.12 80.67.169.40 --
OpenNIC Verschiedentlich Verschiedentlich Verschiedentlich Verschiedentlich

Hier erfahrt Ihr mehr zu Werbeblockern

Pi-hole filtert den Internetverkehr und blockiert Werbung oder Tracker auf Euren Geräten, ohne dass Ihr zusätzliche Software benötigt. Über die Pi-hole-Weboberfläche könnt Ihr Blocklisten hinzufügen, um zusätzliche Werbung und Schadprogramme zu filtern. Beachtet jedoch, dass Pi-Hole keine Werbung in YouTube-Videos blockiert (dafür benötigt Ihr uBlock Origin).

Blocklisten Beschreibung
Standardlisten • https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
• https://mirror1.malwaredomains.com/files/justdomains
• http://sysctl.org/cameleon/hosts
• https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
• https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
• https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
Werbung • https://adaway.org/hosts.txt
• https://v.firebog.net/hosts/AdguardDNS.txt
• https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
• https://v.firebog.net/hosts/Easylist.txt
• https://raw.githubusercontent.com/StevenBlack/hosts/master/data/SpotifyAds/hosts
• https://raw.githubusercontent.com/StevenBlack/hosts/master/data/UncheckyAds/hosts
Tracking & Telemetrie • https://v.firebog.net/hosts/Airelle-trc.txt
• https://v.firebog.net/hosts/Easyprivacy.txt
• https://v.firebog.net/hosts/Prigent-Ads.txt
• https://raw.githubusercontent.com/StevenBlack/hosts/master/data/tyzbit/hosts
Böswillige Webseiten • https://v.firebog.net/hosts/Airelle-hrsk.txt
• https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt
• https://mirror1.malwaredomains.com/files/justdomains
• https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt
• https://www.malwaredomainlist.com/hostslist/hosts.txt
• https://bitbucket.org/ethanr/dns-blacklists/raw/8575c9f96e5b4a1308f2f12394abd86d0927a4a0/bad_lists/Mandiant_APT1_Report_Appendix_D.txt
• https://v.firebog.net/hosts/Prigent-Malware.txt
• https://v.firebog.net/hosts/Prigent-Phishing.txt
• https://v.firebog.net/hosts/Shalla-mal.txt
• https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Risk/hosts

Hier erfahrt Ihr mehr zu Reverse Proxies

Ein Reverse Proxy ist eine Anwendung, die zwischen einem auf Eurem Server laufenden Dienst und dem Internet sitzt. Alle auf unserer Webseite vorgestellten Dienste, einschließlich Pi-hole, werden als Apache Virtual Hosts hinter einem Reverse Proxy eingerichtet. Dies ermöglicht es:

  • zu verhindern, dass Euer Server direkt dem Internet ausgesetzt ist
  • mehrere Dienste nebeneinander auf Eurem Server laufen zu lassen
  • die Anzahl der offenen Ports zu minimieren (in der Regel auf die Ports 80 und 443 beschränkt)
  • Dienste über benutzerdefinierte, lokale Adressen zu erreichen, statt über irgendwelche IP-Adressen oder Portnummern
  • SSL-Zertifikate einfach zu verwalten
  • verschiedene Sicherheitsrichtlinien, wie HTTP-Header, Benutzerauthentifizierung, Zugriffsbeschränkungen usw. einzurichten

Bei Ubuntu befinden sich die Konfigurationsdateien für Apache Virtual Hosts im Verzeichnis etc/apache2/sites-available. Die Struktur dieser Dateien sieht mehr oder weniger wie folgt aus:

<VirtualHost *:80>

    ServerName              example.com                         # Adresse des Dienstes
    ServerAlias             www.example.com                     # Adresse des Dienstes, einschließlich www-Subdomäne
    Redirect permanent /    https://example.com/                # Umleitung des gesamten nicht verschlüsselten http:// Datenverkehrs auf verschlüsselten https:// Datenverkehr

</VirtualHost>

<VirtualHost *:443>

    ServerName              example.com                         # Adresse des Dienstes
    ServerAlias             www.example.com                     # Adresse des Dienstes, einschließlich www-Subdomäne
    ServerSignature         Off                                 # Serverinformationen verbergen

    SSLEngine               On                                  # SSL/TLS-Protokoll verwenden
    SSLProxyEngine          On                                  # SSL/TLS-Protokoll für den Proxy verwenden
    SSLCertificateFile      /path/to/fullchain.pem              # Speicherort der SSL-Zertifikatsdatei im PEM-Format
    SSLCertificateKeyFile   /path/to/privkey.pem                # Speicherort des PEM-kodierten privaten SSL-Schlüssels

    DocumentRoot            /var/www/example                    # Verzeichnis, aus dem Apache Dateien bereitstellt

    <Location />                                                # Beschränkung des Server-Zugriffs auf das Heimnetzwerk (LAN) und VPN
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        Allow from 192.168.1.0/24
        Allow from 10.8.0.1/24
    </Location>

    <Directory /var/www/example>
        Options -Indexes +FollowSymLinks                        # Verzeichniseinträge verhindern und symbolischen Links folgen
        AllowOverride All                                       # Direktiven aus der .htaccess-Datei, die Konfigurationsdirektiven außer Kraft setzen können
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log            # Log-Dateien
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined # Log-Dateien

</VirtualHost>

Der virtuelle Host wird mit dem Befehl sudo a2ensite example.com aktiviert. Mit dem Befehl sudo apachectl configtest könnt Ihr vorab prüfen, ob Syntaxfehler vorhanden sind.

Hier erfahrt Ihr mehr zu Pi-hole-Terminalbefehlen

Ein Großteil der Einstellungen für Pi-hole kann über die Weboberfläche abgewickelt werden. Alternativ könnt Ihr Pi-hole auch direkt auf dem Server über das Terminal konfigurieren. Die vollständige Befehlsliste findet Ihr auf der Pi-hole-Webseite:

Befehle Beschreibung
pihole status Zeigt den Status von Pi-hole an.
pihole -t tail log Zeigt die Echtzeit-Protokollierung an.
pihole -c Zeigt Statistiken an.
pihole -w -l Zeigt die Domänen auf der Positivliste an.
pihole -w example.com Fügt example.com zur Positivliste hinzu.
pihole -w -d example.com Entfernt example.com von der Positivliste.
pihole -b -l Zeigt die Domänen auf der Negativliste an.
pihole -b example.com Fügt example.com zur Negativliste hinzu.
pihole -b -d example.com Entfernt example.com von der Negativliste.
pihole -up Aktualisiert Pi-hole.
pihole -l off Aktiviert die Protokollierung von Anfragen.
pihole -l on Deaktiviert die Protokollierung von Anfragen.
pihole enable Aktiviert Pi-hole.
pihole disable Deaktiviert Pi-hole.
pihole disable 10m Deaktiviert Pi-hole für 10 Minuten.
pihole disable 60s Deaktiviert Pi-hole für 60 Sekunden.
pihole uninstall Deinstalliert Pi-hole.


OpenVPN installieren

Sicherer Fernzugriff mit OpenVPN

Bislang ist der Server nur von Eurem Heimnetzwerk aus zugänglich, da er durch eine Firewall vom Internet abgeschirmt ist. Um einen Fernzugriff zu ermöglichen könntet Ihr mehrere "Löcher" in die Firewall stanzen und so für jeden einzelnen Dienst Ports von Eurem Router an den Server weiterzuleiten. Damit wären jedoch mehrere Ports dem Internet ausgesetzt, was wiederum Angreifern eine größere Angriffsfläche bietet, um in Euer Netzwerk einzudringen.

Ein virtuelles privates Netzwerk (VPN) ermöglicht es, sich relativ risikofrei von jedem Ort der Welt aus mit Eurem Server zu verbinden. Es wird nur ein einziger Port offengelegt, und es werden nur vorab genehmigte Verbindungen zugelassen, für die sowohl ein Zertifikat als auch ein Passwort erforderlich sind. Untenstehend findet Ihr eine ausführliche Anleitung.

Hier geht's zur Schritt-für-Schritt-Anleitung

OpenVPN installieren

OpenVPN ist quelloffen und verwendet OpenSSL, TLS und zahlreiche weitere Sicherheitsmechanismen. Es kann mit einem einfachen Installationsskript eingerichtet werden:

wget https://git.io/vpn -O openvpn-install.sh
sudo bash openvpn-install.sh

Folgt den Anweisungen auf dem Bildschirm:

Anweisung Beschreibung
What is the public IPv4 address or hostname? Gebt Eure öffentliche IPv4-Adresse an, die Ihr z.B. auf whatsmyip.org ermitteln könnt. Zum Zwecke dieses Tutorials nehmen wir an, dass Eure öffentliche IP-Adresse 88.888.88.88 ist (passt dies entsprechen an).
Which protocol do you want for OpenVPN connections? Wählt das empfohlene UDP-Protokoll aus.
What port do you want OpenVPN listening to? Wählt einen Port. Im Rahmen dieses Tutorials verwenden wir den Standardport 1194.
Which DNS do you want to use with the VPN? Da Pi-hole als DNS-Server verwendet wird, wählt die Option Current system resolvers.
Finally, tell me your name for the client certificate. Gebt Eurem ersten VPN-Client-Zertifikat einen Namen, z.B. computer_vpn (passt den Namen entsprechend an).

Sobald die Installation abgeschlossen ist, sollte das Terminal in etwa so aussehen:

Welcome to this OpenVPN road warrior installer!

I need to ask you a few questions before starting setup.
You can use the default options and just press enter if you are ok with them.

This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [88.888.88.88]: 88.888.88.88

What IPv6 address should the OpenVPN server use?
    1) 1a00:a0a:10a:10a0:a00:00ff:faf0:a011
    2) 1a00:a0a:10a:10a0:a00:00bb:faf0:a022
IPv6 address [1]: 1

Which protocol do you want for OpenVPN connections?
1) UDP (recommended)
2) TCP
Protocol [1]: 1

What port do you want OpenVPN listening to?
Port [1194]: 1194

Which DNS do you want to use with the VPN?
1) Current system resolvers
2) 1.1.1.1
3) Google
4) OpenDNS
5) NTT
6) AdGuard
DNS [1]: 1

Finally, tell me a name for the client certificate.
Client name [client]: computer_vpn

We are ready to set up your OpenVPN server now.

[etc.]

Finished!

The client configuration is available in: /root/computer_vpn.ovpn
New clients can be added by running this script again.

Zertifikate

Ein erstes VPN-Client-Zertifikat, computer_vpn.ovpn, wurde während der Installation von OpenVPN erstellt. Ihr braucht ein Zertifikat pro Gerät, das sich mit dem Server verbinden soll: Desktop-Rechner, Laptops, Tabletts, Telefone usw. Erstellt so viele Zertifikate wie nötig, indem Ihr das Installationsskript erneut ausführt.

Für die Zwecke dieses Tutorials erstellen wir ein zweites Zertifikat mit dem Namen phone_vpn.ovpn. Natürlich könnt Ihr jeden beliebigen Namen für Eure Zertifikate wählen. Stellt nur sicher, dass Ihr die Befehle entsprechend anpasst:

sudo bash openvpn-install.sh

Das Terminal sollte in etwa folgendes anzeigen:

Looks like OpenVPN is already installed.

What do you want to do?
1) Add a new user
2) Revoke an existing user
3) Remove OpenVPN
4) Exit
Select an option: 1

Tell me a name for the client certificate.
Client name: phone_vpn

[...]

Write out database with 1 new entries
Data Base Updated

Client phone_vpn added, configuration is available at: /root/phone_vpn.ovpn

Verschiebt schließlich das/die Zertifikat(e) in den gofossadmin-Home-Ordner und legt die richtigen Berechtigungen fest:

cd
sudo mv /root/computer_vpn.ovpn .
sudo mv /root/phone_vpn.ovpn .
sudo chmod 755 *.ovpn
sudo chown gofossadmin:gofossadmin *.ovpn

OpenVPN konfigurieren

Öffnet den Port 1194 (UDP) bzw. den Port, den Ihr bei der Installation von OpenVPN angegeben habt:

sudo ufw allow 1194/udp

Vergewissert Euch, dass der Port erfolgreich zu den Firewall-Regeln hinzugefügt wurde:

sudo ufw status numbered

Überprüft, ob die virtuelle Schnittstelle tun0 funktioniert, und ermittelt den Namen des Standardsubnetzes:

ip ad | grep tun0

Ermittelt die IP-Adresse des OpenVPN-Servers:

ip route | grep tun0

Vergewissert Euch, dass der Datenverkehr über den VPN-Tunnel geleitet wird:

sudo apt install traceroute
traceroute 10.8.0.1

Als nächstes werden die Client-Geräte, die sich über VPN verbinden wollen, dazu aufgefordert Pi-hole als primären DNS-Server zu verwenden. Bearbeitet dazu die OpenVPN-Konfigurationsdatei:

sudo vi /etc/openvpn/server/server.conf

Kommentiert alle vorhandenen dhcp-option-Einstellungen aus (setzt dazu ein Hashtag # an den Anfang der jeweiligen Zeile) und ersetzt sie durch die Schnittstelle tun0:

#push "dhcp-option DNS XX.XX.XXX.XXX"
#push "dhcp-option DNS XX.XX.XXX.XXX"
push "dhcp-option DNS 10.8.0.1"

Startet den OpenVPN-Server neu:

sudo systemctl restart openvpn-server@server

Ruft die Pi-hole-Weboberfläche auf, in unserem Beispiel über http://192.168.1.100/admin (passt die Adresse entsprechend an). Ruft anschließend den Menü-Eintrag Settings ‣ DNS ‣ Interface settings auf und wählt die Option Permit all origins. Klickt anschließend auf Save.

Router-Einstellungen

Überprüft die Einstellungen Eures Routers und stellt sicher, dass:

  • der von OpenVPN verwendete Port korrekt weitergeleitet wird (in unserem Beispiel Port 1194, passt dies entsprechend an). Weitere Informationen findet Ihr im Handbuch des Routers
  • der Port 53 geschlossen ist. mit den Werkzeugen der Gibson Research Corporation nach offenen Ports suchen: Wählt Proceed ‣ All service ports und stellt sicher, dass Port 53 nicht als open erscheint

Clients

Nur Geräte mit gültigen Zertifikaten können eine VPN-Verbindung aufbauen und sicher auf selbst gehostete Dienste zugreifen. Nachfolgend erfahrt Ihr, wie Ihr die zuvor erstellten Zertifikate vom Server auf Eure Geräte übertragt.

Wir gehen davon aus, dass auf Eurem Client-Gerät Ubuntu/Linux läuft und eine SSH-Anmeldung möglich ist. Öffnet ein Terminal auf dem Client-Gerät, wechselt zum Administrator-Benutzer (passt den Namen entsprechend an) und ruft alle Zertifikate vom Server ab:

su - gofossadmin
scp -v -P 2222 gofossadmin@192.168.1.100:/home/gofossadmin/*.ovpn .

Konfiguriert schließlich die Netzwerkverbindung des Client-Geräts:

Schritt Anweisungen
1 Klickt auf das Wifi-Symbol in der oberen Leiste.
2 Klickt auf Einstellungen.
3 Ruft den Menü-Eintrag Netzwerk auf.
4 Klickt auf das +-Symbol in der Rubrik VPN.
5 Wählt Aus Datei importieren.
6 Sucht nach dem Zertifikat (in unserem Beispiel computer_vpn.ovpn) und klickt auf Öffnen.
7 Klickt auf das Wifi-Symbol in der oberen Leiste.
8 Aktiviert die VPN-Verbindung computer_vpn.

Das war's! Euer Desktop-Gerät kann sich von jedem Ort der Welt aus sicher über VPN mit dem Server verbinden.

Öffnet F-Droid auf Eurem mobilen Gerät und installiert OpenVPN für Android.

Verbindet das mobile Gerät über USB mit dem Desktop-Gerät, mit dem Ihr alle Zertifikate vom Server abgerufen habt (siehe oben). Kopiert das passende Zertifikat auf das mobile Gerät (in unserem Beispiel heißt das Zertifikat phone_vpn.ovpn, passt den Namen entsprechend an).

Öffnt schließlich die OpenVPN-App auf Eurem mobilen Gerät und konfiguriert sie wie folgt:

Schritt Anweisung
1 Tippt auf das +-Symbol und dann Importieren.
2 Sucht nach dem Zertifikat (in unserem Beispiel phone_vpn.ovpn) und importiert es.

Das war's! Euer mobiles Gerät kann sich von jedem Ort der Welt aus sicher über VPN mit dem Server verbinden.


Abschließende Überprüfungen

Abschließende Überprüfungen

Nachdem Ihr alles eingerichtet habt, sollte der Datenverkehr wie folgt abgewickelt werden:

  • Jedes Mal, wenn eines Eurer Geräte eine Adresse aufruft, verbindet es sich erst mal sicher über VPN mit Eurem Server
  • Enthält die Adresse Werbung oder Tracker, blockiert Pi-hole diese Elemente
  • Verweist die Adresse auf einen selbst gehosteten Dienst, leitet Pi-hole die Anfrage auf dem Server weiter
  • Verweist die Adresse auf eine externe Webseite oder einen externen Dienst, leitet Pi-hole die Anfrage an einen vorgelagerten DNS-Server Eurer Wahl weiter (z.B. Digitalcourage, UncensoredDNS, usw.)
  • Der gesamte Datenverkehr wird über HTTPS verschlüsselt

Vergewissert Euch, dass alles reibungslos läuft:

  • Ruft ads-blocker.com oder cnn.com auf und überprüft, ob Werbung blockiert wird. Ihr könnt auch das Pi-hole-Dashboard unter https://mypihole.gofoss.duckdns.org auf blockierte Abfragen überprüfen (passt die URL entsprechend an)
  • Ruft einen lokalen Dienst wie https://mypihole.gofoss.duckdns.org auf und überprüft, ob die Adresse korrekt aufgelöst wird (passt die URL entsprechend an)
  • Ruft dnsleaktest.com oder bash.ws auf und stellt sicher, dass Ihr den richtigen Upstream-DNS-Auflöser verwendet


Unterstützung

Unterstützung

Weitere Einzelheiten findet Ihr in der Pi-hole Dokumentation, Let's Encrypt Dokumentation oder OpenVPN Dokumentation. Ihr könnt auch gerne die Pi-hole Gemeinschaft, Let's Encrypt Gemeinschaft oder OpenVPN Gemeinschaft um Hilfe bitten.

Google Ankündigung