GNU/Linux >> Znalost Linux >  >> Debian

Nastavte zónu zásad odezvy (RPZ) v BIND Resolver na Debian/Ubuntu

Tento tutoriál vám ukáže, jak přepsat veřejné záznamy DNS ve vašem překladači BIND DNS pomocí zóny zásad odezvy (RPZ) na Debian/Ubuntu.

Co je zóna zásad odezvy?

Zóna zásad odpovědí (RPZ) umožňuje překladači DNS upravovat záznamy DNS. Původně byl vyvinut jako způsob, jak blokovat přístup k nebezpečným webům. Pokud se například počítač dotáže na IP adresu známého nebezpečného webu, který šíří malware, může DNS resolver vrátit 127.0.0.1 jako odpověď DNS, takže počítač se nemůže připojit k nebezpečné stránce. Toto je původní případ použití. Jako taková je zóna zásad odezvy známá také jako DNS firewall .

RPZ můžete využít i jinak. Například,

  • Pokud máte v místní síti vlastní služby, jako je Nextcloud, můžete pomocí RPZ nasměrovat svou doménu Nextcloud (nextcloud.vaše-doména.com) na místní IP adresu, takže nemusíte odcházet k Internetu a poté se vraťte do místní sítě pro přístup k serveru Nextcloud.
  • Rodiče mohou pomocí RPZ zablokovat svým dětem přístup na porno stránky.
  • Nežádoucí reklamy můžete blokovat.
  • Na své VPS instaluji mnoho webových aplikací. Když webová aplikace není určena pro veřejný přístup, přidám záznam DNS pouze do BIND RPZ a nezveřejňuji záznam DNS u svého registrátora domény, abych zabránil hackování.

Ano, záznam DNS můžete vytvořit v /etc/hosts soubor na místním počítači přepsat veřejné záznamy DNS, ale neškáluje se dobře. Kromě toho vám iOS a Android neumožňují vytvářet místní záznamy DNS. Nebylo by hezké, kdyby překladač DNS BIND přepsal veřejný záznam DNS, takže všechna zařízení v síti používající překladač BIND mohla používat vlastní DNS záznam?

Předpoklady

Chcete-li postupovat podle tohoto návodu, předpokládá se, že máte na serveru Debian/Ubuntu spuštěný BIND DNS resolver. Pokud ne, přečtěte si prosím jeden z následujících návodů k nastavení BIND resolveru.

  • Nastavte si svůj vlastní BIND9 DNS Resolver na Debian 10 Buster
  • Nastavte si svůj vlastní BIND9 DNS Resolver na Ubuntu 16.04/18.04
  • Nastavte si svůj vlastní BIND9 DNS Resolver na Ubuntu 20.04

Jakmile bude váš BIND Resolver spuštěn a spuštěn, postupujte podle pokynů níže.

Jak nastavit zónu BIND Response Policy Zone na serveru Debian/Ubuntu

Nejprve upravte named.conf.options soubor.

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

Přidejte následující řádky do options {...} klauzule pro povolení zóny zásad odezvy. (První řádek je komentář.)

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

Uložte a zavřete soubor. Poté otevřete named.conf.local soubor.

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

Přidejte do tohoto souboru zónu RPZ.

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

Poznámky:

  • Je důležité, abyste místo jednoduchého názvu souboru v file použili absolutní cestu nebo BIND předpokládá, že soubor je v /var/cache/bind/ .
  • Zóny RPZ by měly umožňovat dotazy pouze z localhost. Není třeba přidávat klienty místní sítě.
  • Nahraďte 12.34.56.78 s IP adresou slave DNS resolveru BIND, který má povoleno provádět zónový přenos. Pokud existuje pouze jeden DNS resolver, můžete použít localhost takto:allow-transfer { localhost; };

Uložte a zavřete soubor. Poté musíme vytvořit soubor zóny. Místo vytvoření souboru zóny od začátku můžeme použít soubor šablony zóny. Zkopírujte obsah db.empty do nového souboru.

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

Poté upravte db.rpz soubor.

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

Není třeba měnit stávající obsah. My pouze přidáme naše vlastní DNS záznamy. Pokud máte například v místní síti server Nextcloud s IP adresou 192.168.0.103, přidáte následující záznam DNS, takže klienti Nextcloud nemusí chodit na internet, aby se mohli připojit k serveru Nextcloud .

nextcloud.your-domain.com      A   192.168.0.103

Pokud nechcete, aby vaše děti navštěvovaly porno stránky, jako je pornhub.com, přidejte do tohoto souboru následující řádek, abyste zablokovali celou doménu pornhub.com.

*.pornhub.com          CNAME  .

Pokud nechcete, aby se vám na webových stránkách zobrazovaly reklamy Google Adsense, můžete přidat následující řádek a blokovat doubleclick.net doména, která se používá k zobrazování reklam AdSense.

