1. Vorbereitung: Freigabe von Port 53
  2. Workaround zu Temporary failure in name resolution
  3. Deployment über Portainer
  4. Zugriff auf die Weboberfläche für die Erstkonfiguration:
  5. Konfiguration des AdGuard Home Servers in der Fritzbox:
  6. Primäre DNS-Server in AdGuard Home
  7. Fallback-DNS-Server in AdGuard Home
  8. Bewertung der Ausfallsicherheit
  9. Warum Watchtower?
  10. Schritte zum Erstellen und Laden der .env-Datei
  11. Sicherheitsvorteile der .env-Datei
  12. Schlussfolgerung

In diesem Tutorial erkläre ich, wie Sie AdGuard Home, einen netzwerkweiten Werbeblocker, mithilfe von Docker und Portainer einrichten können. AdGuard Home arbeitet auf Netzwerkebene und blockiert Anzeigen sowie Tracker, bevor sie Ihr Netzwerk erreichen, und bietet dabei eine benutzerfreundliche Weboberfläche zur Verwaltung. Bitte beachten Sie, dass die Vorbereitungsschritte 1-3 als Grundlage für dieses Tutorial dienen, während die Schritte 4-6 nicht benötigt werden. Es wird empfohlen, Schritt 7 (Backup) nach dem Einrichten von WireGuard auf dem Pi zu befolgen, um Ihre Basiskonfiguration zu sichern.

Vorbereitung: Freigabe von Port 53

Bevor wir mit dem Deployment-Prozess beginnen, müssen wir sicherstellen, dass Port 53 für AdGuard Home verfügbar ist, da dieser Port standardmäßig vom systemd-resolved-Dienst auf Ihrem System verwendet wird. Befolgen Sie die nachstehenden Anweisungen, um Port 53 freizugeben:

Überprüfen Sie, welche Dienste auf Port 53 lauschen mit den folgenden Befehlen:

sudo netstat -tuln | grep 53
sudo lsof -i :53
Prüfung welche Dienste auf Port 53 lauschen

Stoppen und deaktivieren Sie systemd-resolved, falls es auf Port 53 lauscht:

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Stoppen und Deaktivieren des systemd-resolver Dienstes

Entfernen Sie den vorhandenen Link zu /run/systemd/resolve/stub-resolv.conf:

sudo rm /etc/resolv.conf

Workaround zu Temporary failure in name resolution

Überprüfen Sie den Inhalt von /etc/hostname:

cat /etc/hostname

Der Befehl sollte den Hostnamen Ihres Systems ausgeben, wahrscheinlich „ubuntu“.

Ausgabe der Datei: etc/hostname

Überprüfen Sie dann den Inhalt von /etc/hosts:

cat /etc/hosts
Ausgabe der Datei: /etc/hosts

Fügen Sie den Hostnamen zu Ihrer /etc/hosts Datei hinzu:

echo "127.0.1.1    ubuntu" > temp_hosts
sudo sh -c 'cat temp_hosts >> /etc/hosts'
rm temp_hosts
Workaround: Ubuntu Hostnamen in die Datei hosts hinzufügen

Erstellen Sie manuell eine resolv.conf mit öffentlichen DNS-Servern, wobei ich die DNS Resolver von Quad 9 und von Cloudflare empfehle:

echo "nameserver 9.9.9.9" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
Erstellung der resolv.conf mit den neuen Nameservern

Nach dem Abschluss dieser Vorbereitungsschritte können Sie fortfahren und den Docker Stack ohne Port-Konflikte deployen.

Deployment über Portainer

Die benötigte Docker Compose-Datei wird Ihnen in diesem Tutorial zur Verfügung gestellt. Sie müssen lediglich den Inhalt kopieren und in Portainer als neuen Stack einfügen. Diese Datei definiert die Services AdGuard Home und Watchtower sowie die benötigten Einstellungen für deren Betrieb.

  1. Öffnen Sie Portainer und klicken Sie in der Mitte auf „local“ und navigieren Sie dann im linken Menü zu „Stacks“.
  2. Klicken Sie auf „+ Add Stack“.
  3. Geben Sie Ihrem Stack einen Namen, z.B. „adguard-stack“, und fügen Sie den nachfolgenden Inhalt der bereitgestellten Docker-Compose Codes in das Feld „Web editor“ ein.
  4. Klicken Sie auf „Deploy the Stack“.
