GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Richten Sie die Response Policy Zone (RPZ) im BIND-Resolver unter Debian/Ubuntu ein

Dieses Tutorial zeigt Ihnen, wie Sie öffentliche DNS-Einträge in Ihrem BIND-DNS-Resolver mit Antwortrichtlinienzone überschreiben (RPZ) auf Debian/Ubuntu.

Was ist die Reaktionsrichtlinienzone?

Antwortrichtlinienzone (RPZ) ermöglicht es einem DNS-Resolver, DNS-Einträge zu ändern. Es wurde ursprünglich entwickelt, um den Zugriff auf gefährliche Websites zu blockieren. Wenn ein Computer beispielsweise die IP-Adresse einer bekanntermaßen gefährlichen Website abfragt, die Malware verbreitet, kann der DNS-Resolver 127.0.0.1 zurückgeben als DNS-Antwort, sodass der Computer keine Verbindung zu der gefährlichen Site herstellen kann. Dies ist der ursprüngliche Anwendungsfall. Daher wird die Reaktionsrichtlinienzone auch als DNS-Firewall bezeichnet .

Sie können RPZ auf andere Weise verwenden. Zum Beispiel

  • Wenn Sie selbst gehostete Dienste wie Nextcloud im lokalen Netzwerk haben, können Sie RPZ verwenden, um Ihre Nextcloud-Domain (nextcloud.your-domain.com) auf die lokale IP-Adresse zu verweisen, sodass Sie nicht ausgehen müssen mit dem Internet und gehen Sie dann zurück zu Ihrem lokalen Netzwerk, um auf den Nextcloud-Server zuzugreifen.
  • Eltern können mit RPZ verhindern, dass ihre Kinder auf Pornoseiten zugreifen.
  • Sie können unerwünschte Werbung blockieren.
  • Ich installiere viele Webanwendungen auf meinem VPS. Wenn die Web-App nicht für den öffentlichen Zugriff bestimmt ist, füge ich den DNS-Eintrag nur in BIND RPZ hinzu und veröffentliche keinen DNS-Eintrag bei meinem Domain-Registrar, um Hacking zu verhindern.

Ja, Sie können einen DNS-Eintrag in /etc/hosts erstellen Datei auf dem lokalen Computer, um öffentliche DNS-Einträge zu überschreiben, aber sie lässt sich nicht gut skalieren. Außerdem erlauben es iOS und Android nicht, lokale DNS-Einträge zu erstellen. Wäre es nicht schön, wenn der BIND-DNS-Resolver den öffentlichen DNS-Eintrag überschreibt, sodass alle Geräte im Netzwerk, die den BIND-Resolver verwenden, den benutzerdefinierten DNS-Eintrag verwenden können?

Voraussetzungen

Um diesem Tutorial zu folgen, wird davon ausgegangen, dass auf Ihrem Debian/Ubuntu-Server ein BIND-DNS-Resolver ausgeführt wird. Wenn nicht, lesen Sie bitte eines der folgenden Tutorials, um den BIND-Resolver einzurichten.

  • Richten Sie Ihren eigenen BIND9-DNS-Resolver auf Debian 10 Buster ein
  • Richten Sie Ihren eigenen BIND9-DNS-Resolver auf Ubuntu 16.04/18.04 ein
  • Richten Sie Ihren eigenen BIND9-DNS-Resolver unter Ubuntu 20.04 ein

Sobald Ihr BIND-Resolver betriebsbereit ist, befolgen Sie die nachstehenden Anweisungen.

So richten Sie die BIND-Antwortrichtlinienzone auf einem Debian/Ubuntu-Server ein

Bearbeiten Sie zuerst die named.conf.options Datei.

sudo nano /etc/bind/named.conf.options

Fügen Sie die folgenden Zeilen in den options {...} hinzu -Klausel zum Aktivieren der Reaktionsrichtlinienzone. (Die erste Zeile ist ein Kommentar.)

//enable response policy zone. 
response-policy { 
    zone "rpz.local"; 
};

Speichern und schließen Sie die Datei. Öffnen Sie dann die named.conf.local Datei.

sudo nano /etc/bind/named.conf.local

Fügen Sie dieser Datei eine RPZ-Zone hinzu.

zone "rpz.local" {
    type master;
    file "/etc/bind/db.rpz.local";
    allow-query { localhost; };
    allow-transfer { 12.34.56.78; };
};