*.doubleclick.net      CNAME   .

Zde je několik dalších domén reklamních serverů, které můžete blokovat.

*.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 .

Chcete-li přepsat záznam MX pro název domény, přidejte řádek jako níže.

example.com         MX     0    mail.example.com.

Poznámka že všechna levá jména NESMÍ končit tečkou a všechna pravá jména musí končit tečkou.

Pokud potřebujete vyvažování zátěže pro název hostitele, vytvoříte záznam s více hodnotami, jak je uvedeno níže. Klienti DNS budou používat dvě IP adresy náhodně a provoz bude distribuován mezi ně.

host.example.com         A              12.34.56.78
                         A              12.34.56.79

Uložte a zavřete soubor. Pro lepší analýzu protokolu se doporučuje použít samostatný soubor protokolu pro RPZ. Pro konfiguraci upravte hlavní konfigurační soubor BIND.

sudo nano /etc/bind/named.conf

Přidejte do souboru následující řádky.

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; };
};

Uložte a zavřete soubor. Poté vytvořte /var/log/named/ adresář a proveďte bind jako vlastník.

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

Dále spusťte následující příkaz a zkontrolujte, zda v hlavním konfiguračním souboru nejsou chyby syntaxe. Tichý výstup znamená, že nebyly nalezeny žádné chyby.

sudo named-checkconf

Poté zkontrolujte syntaxi souborů zóny RPZ.

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

Pokud nejsou nalezeny žádné chyby, restartujte BIND9.

sudo systemctl restart bind9

Nyní můžete spustit dig příkaz na serveru BIND, abyste zjistili, zda RPZ funguje. Dotazujte se například na záznam DNS názvu domény, který je součástí zóny zásad odezvy.

dig A nextcloud.your-domain.com @127.0.0.1

Ve výstupu příkazu byste měli vidět něco jako níže, což znamená, že odpověď DNS byla doručena z místního RPZ.

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

Můžete také zkontrolovat protokol dotazů BIND9.

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

Uvidíte něco podobného níže, což znamená, že odpověď byla doručena z místního RPZ.

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

Klient Fedora nepoužívá RPZ?

Ve výchozím nastavení Fedora nepoužívá RPZ. Můžete použít dig nástroj příkazového řádku k nalezení IP adresy názvu hostitele v zóně RPZ, ale pokud na název hostitele odešlete příkaz ping, nemůže IP adresu najít.

Chcete-li tento problém vyřešit, musíte změnit parametr hosts v /etc/nsswitch.conf soubor na klientovi Fedory.

sudo nano /etc/nsswitch.conf

Ve výchozím nastavení je parametr hosts definován jako:

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

Změňte jej na:

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

Uložte a zavřete soubor. RPZ by nyní mělo fungovat.

Používání RPZ s forwardery

Pokud přidáte fowarders jako níže v options klauzule v /etc/bind/named.conf.options soubor, pak se váš BIND resolver stane forwarderem, který bude předávat DNS požadavky na upstream DNS resolver, jako je 8.8.8.8 .

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;
        };
        ...
};

Zóna zásad odezvy funguje s tímto nastavením předávání. Bind se nejprve dotáže místní zóny zásad odezvy. Pokud DNS záznam není v RPZ nalezen, bude požadavek předán upstreamovému DNS resolveru. Možná budete chtít použít forwarder k urychlení překladu DNS, když vašemu vlastnímu překladači BIND zabere příliš mnoho času překlad názvů DNS.

Konfigurace přenosu zóny

Pokud máte jiný BIND DNS resolver, můžete jej nakonfigurovat jako slave resolver, aby automaticky přijímal aktualizace z hlavního DNS resolveru.

Nejprve musíte upravit /etc/bind/named.conf.local soubor na hlavním překladači DNS .

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

Přidejte IP adresu podřízeného DNS resolveru do allow-transfer směrnice.

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; };
};

Pokud máte více podřízených DNS resolverů, přidejte více IP adres, jak je uvedeno níže.

 allow-transfer { 12.34.56.78; 12.34.56.79; };

also-notify direktiva způsobí, že hlavní překladač DNS odešle zprávu s upozorněním podřízenému překladači, když se změní zóna RPZ. Uložte a zavřete soubor. Restartujte BIND, aby se změny projevily.

sudo systemctl restart bind9

Pokud je na hlavním překladači DNS spuštěna brána firewall, musíte podřízenému překladači DNS povolit připojení k portu 53. Pokud například používáte bránu firewall UFW, spusťte následující příkaz.

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

Dále upravte named.conf.options soubor na slave DNS resolveru .

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

Přidejte následující řádky do options {...} klauzule pro povolení zóny zásad odezvy. (První řádek je komentář.)

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

Uložte a zavřete soubor. Poté upravte named.conf.local soubor.

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

