Unbound als zentraler DNS-Server und Adblocker

Aus LinuxUser 05/2017

Unbound als zentraler DNS-Server und Adblocker

© Chavalit Kamolthamanon, 123RF

Gut gefiltert

Mit Unbound sorgen Sie für blitzschnelle Antworten auf DNS-Anfragen – und sperren bei Bedarf lästige Web-Werbung aus.

Das Domain Name System fungiert quasi als Telefonbuch des Internets. Mit Unbound [1] auf einem Raspberry Pi optimieren Sie den Einsatz des Protokolls für die Geräte im LAN. So sorgen Sie für kürzere Antwortzeiten, mehr Privatsphäre und schützen die Clients vor unerwünschter Werbung. Dabei steht der Dienst zentral für alle Geräte bereit.

Bei der Einwahl ins Internet schicken Provider in der Regel die Einträge für DNS-Server mit, die die Router automatisch übernehmen. Das genügt normalen Anwendern, die lediglich mit dem Browser unterwegs sind.

Wer jedoch die Grenzen des Möglichen austesten will, stößt schnell auf Probleme – etwa wenn die DNS-Server der Telekom für einen nicht existierenden Namen auf ihre Suchseite umleiten, anstatt die korrekte Fehlermeldung (NX_NODOMAIN) zu liefern. Was für einen surfenden Anwender praktisch erscheint, ist für einen automatischen Dienst nicht unbedingt erwünscht.

Solche Probleme lassen sich umgehen, indem Sie einfach die entsprechenden Einträge im Router ersetzen. Trotzdem müssen Sie weiterhin für jede Anfrage eine Verbindung zum externen DNS-Server aufbauen – obwohl vielleicht ein anderer Rechner im LAN dieselbe Abfrage zuvor bereits gestellt hat.

Hier hilft Unbound als DNS-Server mit eigenem Cache dabei, das Auflösen der Namen auf Trab zu bringen. Die Möglichkeit, beliebig viele Upstream-Server zu konfigurieren, bietet dabei mehr Sicherheit gegen Ausfälle.

Darüber hinaus dient das dem Schutz der Privatsphäre: Da die konfigurierten Server im Round-Robin-Verfahren zum Einsatz kommen, streuen Sie so die Abfragen über verschiedene Anbieter. Auf diese Weise erhält niemand einen vollständigen Überblick über abgefragten Adressen. Verwenden Sie ausschließlich DNSSEC-fähige Upstream-Server, sind Sie außerdem gut geschützt gegen gefälschte Antworten.

Unsere Schwesterzeitschrift Raspberry Pi Geek hat mit Pi-hole bereits ein ähnliches Projekt vorgestellt, dessen Fokus auf dem Blockieren von Werbung auf Webseiten liegt [2]. Diesen Teil deckt Unbound ebenfalls mit ab; eine entsprechende Liste mit zu blockierenden Einträgen aktualisieren Sie bei Bedarf sogar automatisch.

Im Vergleich zu Pi-hole kommt Unbound jedoch wesentlich schlanker daher: Es gibt keine grafische Oberfläche, die Konfiguration findet mit dem Editor statt. Die Abhängigkeiten fallen daher deutlich geringer aus.

Installation

Da sich Unbound in den Repos aller gängigen Distributionen findet, gelingt die Installation üblicherweise mithilfe der entsprechenden Werkzeuge zur Paketverwaltung. Fehlende Abhängigkeiten installiert das Paketmanagement dabei automatisch mit.

Im Verzeichnis /etc/unbound finden Sie die Konfiguration. Für dynamische und modulare Bestandteile lädt die Software alle Dateien aus dem Verzeichnis /etc/unbound/unbound.conf.d automatisch nach, was Sie sich im Folgenden zunutze machen.

Um das Programm als einfachen, puffernden DNS-Server nutzen zu können, bedarf es lediglich einer simplen Konfiguration, wie sie Listing 1 zeigt. Über interface: 0.0.0.0 weisen Sie die Software an, auf allen Schnittstellen zu lauschen, also sowohl Anfragen an localhost beziehungsweise 127.0.0.1 als auch von anderen Rechnern im Netz anzunehmen (Zeile 5).