Hinweise:

  • Wichtig ist, dass Sie in der file anstelle eines einfachen Dateinamens einen absoluten Pfad verwenden Direktive, oder BIND würde davon ausgehen, dass sich die Datei in /var/cache/bind/ befindet .
  • RPZ-Zonen sollten nur Abfragen von localhost zulassen. Sie müssen keine lokalen Netzwerkclients hinzufügen.
  • Ersetzen Sie 12.34.56.78 mit der IP-Adresse des Slave-BIND-DNS-Resolvers, der Zonentransfers durchführen darf. Wenn es nur einen DNS-Resolver gibt, können Sie localhost verwenden etwa so:allow-transfer { localhost; };

Speichern und schließen Sie die Datei. Dann müssen wir die Zonendatei erstellen. Anstatt eine Zonendatei von Grund auf neu zu erstellen, können wir eine Zonenvorlagendatei verwenden. Kopieren Sie den Inhalt von db.empty in eine neue Datei.

sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local

Bearbeiten Sie dann die db.rpz Datei.

sudo nano /etc/bind/db.rpz.local

Es besteht keine Notwendigkeit, den bestehenden Inhalt zu ändern. Wir fügen einfach unsere benutzerdefinierten DNS-Einträge hinzu. Wenn Sie beispielsweise einen Nextcloud-Server im lokalen Netzwerk mit der IP-Adresse 192.168.0.103 haben, fügen Sie den folgenden DNS-Eintrag hinzu, damit Nextcloud-Clients nicht ins Internet gehen müssen, um sich mit dem Nextcloud-Server zu verbinden .

nextcloud.your-domain.com      A   192.168.0.103

Wenn Sie nicht möchten, dass Ihre Kinder Pornoseiten wie pornhub.com besuchen, fügen Sie dieser Datei die folgende Zeile hinzu, um die gesamte Domäne pornhub.com zu blockieren.

*.pornhub.com          CNAME  .

Wenn Sie keine Google Adsense-Anzeigen auf Webseiten sehen möchten, können Sie die folgende Zeile hinzufügen, um doubleclick.net zu blockieren Domain, die zur Bereitstellung von Adsense-Anzeigen verwendet wird.

*.doubleclick.net      CNAME   .

Hier sind einige weitere Ad-Server-Domains, die Sie blockieren können.

*.pubmatic.com        CNAME .
*.mopub.com           CNAME .
*.eskimi.com          CNAME .
*.adcolony.xyz        CNAME .
*.adsrvr.org          CNAME .
*.adsymptotic.com     CNAME .
*.servedby-buysellads.com CNAME .
srv.buysellads.com    CNAME .
*.powerinboxedge.com  CNAME .
*.defof.com           CNAME .
*.licasd.com          CNAME .
*.liadm.com           CNAME .

Um den MX-Eintrag für einen Domainnamen zu überschreiben, fügen Sie eine Zeile wie unten hinzu.

example.com         MX     0    mail.example.com.

Hinweis dass alle linken Namen NICHT mit einem Punkt enden dürfen und alle rechten Namen mit einem Punkt enden müssen.

Wenn Sie einen Lastenausgleich für einen Hostnamen benötigen, erstellen Sie einen Datensatz mit mehreren Werten wie unten. DNS-Clients verwenden die beiden IP-Adressen nach dem Zufallsprinzip und der Datenverkehr wird zwischen ihnen verteilt.

host.example.com         A              12.34.56.78
                         A              12.34.56.79

Speichern und schließen Sie die Datei. Es wird empfohlen, eine separate Protokolldatei für RPZ zu verwenden, um das Protokoll besser analysieren zu können. Bearbeiten Sie zum Konfigurieren die BIND-Hauptkonfigurationsdatei.

sudo nano /etc/bind/named.conf

Fügen Sie der Datei die folgenden Zeilen hinzu.

logging {
    channel rpzlog {
  	file "/var/log/named/rpz.log" versions unlimited size 100m;
    	print-time yes;
    	print-category yes;
    	print-severity yes;
    	severity info;
    };
    category rpz { rpzlog; };
};

Speichern und schließen Sie die Datei. Erstellen Sie dann /var/log/named/ Verzeichnis und machen Sie bind als Eigentümer.

sudo mkdir /var/log/named/
sudo chown bind:bind /var/log/named/ -R