Přidejte do tohoto souboru podřízenou zónu RPZ. Nahraďte 11.22.33.44 IP adresou hlavního DNS resolveru.

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; };
};

Uložte a zavřete soubor.

Musíte také nakonfigurovat bránu firewall podřízeného resolveru, aby umožnil hlavnímu DNS resolveru posílat notify zprávy.

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

Dále spusťte následující příkaz a zkontrolujte, zda v hlavním konfiguračním souboru nejsou chyby syntaxe. Tichý výstup znamená, že nebyly nalezeny žádné chyby.

sudo named-checkconf

Pokud nejsou nalezeny žádné chyby, restartujte BIND9.

sudo systemctl restart bind9

Po restartu BIND9 se okamžitě spustí přenos zóny. Zkontrolujte protokol BIND9 pomocí následujícího příkazu.

sudo journalctl -eu bind9

nebo

sudo journalctl -eu named

Můžete vidět zprávy jako níže, které indikují, že přenos zóny byl úspěšný.

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)

Poznámka: Kdykoli upravíte zónu RPZ na hlavním překladači, musíte aktualizovat sériové číslo. Zvětšete jej, aby slave resolvery věděli, že se zóna RPZ změnila.

Vytvoření více RPZ zón

Někdy možná nebudete chtít, aby se určité záznamy DNS přenášely do podřízených překladačů. Můžete vytvořit samostatnou zónu RPZ. Upravte named.conf.options soubor.

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

Přidejte novou zónu RPZ.

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

Poznámka :Pokud mají dvě zóny RPZ konfliktní záznamy DNS, bude mít přednost první položka. Pokud chcete obrátit prioritu, změňte jejich polohu, jako níže:

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

Uložte a zavřete soubor. Poté otevřete named.conf.local soubor.

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

Přidejte definici pro novou zónu do tohoto souboru.

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

Uložte a zavřete soubor. Poté musíme vytvořit soubor zóny. Místo vytvoření souboru zóny od začátku můžeme použít soubor šablony zóny. Zkopírujte obsah db.empty do nového souboru.

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

Poté upravte db.rpz soubor a přidejte vlastní záznamy DNS.

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

Tipy pro odstraňování problémů

Pokud sekundární překladač DNS nedokáže replikovat záznamy RPZ z primárního překladače DNS, je možné, že na sekundárním překladači DNS:

  • Pravidlo brány firewall je chybné.
  • Překladač BIND neběží.
  • BIND nenaslouchá na požadovaném síťovém rozhraní.

Jak používat RPZ se zobrazeními v BIND

Pokud chcete své RPZ zpřístupnit pouze interním důvěryhodným sítím, můžete k tomu použít pohledy v BIND. Toto nastavení bude kompatibilní s přenosem zóny master-slave.

Nejprve upravte named.conf.options soubor.

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

Definujte interní síť a síť pro hosty pomocí acl směrnice.

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

acl internal {
    10.10.10.0/24;
};

acl guest { 
   10.10.20.0/24;
};

Zde je 10.10.10.0/24 síť je interní důvěryhodná síť. 10.10.20.0/24 je síť pro hosty. Z tohoto souboru také odstraňte následující řádky.

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

Uložte a zavřete soubor.

Dále upravte named.conf.local soubor.

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

Musíte vložit definici zóny do view klauzule jako níže. Všimněte si, že musíme povolit zónu zásad odezvy uvnitř view doložka.

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; };
  };

};

Uložte a zavřete soubor. Poté upravte named.conf soubor.

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

Vložte výchozí zóny do guest zobrazit.

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";
    };

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

Uložte a zavřete soubor. Spuštěním následujícího příkazu zkontrolujte, zda v konfiguračním souboru nejsou syntaktické chyby. Tichý výstup znamená, že nebyly nalezeny žádné chyby.

sudo named-checkconf

Pokud nejsou nalezeny žádné chyby, restartujte BIND9, aby se změny projevily.

sudo systemctl restart bind9

Debian
  1. Jak nastavit soukromé servery DNS s BIND na CentOS 8

  2. Jak nastavit Unbound DNS Resolver na Ubuntu 20.04

  3. Nastavte Apache vhost na Ubuntu 20.04 a Debian 10

  1. Jak nastavit DNS Nameservery na Ubuntu 18.04

  2. Jak nainstalovat a nakonfigurovat DNS Server (Bind 9) na Ubuntu / Debian

  3. Jak nakonfigurovat server Slave DNS (BIND) na Ubuntu 18.04 / 16.04 a Debian 10 / 9

  1. Jak nakonfigurovat server DNS na Debian 10 / Debian 9

  2. Jak nastavit časové pásmo v Debianu 11

  3. Nastavte DNS over HTTPS (DoH) Resolver v Debianu pomocí DNSdist