version: '3'

services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    ports:
      - "53:53/tcp"     # DNS
      - "53:53/udp"     # DNS
      - "8080:80/tcp"   # Web-UI (auf Port 8080 des Hosts)
      - "3000:3000/tcp" # Für Erstkonfiguration benötigt
    volumes:
      - ./adguard_work:/opt/adguardhome/work
      - ./adguard_conf:/opt/adguardhome/conf
    restart: always

volumes:
  adguard_work:
  adguard_conf:
AdGuard Docker-Compose Deployment

Zugriff auf die Weboberfläche für die Erstkonfiguration:

  • Öffnen Sie Ihren Webbrowser und geben Sie die folgende Adresse ein:
http://Ihre-lokale-Server-Adresse-des-Raspberry-Pi:3000

Ersteinrichtung von AdGuard Home:

  • Folgen Sie den Anweisungen auf der Weboberfläche zur Einrichtung von AdGuard Home.
Ersteinrichtung von AdGuard Home – Willkommensseite

Übernehmen Sie im zweiten Schritt die Einstellungen mit einem Klick auf Weiter.

Schnittstellenkonfiguration

Vergeben Sie im dritten Schritt einen Benutzernamen sowie ein sicheres Passwort.

Vergabe des Benutzernamens sowie weitere Konfigurationsinformationen

Zugriff auf AdGuard Home über Port 8080:

Nach der Ersteinrichtung können Sie auf AdGuard Home über den Port 8080 zugreifen:

http://Ihre-lokale-Server-Adresse-des-Raspberry-Pi:8080

Erste Anmeldung in das AdGuard Home Webinterface über Port 8080

Nun sollten Sie AdGuard Home erfolgreich eingerichtet und konfiguriert haben und können die Weboberfläche über Port 8080 für die weitere Verwaltung und Konfiguration nutzen.

Konfiguration des AdGuard Home Servers in der Fritzbox:

Um AdGuard Home effektiv zu nutzen, ist es ratsam, den AdGuard Home Server als lokalen DNS-Server in Ihrer Fritzbox zu konfigurieren. Auf diese Weise werden alle DNS-Anfragen im Netzwerk über AdGuard Home geleitet, wodurch Anzeigen und Tracker netzwerkweit blockiert werden.

  • Melden Sie sich an Ihrer Fritzbox an.
  • Navigieren Sie zu Heimnetz --> Netzwerk --> Netzwerkeinstellungen.
  • Scrollen Sie nach unten bis zum Abschnitt IPv4 Einstellungen.
  • Im Abschnitt „Lokaler DNS-Server“ geben Sie die IP-Adresse Ihres Raspberry Pi ein, auf dem AdGuard Home installiert ist.
  • Klicken Sie auf „Übernehmen“, um die Einstellungen zu speichern.
Hinzufügen des AdGuard Servers als lokalen DNS-Server zur Fritzbox

Vorteile:

  • Netzwerkweite Werbeblockierung: Durch die Weiterleitung aller DNS-Anfragen über AdGuard Home werden Anzeigen und Tracker auf allen Geräten im Netzwerk blockiert, ohne dass auf jedem einzelnen Gerät eine spezielle Software installiert werden muss.
  • Verbesserte Privatsphäre und Sicherheit: AdGuard Home bietet Schutz vor Tracking und Phishing, indem es den Zugriff auf bekannte schädliche Domains verhindert.
  • Benutzerfreundliche Weboberfläche: Mit der Weboberfläche von AdGuard Home können Sie leicht sehen, welche Anfragen blockiert werden, und bei Bedarf Ausnahmen hinzufügen.

Optimierung der Schutzwirkung:

Für eine umfassendere Schutzwirkung können Sie in AdGuard Home zusätzliche Sperrlisten hinzufügen. Dies erhöht die Anzahl der blockierten Anzeigen und Tracker und verbessert die allgemeine Netzwerkprivatsphäre.

Sperrlistenkonfiguration