Listing 1

## Simple recursive caching DNS
## unbound.conf -- https://calomel.org
#
server:
  interface: 0.0.0.0
    access-control: 10.0.0.0/16 allow
    access-control: 127.0.0.0/8 allow
    access-control: 192.168.0.0/16 allow
    verbosity: 1
forward-zone:
  name: "."
  # definitely censor free & log free with DNSSEC Support:
  forward-addr: 84.200.69.80   # DNS Watch
  forward-addr: 84.200.70.40   # DNS Watch
  forward-addr: 77.109.148.136 # Xiala.net
  forward-addr: 77.109.148.137 # Xiala.net
  forward-addr: 91.239.100.100 # censurfridns.dk
  forward-addr: 89.233.43.71   # censurfridns.dk

Mit access-control legen Sie fest, wer den Dienst benutzen darf. Je nachdem, welcher Adressbereich in Ihrem Netz zum Einsatz kommt, passen Sie hier die Daten an (Zeilen 6 bis 8).

Im Abschnitt forward-zone definieren Sie mit name: "." die Upstream-Server (Zeile 11ff.). Alle hier festgelegten Rechner kommen im Round-Robin-Verfahren zum Einsatz. Die drei Dienste im Beispiel (DNS Watch, Xiala.net, Censurfridns.dk) erfüllen wichtige Kriterien: Sie unterstützen DNSSEC, speichern keine Logs und zensieren keine Abfragen.

Mit dieser Konfiguration wären, abgesehen vom Blockieren der Werbung, alle eingangs genannten Kriterien abgedeckt. Um DNSSEC zu aktivieren und Unbound als verantwortlichen Server für das LAN zu nutzen, sind jedoch noch weitere Schritte notwendig. Zuerst einmal konfigurieren Sie Unbound mit den zentralen Root-Servern des DNS:

$ curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache

Außerdem benötigt die Software den Schlüssel für den Root-Server, den sie laut /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf in der Datei /var/lib/unbound/root.key erwartet. Existiert diese Datei noch nicht oder bleibt sie leer, sollte sie initial den Inhalt aus Listing 2 erhalten.

Listing 2

    . IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5

Sie verifizieren diesen Eintrag über die Webseite der Internet Assigned Numbers Authority (IANA) [3]. Außerdem fügen Sie noch ein, wo sich die root.hints befinden (Listing 3, Zeile 14). Die Konfigurationsdatei fällt nun ein wenig komplexer aus (Listing 3).

Listing 3

server:
  verbosity: 1
  interface: 0.0.0.0
  port: 53
  do-ip4: yes
  do-ip6: no
  do-udp: yes
  do-tcp: yes
  access-control: 10.0.0.0/16 allow
  access-control: 127.0.0.0/8 allow
  access-control: 192.168.0.0/16 allow
  root-hints: "/etc/unbound/root.hints"
  hide-identity: yes
  hide-version: yes
  harden-glue: yes
  harden-dnssec-stripped: yes
  use-caps-for-id: yes
  cache-min-ttl: 300
  cache-max-ttl: 86400
  prefetch: yes
  num-threads: 2
  forward-zone:
    name: "."
    # definitely censor free & log free with DNSSEC Support:
    forward-addr: 84.200.69.80   # DNS Watch
    forward-addr: 84.200.70.40   # DNS Watch
    forward-addr: 77.109.148.136 # Xiala.net
    forward-addr: 77.109.148.137 # Xiala.net
    forward-addr: 91.239.100.100 # censurfridns.dk
    forward-addr: 89.233.43.71   # censurfridns.dk

Jetzt lässt sich Unbound als zentrale Verwaltungsstelle für Geräte im lokalen Netz einsetzen, indem Sie den Inhalt von Listing 4 in die Konfiguration integrieren.

Listing 4