Führen Sie als Nächstes den folgenden Befehl aus, um zu prüfen, ob Syntaxfehler in der Hauptkonfigurationsdatei vorhanden sind. Eine stille Ausgabe zeigt an, dass keine Fehler gefunden wurden.

sudo named-checkconf

Überprüfen Sie dann die Syntax der RPZ-Zonendateien.

sudo named-checkzone rpz /etc/bind/db.rpz.local

Wenn keine Fehler gefunden werden, starten Sie BIND9 neu.

sudo systemctl restart bind9

Jetzt können Sie dig ausführen Befehl auf dem BIND-Server, um zu sehen, ob RPZ funktioniert. Fragen Sie beispielsweise einen DNS-Eintrag eines Domänennamens ab, der in der Antwortrichtlinienzone enthalten ist.

dig A nextcloud.your-domain.com @127.0.0.1

Sie sollten in der Befehlsausgabe so etwas wie unten sehen, was darauf hinweist, dass die DNS-Antwort von der lokalen RPZ bereitgestellt wurde.

;; AUTHORITY SECTION:
rpz.local			86400	IN	NS	localhost.

Sie können auch das BIND9-Abfrageprotokoll überprüfen.

sudo tail /var/log/named/rpz.log

Sie würden so etwas wie unten sehen, was bedeutet, dass die Antwort von der lokalen RPZ geliefert wurde.

(example.com): rpz QNAME Local-Data rewrite example.com via example.com.rpz.local

Der Fedora-Client verwendet kein RPZ?

Standardmäßig verwendet Fedora kein RPZ. Sie können den dig verwenden Befehlszeilendienstprogramm, um die IP-Adresse eines Hostnamens in der RPZ-Zone zu finden, aber wenn Sie den Hostnamen anpingen, kann es die IP-Adresse nicht finden.

Um dieses Problem zu lösen, müssen Sie den hosts-Parameter in /etc/nsswitch.conf ändern Datei auf dem Fedora-Client.

sudo nano /etc/nsswitch.conf

Standardmäßig ist der hosts-Parameter wie folgt definiert:

hosts:   files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns

Ändern Sie es in:

hosts:   files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines

Speichern und schließen Sie die Datei. RPZ sollte jetzt funktionieren.

RPZ mit Forwardern verwenden

Wenn Sie eine fowarders hinzufügen Direktive wie unten in den options -Klausel in /etc/bind/named.conf.options Datei, dann wird Ihr BIND-Resolver zu einem Forwarder, der DNS-Anfragen an einen Upstream-DNS-Resolver wie 8.8.8.8 weiterleitet .

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        ...
};

Die Antwortrichtlinienzone funktioniert mit dieser Weiterleitungseinrichtung. Bind fragt zuerst die lokale Reaktionsrichtlinienzone ab. Wenn der DNS-Eintrag nicht in der RPZ gefunden wird, wird die Anfrage an einen Upstream-DNS-Resolver weitergeleitet. Möglicherweise möchten Sie einen Forwarder verwenden, um die DNS-Auflösung zu beschleunigen, wenn Ihr eigener BIND-Resolver zu viel Zeit mit dem Auflösen von DNS-Namen benötigt.

Zonenübertragung konfigurieren

Wenn Sie einen anderen BIND-DNS-Resolver haben, können Sie ihn als Slave-Resolver konfigurieren, um automatisch Updates vom Master-DNS-Resolver zu erhalten.

Zuerst müssen Sie die /etc/bind/named.conf.local bearbeiten Datei auf dem Master-DNS-Resolver .

sudo nano /etc/bind/named.conf.local

Fügen Sie die IP-Adresse des Slave-DNS-Resolvers zum allow-transfer hinzu Richtlinie.

zone "rpz.local" {
    type master;
    file "/etc/bind/db.rpz.local";
    allow-query { localhost; };
    allow-transfer { 12.34.56.78; };
    also-notify { 12.34.56.78; };
};

Wenn Sie mehrere Slave-DNS-Resolver haben, fügen Sie mehrere IP-Adressen wie unten hinzu.

 allow-transfer { 12.34.56.78; 12.34.56.79; };

Die also-notify -Anweisung bewirkt, dass der Master-DNS-Resolver eine Benachrichtigung an den Slave-Resolver sendet, wenn die RPZ-Zone geändert wird. Speichern und schließen Sie die Datei. Starten Sie BIND neu, damit die Änderungen wirksam werden.