Abschließendes Backup: Nachdem Sie AdGuard Home eingerichtet und konfiguriert haben, ist es eine gute Praxis, ein Backup Ihrer Konfigurationen zu erstellen. Hierbei verweisen wir auf das Backup-Tutorial unter den Vorbereitungsschritten, welches alle notwendigen Schritte zur Sicherung Ihrer microSD-Karte auf dem Raspberry Pi erläutert.

Empfehlung der Upstream-DNS-Server und Fallback-DNS-Server

Primäre DNS-Server in AdGuard Home

  1. 9.9.9.9 und 149.112.112.112 (Quad9): Diese Server bieten Sicherheit und Datenschutz. Sie sind bekannt für das Blockieren des Zugriffs auf bekannte schädliche Domains.
  2. tls://dns.quad9.net (Quad9 über DoT): Bietet zusätzliche Sicherheit durch Verschlüsselung der DNS-Anfragen.
  3. https://dns10.quad9.net/dns-query (Quad9 über DoH): Ähnlich wie DoT, aber nutzt HTTPS für die Verschlüsselung, was zusätzliche Sicherheit und Privatsphäre bietet.
  4. 1.1.1.1 (Cloudflare): Bekannt für seine Geschwindigkeit und Datenschutzrichtlinien. Cloudflare behauptet, keine IP-Adressen zu speichern und bietet schnelle Antwortzeiten.

Fallback-DNS-Server in AdGuard Home

  1. 1.0.0.1 (Cloudflare): Dient als zuverlässiger sekundärer DNS-Server, falls einer der primären Server ausfällt.
  2. tls://1dot1dot1dot1.cloudflare-dns.com (Cloudflare über DoT): Bietet eine verschlüsselte Alternative, falls die primären verschlüsselten Quad9-Server ausfallen sollten.

Bewertung der Ausfallsicherheit

  • Redundanz: Sie haben mehrere Server von zwei verschiedenen Anbietern (Quad9 und Cloudflare), was die Ausfallsicherheit erhöht. Wenn ein Anbieter ausfällt, können die Server des anderen Anbieters die Anfragen bearbeiten.
  • Verschlüsselung: Die Verwendung von DoT und DoH erhöht die Sicherheit Ihrer DNS-Anfragen, was besonders wichtig ist, wenn Sie Wert auf Datenschutz legen.
  • Geschwindigkeit und Leistung: Cloudflare ist bekannt für seine schnellen Antwortzeiten, während Quad9 zusätzliche Sicherheitsfunktionen bietet.

Warum Watchtower?

Watchtower ist ein essentielles Tool in Ihrer Docker-Umgebung, insbesondere bei der Verwendung von Portainer. Es überwacht Ihre laufenden Docker-Container und aktualisiert sie automatisch, wenn neue Images verfügbar sind. Das Command --cleanup sorgt zusätzlich dafür, dass alte Images nach dem Update gelöscht werden, um Speicherplatz zu sparen. Die Automatisierung des Update-Prozesses und das Sauberhalten Ihrer Docker-Umgebung sind der Grund, warum Watchtower auf keiner Portainer-Installation fehlen sollte.

Update: 10.11.2024 – Sicheres Deployment von Watchtower mit Umgebungsvariablen über Portainer