server:
  local-zone: "home.lan." static
  local-data: "firewall.home.lan.  IN A 10.0.0.1"
  local-data: "laptop.home.lan.    IN A 10.0.0.2"
  local-data: "xboxone.home.lan.   IN A 10.0.0.3"
  local-data: "ps4.home.lan.       IN A 10.0.0.4"
  local-data-ptr: "10.0.0.1  firewall.home.lan"
  local-data-ptr: "10.0.0.2  laptop.home.lan"
  local-data-ptr: "10.0.0.3  xboxone.home.lan"
  local-data-ptr: "10.0.0.4  ps4.home.lan"

Mit local-zone legen Sie fest, für welche Domain der Block gilt. Im Beispiel kommt home.lan für ein lokales Netzwerk zum Einsatz. Für jeden Host legen Sie anschließend mittels local-data einen Eintrag für den Forward Lookup an, also das Auflösen eines Namens in eine IP-Adresse. Mittels local-data-ptr ergänzen Sie einen Eintrag für den Reverse Lookup, also das Auflösen einer IP-Adresse in einen Namen [4].

Adblocker

Den geforderten Adblocker rüsten Sie nun recht einfach nach. Dazu laden Sie zunächst eine entsprechende Liste von Hosts herunter (Listing 5). Anschließend binden Sie diese Datei über einen entsprechenden Eintrag in der Konfiguration ein (Listing 6). Jetzt noch ein beherztes service unbound restart getippt, und die Arbeit ist getan.

Listing 5

$ curl -sS -L --compressed "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext" > /etc/unbound/unbound.conf.d/unbound_ad_servers

Listing 6

include: "/etc/unbound/unbound.conf.d/unbound_ad_servers"

Zwei Varianten

Damit Sie nicht alles von Hand abtippen müssen, haben wir die oben vorgestellten Beispiele für die Konfiguration auf der Heft-DVD beigelegt. Je nach Ihren Bedürfnissen wählen Sie für den Start entweder das Verzeichnis simple (einfacher, cachender DNS-Server, siehe Listing 1) oder complex (hier ist die Konfiguration mit Kommentaren versehen, damit Sie sich leichter zurechtfinden).

Es besteht die Möglichkeit, beide Varianten zu kombinieren, indem Sie etwa die localzone.conf aus dem Verzeichnis complex der einfachen Konfiguration hinzufügen – für einen einfachen, puffernden Nameserver mit Auflösung der lokalen Rechner.

Aktualisierungen

Das Aktualisieren der Software selbst übernimmt die Paketverwaltung. Um die root.hints sowie die Liste für den Adblocker kümmert sich dagegen ein Skript (Listing 7), das Sie am einfachsten via Cronjob aufrufen.

Listing 7

#!/bin/bash
# Updating Unbound resources.
# Place this into e.g. /etc/cron.monthly or /etc/cron.weekly
###[ unbound_ad_servers ]###
curl -sS -L --compressed "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext" > /etc/unbound/unbound.conf.d/unbound_ad_servers.new
if [[ $? -eq 0 ]]; then
  mv /etc/unbound/unbound.conf.d/unbound_ad_servers /etc/unbound/unbound.conf.d/unbound_ad_servers.bak
  mv /etc/unbound/unbound.conf.d/unbound_ad_servers.new /etc/unbound/unbound.conf.d/unbound_ad_servers
  unbound-checkconf >/dev/null
  if [[ $? -eq 0 ]]; then
    rm /etc/unbound/unbound.conf.d/unbound_ad_servers.bak
    service unbound reload >/dev/null
  else
    echo "Warning: Errors in unbound configuration due to probably failed update of"
    echo "/etc/unbound/unbound.conf.d/unbound_ad_servers:"
    unbound-checkconf
    mv /etc/unbound/unbound.conf.d/unbound_ad_servers /etc/unbound/unbound.conf.d/unbound_ad_servers.new
    mv /etc/unbound/unbound.conf.d/unbound_ad_servers.bak /etc/unbound/unbound.conf.d/unbound_ad_servers
  fi