sudo systemctl restart bind9

Wenn auf dem Master-DNS-Resolver eine Firewall ausgeführt wird, müssen Sie dem Slave-DNS-Resolver erlauben, sich mit Port 53 zu verbinden. Wenn Sie beispielsweise eine UFW-Firewall verwenden, führen Sie den folgenden Befehl aus.

sudo ufw insert 1 allow in from 12.34.56.78 to any port 53

Bearbeiten Sie als Nächstes die named.conf.options Datei auf dem Slave-DNS-Resolver .

sudo nano /etc/bind/named.conf.options

Fügen Sie die folgenden Zeilen in den options {...} hinzu -Klausel zum Aktivieren der Reaktionsrichtlinienzone. (Die erste Zeile ist ein Kommentar.)

//enable response policy zone. 
response-policy { 
    zone "rpz.local"; 
};

Speichern und schließen Sie die Datei. Bearbeiten Sie dann die named.conf.local Datei.

sudo nano /etc/bind/named.conf.local

Fügen Sie dieser Datei eine Slave-RPZ-Zone hinzu. Ersetzen Sie 11.22.33.44 durch die IP-Adresse des Master-DNS-Resolvers.

zone "rpz.local" {
    type slave;
    file "db.rpz.local";
    masters { 11.22.33.44;};
    allow-notify { 11.22.33.44; };
    allow-transfer { none; };
    allow-query { localhost; };
};

Speichern und schließen Sie die Datei.

Sie müssen auch die Firewall des Slave-Resolvers konfigurieren, damit der Master-DNS-Resolver notify senden kann Nachrichten.

sudo ufw insert 1 allow in from 11.22.33.44 to any port 53

Führen Sie als Nächstes den folgenden Befehl aus, um zu prüfen, ob Syntaxfehler in der Hauptkonfigurationsdatei vorhanden sind. Eine stille Ausgabe zeigt an, dass keine Fehler gefunden wurden.

sudo named-checkconf

Wenn keine Fehler gefunden werden, starten Sie BIND9 neu.

sudo systemctl restart bind9

Nach dem Neustart von BIND9 beginnt der Zonentransfer sofort. Überprüfen Sie das BIND9-Protokoll mit dem folgenden Befehl.

sudo journalctl -eu bind9

oder

sudo journalctl -eu named

Sie können Meldungen wie unten sehen, die darauf hinweisen, dass die Zonenübertragung erfolgreich war.

transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer status: success
transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer completed: 1 messages, 34 records, 899 bytes, 0.248 secs (3625 bytes/sec)

Hinweis: Immer wenn Sie die RPZ-Zone auf dem Master-Resolver ändern, müssen Sie die Seriennummer aktualisieren. Machen Sie es größer, damit Slave-Resolver wissen, dass die RPZ-Zone geändert wurde.

Erstellen mehrerer RPZ-Zonen

Manchmal möchten Sie möglicherweise nicht, dass bestimmte DNS-Einträge an Slave-Resolver übertragen werden. Sie können eine separate RPZ-Zone erstellen. Bearbeiten Sie die named.conf.options Datei.

sudo nano /etc/bind/named.conf.options

Fügen Sie eine neue RPZ-Zone hinzu.

//enable response policy zone. 
response-policy { 
    zone "rpz.local";
    zone "rpz.local.notransfer"; 
};

Hinweis :Wenn die beiden RPZ-Zonen Konflikt-DNS-Einträge haben, hat der erste Eintrag Vorrang. Wenn Sie die Priorität umkehren möchten, ändern Sie ihre Position wie unten:

//enable response policy zone. 
response-policy { 
    zone "rpz.local.notransfer"; 
    zone "rpz.local";
};

Speichern und schließen Sie die Datei. Öffnen Sie dann die named.conf.local Datei.

sudo nano /etc/bind/named.conf.local

Fügen Sie in dieser Datei eine Definition für die neue Zone hinzu.

zone "rpz.local.notransfer" {
    type master;
    file "/etc/bind/db.rpz.local.notransfer";
    allow-query { localhost; };
    allow-transfer { localhost; };
};

Speichern und schließen Sie die Datei. Dann müssen wir die Zonendatei erstellen. Anstatt eine Zonendatei von Grund auf neu zu erstellen, können wir eine Zonenvorlagendatei verwenden. Kopieren Sie den Inhalt von db.empty in eine neue Datei.

sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local.notransfer

Bearbeiten Sie dann die db.rpz Datei und benutzerdefinierte DNS-Einträge hinzufügen.

sudo nano /etc/bind/db.rpz.local.transfer

Tipps zur Fehlerbehebung

Wenn der sekundäre DNS-Resolver keine RPZ-Einträge vom primären DNS-Resolver replizieren kann, ist es möglich, dass auf dem sekundären DNS-Resolver:

  • Firewall-Regel ist falsch.
  • Der BIND-Resolver läuft nicht.
  • BIND lauscht nicht auf der erforderlichen Netzwerkschnittstelle.

Wie man RPZ mit Ansichten in BIND verwendet

Wenn Sie Ihre RPZ nur für interne vertrauenswürdige Netzwerke zugänglich machen möchten, können Sie Ansichten in BIND verwenden, um dies zu erreichen. Dieses Setup ist mit der Master-Slave-Zonenübertragung kompatibel.

Bearbeiten Sie zuerst die named.conf.options Datei.

sudo nano /etc/bind/named.conf.options

Definieren Sie ein internes Netzwerk und ein Gastnetzwerk mit acl Richtlinie.

options {
     .....
     .....
}

acl internal {
    10.10.10.0/24;
};

acl guest { 
   10.10.20.0/24;
};

Hier der 10.10.10.0/24 Netzwerk ist das interne vertrauenswürdige Netzwerk. 10.10.20.0/24 ist das Gästenetz. Löschen Sie außerdem die folgenden Zeilen aus dieser Datei.

  response-policy {
     zone "rpz.local";
  };

Speichern und schließen Sie die Datei.

Bearbeiten Sie als Nächstes die named.conf.local Datei.

sudo nano /etc/bind/named.conf.local

Sie müssen die Zonendefinition in eine view einfügen Klausel wie unten. Beachten Sie, dass wir die Reaktionsrichtlinienzone innerhalb der view aktivieren müssen Klausel.

view "internal" {
  match-clients { internal; };

  //enable the response policy zone.
  response-policy {
     zone "rpz.local";
  };

  zone "rpz.local" {
    type master;
    file "/etc/bind/db.rpz.local";
    allow-query { localhost; };
    allow-transfer { 12.34.56.78; };
  };

};

Speichern und schließen Sie die Datei. Bearbeiten Sie dann die named.conf Datei.

sudo nano /etc/bind/named.conf.default-zones

Setzen Sie die Standardzonen in guest ansehen.

view guest {
     match-clients { guest; };
     allow-recursion { any; };

    zone "." {
        type hint;
        file "/usr/share/dns/root.hints";
    };

    zone "localhost" {
        type master;
        file "/etc/bind/db.local";
    };

    .....
    .....
};

Speichern und schließen Sie die Datei. Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Konfigurationsdatei Syntaxfehler enthält. Eine stille Ausgabe zeigt an, dass keine Fehler gefunden wurden.

sudo named-checkconf

Wenn keine Fehler gefunden werden, starten Sie BIND9 neu, damit die Änderungen wirksam werden.

sudo systemctl restart bind9

Debian
  1. So legen Sie DNS-Nameserver unter Ubuntu 18.04 fest

  2. So installieren und konfigurieren Sie den DNS-Server (Bind 9) unter Ubuntu / Debian

  3. So richten Sie private DNS-Server mit BIND unter CentOS 8 ein

  4. So richten Sie einen ungebundenen DNS-Resolver unter Ubuntu 20.04 ein

  5. Richten Sie einen Apache-vhost auf Ubuntu 20.04 und Debian 10 ein

Richten Sie den autoritativen BIND-DNS-Server unter Ubuntu 18.04, 16.04 ein

Richten Sie DNS über HTTPS (DoH) Resolver auf Ubuntu mit DNSdist ein

So richten Sie mit Nginx unter Ubuntu einfach einen DNS über TLS-Resolver ein

Richten Sie einen lokalen DNS-Resolver auf Ubuntu 18.04, 16.04 mit BIND9 ein

Richten Sie den lokalen DNS-Resolver unter Ubuntu 20.04 mit BIND9 ein

Richten Sie den ungebundenen DNS-Resolver auf dem Ubuntu 20.04-Server ein