Mit Watchtower können Sie Ihre Docker-Container automatisch aktualisieren lassen. Diese Anleitung zeigt, wie Sie Watchtower über Portainer als Docker-Stack bereitstellen und sensible Informationen sicher in einer .env-Datei speichern. Durch das Auslagern der Zugangsdaten in eine .env-Datei bleiben Passwörter und andere sensible Informationen geschützt und werden nicht direkt im docker-compose.yml-Stack gespeichert.

  1. String-Quotes bei Umgebungsvariablen:
    • Vorteil: Das Angeben von Anführungszeichen (") um Zahlen und E-Mail-Adressen stellt sicher, dass sie korrekt als Strings und nicht als numerische Werte oder andere Typen interpretiert werden. Dies kann Fehler vermeiden, insbesondere wenn die YAML-Datei von unterschiedlichen Parsern verarbeitet wird.
  2. Labels für Security-Profile:
    • Neu: labels: - com.docker.security.seccomp.profile=default
    • Vorteil: Das Hinzufügen eines Security-Labels sorgt dafür, dass der Container mit einem standardisierten Sicherheitsprofil (seccomp) läuft. Dies bietet eine zusätzliche Sicherheitsebene, indem es bestimmte unsichere Systemaufrufe innerhalb des Containers blockiert.
  3. Ressourcenlimits:
    • Neu: deploy: resources: limits: cpus: '0.50' memory: 512M
    • Vorteil: Durch das Setzen von Ressourcenlimits (CPU und Speicher) wird verhindert, dass der Watchtower-Container zu viele Systemressourcen verbraucht. Dies hilft dabei, die Stabilität des Systems zu erhalten und sicherzustellen, dass andere Container genügend Ressourcen zur Verfügung haben.

Der folgende Docker Compose-Code wird verwendet, um Watchtower als Stack über Portainer zu deployen. Die Umgebungsvariablen wie E-Mail-Serverdaten werden aus einer .env-Datei geladen:

version: "3"
services:
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime:ro
    environment:
      WATCHTOWER_MONITOR_ONLY: ${WATCHTOWER_MONITOR_ONLY}
      WATCHTOWER_CLEANUP: ${WATCHTOWER_CLEANUP}
      WATCHTOWER_POLL_INTERVAL: ${WATCHTOWER_POLL_INTERVAL}
      WATCHTOWER_NOTIFICATIONS: ${WATCHTOWER_NOTIFICATIONS}
      WATCHTOWER_NOTIFICATION_EMAIL_FROM: ${WATCHTOWER_NOTIFICATION_EMAIL_FROM}
      WATCHTOWER_NOTIFICATION_EMAIL_TO: ${WATCHTOWER_NOTIFICATION_EMAIL_TO}
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER}
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER}
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD}
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT: ${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT}
      WATCHTOWER_NOTIFICATION_EMAIL_DELAY: ${WATCHTOWER_NOTIFICATION_EMAIL_DELAY}
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 512M
      labels:
        - com.docker.security.seccomp.profile=default

Schritte zum Erstellen und Laden der .env-Datei

  1. Erstellen Sie eine .env-Datei: Legen Sie eine neue Datei im Verzeichnis an, in dem Sie Ihre docker-compose.yml-Datei gespeichert haben, z. B. unter Desktop/watchtower.env. In diese Datei kopieren Sie die Umgebungsvariablen und ersetzen die Platzhalter mit Ihren eigenen Werten.
  2. Inhalt der .env-Datei: Die .env-Datei sollte die folgenden Umgebungsvariablen enthalten:
WATCHTOWER_MONITOR_ONLY=false
WATCHTOWER_CLEANUP=true
WATCHTOWER_POLL_INTERVAL=43200
WATCHTOWER_NOTIFICATIONS=email
WATCHTOWER_NOTIFICATION_EMAIL_FROM=your-email-from@example.com
WATCHTOWER_NOTIFICATION_EMAIL_TO=your-email-to@example.com
WATCHTOWER_NOTIFICATION_EMAIL_SERVER=your-email-server.example.com
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=your-email-user@example.com
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=your-email-password
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2

Erklärungen zu den Variablen:

  • WATCHTOWER_NOTIFICATION_EMAIL_FROM: Die E-Mail-Adresse, von der Benachrichtigungen gesendet werden sollen.
  • WATCHTOWER_NOTIFICATION_EMAIL_TO: Die E-Mail-Adresse, an die Benachrichtigungen gesendet werden sollen.
  • WATCHTOWER_NOTIFICATION_EMAIL_SERVER: Der SMTP-Server für den E-Mail-Versand.
  • WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER: Der Benutzername für den SMTP-Server.
  • WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD: Das Passwort für den SMTP-Server.
  • WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT: Der Port des SMTP-Servers (standardmäßig 587).
  • WATCHTOWER_NOTIFICATION_EMAIL_DELAY: Die Verzögerung in Sekunden für die Benachrichtigungen.