else
  echo "Download of unbound_ad_servers list failed!"
fi
###[ root.hints ]###
curl -o /etc/unbound/root.hints.new https://www.internic.net/domain/named.cache
if [[ $? -eq 0 ]]; then
  mv /etc/unbound/root.hints /etc/unbound/root.hints.bak
  mv /etc/unbound/root.hints.new /etc/unbound/root.hints
  unbound-checkconf >/dev/null
  if [[ $? -eq 0 ]]; then
    rm /etc/unbound/root.hints.bak
    service unbound reload >/dev/null
  else
    echo "Warning: Errors in newly downloaded root.hints file probably due to incomplete download:"
    unbound-checkconf
    mv /etc/unbound/root.hints /etc/unbound/root.hints.new
    mv /etc/unbound/root.hints.bak /etc/unbound/root.hints
  fi
else
  echo "Download of unbound root.hints failed!"
fi

Diese Datei legen Sie einfach unter /etc/cron.weekly ab und vergeben entsprechende Rechte, damit das System sie ausführt (chmod 0755 unbound_updates.sh) – und schon gibt es wöchentlich frische Daten.

Wie Sie den neu eingerichteten Server im LAN bekannt machen, beschreibt der bereits erwähnte Artikel zu Pi-hole aus RPG 03-04/2017 ausführlich. Sie finden diesen Artikel auf der diesem Heft beiliegenden DVD als PDF.

Eine Besonderheit sei noch erwähnt: Verschiedene Modelle vom Typ Fritzbox des Anbieters AVM erlauben es nicht, wie im genannten Artikel beschrieben, einen lokalen DNS in den Haupteinstellungen festzulegen. Ein Beispiel dafür wäre die Fritzbox 7390 mit Firmware 6.51. Eine passende Einstellung findet sich hier dennoch, aber versteckt unter Heimnetz | Heimnetzübersicht | Netzwerkeinstellungen | IPv4 Adressen | Lokaler DNS-Server (Abbildung 1).

Abbildung 1: Obwohl die Fritzbox 7390 auf den ersten Blick keinen Eintrag für einen lokalen DNS-Server erlaubt, findet sich in den Tiefen der Oberfläche doch ein passender Punkt in der Konfiguration.

Abbildung 1: Obwohl die Fritzbox 7390 auf den ersten Blick keinen Eintrag für einen lokalen DNS-Server erlaubt, findet sich in den Tiefen der Oberfläche doch ein passender Punkt in der Konfiguration.

Fazit

Dank Unbound reduzieren Sie die Anzahl der DNS-Anfragen ins Netz, sorgen für mehr Datenschutz und sperren außerdem lästige Werbung aus dem lokalen Netzwerk aus. Dabei gestaltet sich die Konfiguration recht einfach, und mithilfe eines Mini-Rechners wie des Raspberry Pi lässt sich das Ganze bei Bedarf energiesparend ins LAN integrieren. 

Glossar

Upstream-Server

Externer Server, den Unbound konsultiert, wenn er eine Anfrage nicht selbst (etwa aus dem Cache oder aufgrund der Konfiguration) beantworten kann.

Round-Robin-Verfahren

Im Kontext von Unbound: Bei jeder Abfrage, deren Antwort noch nicht im Cache liegt, nutzt die Software jeweils der Reihe nach den nächsten Upstream-Server für die Anfrage.

DNSSEC

Bei den Domain Name System Security Extensions handelt es sich um eine Reihe von Standards, um beim Domain Name System (DNS) die Authentizität und Integrität der Daten zu gewährleisten.

Infos

  1. Unbound: http://unbound.net

  2. Pi-hole: Christoph Langner, “Ausgesiebt”, RPG 03-04/2017, S. 46, http://www.raspi-geek.de/38303

  3. Root-Anchors: https://data.iana.org/root-anchors/

  4. Individuelle DNS-Einträge für Hosts im LAN: https://www.bentasker.co.uk/documentation/linux/279-unbound-adding-custom-dns-records

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 05/2017 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben