Verbindet Euch sicher und von überall aus mit Eurem Server¶
Letzte Aktualisierung: Mai 2022. Für fortgeschrittene BenutzerInnen. Solide technische Kenntnisse erforderlich.
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¶
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.
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 verwaltet den Datenverkehr und blockiert Werbung¶
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: |
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
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. |
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ähltProceed ‣ All service ports
und stellt sicher, dass Port53
nicht alsopen
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¶
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¶
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.