Hinweis für die Leser: Bitte ersetzen Sie die Platzhalter in den Umgebungsvariablen durch Ihre eigenen Werte:

  • your-email-from@example.com – Die E-Mail-Adresse, von der Benachrichtigungen gesendet werden sollen.
  • your-email-to@example.com – Die E-Mail-Adresse, an die Benachrichtigungen gesendet werden sollen.
  • your-email-server.example.com – Der SMTP-Server für den E-Mail-Versand.
  • your-email-user@example.com – Der Benutzername für den SMTP-Server.
  • your-email-password – Das Passwort für den SMTP-Server.
  • 587 – Der Port des SMTP-Servers (lassen Sie diesen Wert unverändert, es sei denn, Ihr Server verwendet einen anderen Port).

Laden der .env-Datei in Portainer:

  • Gehen Sie in Portainer zum Bereich „Stacks“ und wählen Sie den Stack aus, den Sie erstellen oder bearbeiten möchten.
  • Scrollen Sie nach unten zum Abschnitt Environment Variables.
  • Klicken Sie auf Load variables from .env file und wählen Sie die .env-Datei aus, die Sie erstellt haben (z. B. /Desktop/watchtower.env).
  • Portainer lädt nun automatisch alle Umgebungsvariablen aus der .env-Datei und wendet sie auf den Stack an.

Stack deployen:

  • Nachdem die .env-Datei geladen wurde, können Sie den Stack in Portainer bereitstellen oder aktualisieren.

Mögliche Auswirkungen: durch den Einsatz des Standard-Seccomp-Profils

  • Kompatibilität: Die meisten Standard-Containeranwendungen funktionieren problemlos mit dem Standard-Seccomp-Profil. Dennoch gibt es spezialisierte Anwendungen, die möglicherweise spezielle Systemaufrufe benötigen, die durch das Standard-Seccomp-Profil blockiert werden. In solchen Fällen müssen Sie das Profil möglicherweise anpassen oder ein anderes Sicherheitsprofil verwenden.
  • Leistung: Das Seccomp-Profil selbst hat in der Regel keine signifikanten Auswirkungen auf die Leistung. Es handelt sich um eine Sicherheitsmaßnahme, die auf Systemaufrufe wirkt, nicht auf die allgemeine Arbeitslast oder den Ressourcenverbrauch des Containers.

Das Label com.docker.security.seccomp.profile=default kann sicher auf die meisten Ihrer Container-Stacks angewendet werden, um deren Sicherheit zu erhöhen. Es wird empfohlen, dies zu tun, es sei denn, es gibt spezifische Gründe oder Kompatibilitätsprobleme, die dagegen sprechen. Testen Sie die Anwendung Ihrer Stacks nach der Implementierung des Labels, um sicherzustellen, dass alle Funktionen wie erwartet arbeiten.

Sicherheitsvorteile der .env-Datei

  • Schutz sensibler Daten: Durch das Speichern von Passwörtern und Zugangsdaten in der .env-Datei bleiben diese außerhalb der docker-compose.yml-Datei. So wird vermieden, dass diese Informationen versehentlich in Versionskontrollsysteme (z. B. Git) oder freigegebene Konfigurationsdateien gelangen.
  • Einfache Verwaltung: Änderungen an Zugangsdaten oder Konfigurationen können direkt in der .env-Datei vorgenommen werden, ohne die docker-compose.yml-Datei ändern zu müssen.
  • Bessere Kontrolle: Da die .env-Datei lokal auf Ihrem Server gespeichert ist, kann der Zugriff auf diese Datei leichter eingeschränkt und kontrolliert werden.

Durch diese Methode bleibt Ihre Konfiguration sicher und flexibel. Mit dem Einsatz der .env-Datei können Sie Watchtower und andere Docker-Stacks sicherer und effizienter verwalten.

Schlussfolgerung

Mit AdGuard Home haben Sie nun einen leistungsstarken, netzwerkweiten Werbeblocker in Ihrem Netzwerk. Die einfache Verwaltung über die Weboberfläche sowie die automatisierte Aktualisierung Ihrer Container über Watchtower sorgen für eine unkomplizierte Handhabung und Wartung. Für Fragen oder Anregungen stehe ich Ihnen gerne in den Kommentaren zur Verfügung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert