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 CentOS/RHEL.
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 CentOS/RHEL spuštěný BIND DNS resolver. Pokud ne, přečtěte si prosím následující návod k nastavení BIND resolveru.
- Nastavte si svůj vlastní BIND9 DNS Resolver na CentOS 8/RHEL 8
Jakmile bude váš BIND Resolver spuštěn a spuštěn, postupujte podle pokynů níže.
Jak nastavit zónu zásad BIND Response Policy na serveru CentOS/RHEL
Nejprve upravte named.conf
pomocí textového editoru příkazového řádku, jako je Nano.
sudo nano /etc/named.conf
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"; };
Poté přejděte dolů na konec tohoto souboru a přidejte do tohoto souboru zónu RPZ.
zone "rpz.local" { type master; file "rpz.local"; allow-query { localhost; }; allow-transfer { 12.34.56.78; }; };
Poznámky:
- V
file
můžete místo jednoduchého názvu souboru použít absolutní cestu směrnice. BIND předpokládá, že soubor je v/var/named/
. - 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žítlocalhost
takto:allow-transfer { localhost; };
Pro lepší analýzu protokolu se doporučuje použít samostatný soubor protokolu pro RPZ, proto přidejte následující řádky do logging {...};
doložka.
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 make named
jako vlastník.
sudo mkdir /var/log/named/ sudo chown named:named /var/log/named/ -R
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 named.empty
do nového souboru.
sudo cp /var/named/named.empty /var/named/rpz.local
Upravte soubor zóny.
sudo nano /var/named/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 .
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.
Uložte a zavřete soubor. Dále bychom měli nastavit named
jako vlastník skupiny /var/named/rpz.local
soubor nebo pojmenované nebudou moci načíst tuto zónu.
sudo chown root:named /var/named/rpz.local
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 /var/named/rpz.local
Pokud nejsou nalezeny žádné chyby, restartujte BIND.
sudo systemctl restart named
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/named.conf
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 { // listen-on port 53 { 127.0.0.1; }; // listen-on-v6 port 53 { ::1; }; directory "/var/named"; max-cache-size 100m; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { localhost; 10.10.60.0/24;}; //enable response policy zone. response-policy { zone "rpz.local"; }; 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/named.conf
soubor na hlavním překladači DNS .
sudo nano /etc/named.conf
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 named
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.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="12.34.56.78" accept' sudo systemctl reload firewalld
Dále upravte /etc/named.conf
soubor na slave DNS resolveru .
sudo nano /etc/named.conf
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"; };
Poté přidejte podřízenou zónu RPZ na konec tohoto souboru. Nahraďte 11.22.33.44
s IP adresou hlavního DNS resolveru.
zone "rpz.local" { type slave; file "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 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="11.22.33.44" accept' sudo systemctl reload firewalld
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 BIND.
sudo systemctl restart named
Po restartu BIND se okamžitě spustí přenos zóny. Zkontrolujte protokol BIND9 pomocí následujícího příkazu.
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)
Soubor zóny bude uložen jako /var/named/rpz.local
na podřízeném resolveru.
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 /etc/named.conf
soubor.
sudo nano /etcnamed.conf
Přidejte novou zónu RPZ.
//enable response policy zone. response-policy { zone "rpz.local"; zone "rpz.local.notransfer"; };
Přidejte definici nové zóny na konec tohoto souboru.
zone "rpz.local.notransfer" { type master; file "/var/named/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 named.empty
do nového souboru.
sudo cp /var/named/named.empty /var/named/rpz.local.notransfer
Upravte soubor zóny.
sudo nano /var/named/rpz.local.notransfer