GNU/Linux >> Belajar Linux >  >> Debian

Mengatur Zona Kebijakan Respons (RPZ) di BIND Resolver di Debian/Ubuntu

Tutorial ini akan menunjukkan kepada Anda cara mengganti data DNS publik di resolver DNS BIND Anda dengan zona kebijakan respons (RPZ) di Debian/Ubuntu.

Apa itu Zona Kebijakan Respons?

Zona kebijakan respons (RPZ) memungkinkan penyelesai DNS untuk memodifikasi catatan DNS. Ini awalnya dikembangkan sebagai cara untuk memblokir akses ke situs web berbahaya. Misalnya, jika komputer menanyakan alamat IP dari situs berbahaya yang diketahui menyebarkan malware, resolver DNS dapat mengembalikan 127.0.0.1 sebagai respons DNS, sehingga komputer tidak dapat terhubung ke situs berbahaya. Ini adalah kasus penggunaan asli. Dengan demikian, zona kebijakan respons juga dikenal sebagai firewall DNS .

Anda dapat menggunakan RPZ dengan cara lain. Misalnya,

  • Jika Anda memiliki layanan self-hosted seperti Nextcloud di jaringan lokal, Anda dapat menggunakan RPZ untuk mengarahkan domain Nextcloud Anda (nextcloud.domain-anda.com) ke alamat IP lokal, sehingga Anda tidak perlu keluar ke Internet, lalu kembali ke jaringan lokal Anda untuk mengakses server Nextcloud.
  • Orang tua dapat menggunakan RPZ untuk memblokir anak-anak mereka mengakses situs porno.
  • Anda dapat memblokir iklan yang tidak diinginkan.
  • Saya menginstal banyak aplikasi web di VPS saya. Jika aplikasi web tidak dimaksudkan untuk akses publik, saya menambahkan data DNS di BIND RPZ saja dan tidak memublikasikan data DNS di pencatat domain saya untuk mencegah peretasan.

Ya, Anda dapat membuat entri DNS di /etc/hosts file di komputer lokal untuk menimpa catatan DNS publik, tetapi tidak dapat diskalakan dengan baik. Selain itu, iOS dan Android tidak mengizinkan Anda membuat entri DNS lokal. Bukankah lebih baik jika penyelesai DNS BIND menimpa catatan DNS publik, sehingga semua perangkat di jaringan yang menggunakan penyelesai BIND dapat menggunakan catatan DNS khusus?

Prasyarat

Untuk mengikuti tutorial ini, diasumsikan bahwa Anda memiliki penyelesai DNS BIND yang berjalan di server Debian/Ubuntu Anda. Jika tidak, silakan baca salah satu tutorial berikut untuk menyiapkan resolver BIND.

  • Siapkan Resolver DNS BIND9 Anda Sendiri di Debian 10 Buster
  • Siapkan Penyelesai DNS BIND9 Anda Sendiri di Ubuntu 16.04/18.04
  • Siapkan Penyelesai DNS BIND9 Anda Sendiri di Ubuntu 20.04

Setelah BIND Resolver Anda aktif dan berjalan, ikuti petunjuk di bawah ini.

Cara Mengatur Zona Kebijakan Respons BIND di Server Debian/Ubuntu

Pertama, edit named.conf.options berkas.

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

Tambahkan baris berikut di options {...} klausa untuk mengaktifkan zona kebijakan respons. (Baris pertama adalah komentar.)

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

Simpan dan tutup file. Kemudian buka named.conf.local berkas.

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

Tambahkan zona RPZ dalam file ini.

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

Catatan:

  • Penting bagi Anda untuk menggunakan jalur absolut alih-alih nama file sederhana di file direktif, atau BIND akan menganggap file berada di /var/cache/bind/ .
  • Zona RPZ harus mengizinkan kueri dari localhost saja. Anda tidak perlu menambahkan klien jaringan lokal.
  • Ganti 12.34.56.78 dengan alamat IP dari resolver DNS BIND budak, yang diizinkan untuk melakukan transfer zona. Jika hanya ada satu resolver DNS, Anda dapat menggunakan localhost seperti ini:allow-transfer { localhost; };

Simpan dan tutup file. Kemudian kita perlu membuat file zona. Alih-alih membuat file zona dari awal, kita dapat menggunakan file template zona. Salin konten db.empty ke file baru.

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

Kemudian edit db.rpz berkas.

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

Tidak perlu mengubah konten yang ada. Kami hanya menambahkan catatan DNS kustom kami. Misalnya, jika Anda memiliki server Nextcloud di jaringan lokal dengan alamat IP 192.168.0.103, maka Anda menambahkan catatan DNS berikut, sehingga klien Nextcloud tidak perlu keluar ke Internet untuk terhubung ke server Nextcloud .

nextcloud.your-domain.com      A   192.168.0.103

Jika Anda tidak ingin anak Anda mengunjungi situs porno seperti pornhub.com, tambahkan baris berikut di file ini untuk memblokir seluruh domain pornhub.com.

*.pornhub.com          CNAME  .

Jika Anda tidak suka melihat iklan Google Adsense di halaman web, Anda dapat menambahkan baris berikut untuk memblokir doubleclick.net domain, yang digunakan untuk menayangkan Iklan Adsense.

*.doubleclick.net      CNAME   .

Berikut adalah beberapa domain server iklan lainnya yang dapat Anda blokir.

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

Untuk mengganti data MX untuk nama domain, tambahkan baris seperti di bawah ini.

example.com         MX     0    mail.example.com.

Catatan bahwa semua nama tangan kiri TIDAK boleh diakhiri dengan titik dan semua nama tangan kanan harus diakhiri dengan titik.

Jika Anda membutuhkan load balancing untuk nama host, maka Anda membuat catatan dengan beberapa nilai seperti di bawah ini. Klien DNS akan menggunakan dua alamat IP secara acak dan lalu lintas akan didistribusikan di antara keduanya.

host.example.com         A              12.34.56.78
                         A              12.34.56.79

Simpan dan tutup file. Disarankan untuk menggunakan file log terpisah untuk RPZ untuk menganalisis log dengan lebih baik. Untuk mengonfigurasi, edit file konfigurasi utama BIND.

sudo nano /etc/bind/named.conf

Tambahkan baris berikut ke file.

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

Simpan dan tutup file. Kemudian buat /var/log/named/ direktori dan buat bind sebagai pemilik.

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

Selanjutnya, jalankan perintah berikut untuk memeriksa apakah ada kesalahan sintaks pada file konfigurasi utama. Keluaran senyap menunjukkan tidak ada kesalahan yang ditemukan.

sudo named-checkconf

Kemudian periksa sintaks file zona RPZ.

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

Jika tidak ada kesalahan yang ditemukan, mulai ulang BIND9.

sudo systemctl restart bind9

Sekarang Anda dapat menjalankan dig perintah pada server BIND untuk melihat apakah RPZ berfungsi. Misalnya, kueri data DNS dari nama domain yang disertakan dalam zona kebijakan respons.

dig A nextcloud.your-domain.com @127.0.0.1

Anda akan melihat sesuatu seperti di bawah ini pada output perintah, yang menunjukkan bahwa respons DNS disajikan dari RPZ lokal.

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

Anda juga dapat memeriksa log kueri BIND9.

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

Anda akan melihat sesuatu seperti di bawah ini, artinya respons disajikan dari RPZ lokal.

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

Klien Fedora Tidak Menggunakan RPZ?

Secara default, Fedora tidak menggunakan RPZ. Anda dapat menggunakan dig utilitas baris perintah untuk menemukan alamat IP dari nama host di zona RPZ, tetapi jika Anda melakukan ping ke nama host, itu tidak dapat menemukan alamat IP.

Untuk mengatasi masalah ini, Anda perlu mengubah parameter hosts di /etc/nsswitch.conf file di klien Fedora.

sudo nano /etc/nsswitch.conf

Secara default, parameter host didefinisikan sebagai:

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

Ubah ke:

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

Simpan dan tutup file. RPZ seharusnya berfungsi sekarang.

Menggunakan RPZ dengan Forwarder

Jika Anda menambahkan fowarders direktif seperti di bawah ini di options klausa dalam /etc/bind/named.conf.options file, maka resolver BIND Anda menjadi forwarder, yang akan meneruskan permintaan DNS ke resolver DNS upstream seperti 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;
        };
        ...
};

Zona kebijakan respons berfungsi dengan penyiapan penerusan ini. Bind akan menanyakan zona kebijakan respons lokal terlebih dahulu. Jika catatan DNS tidak ditemukan di RPZ, maka permintaan akan diteruskan ke resolver DNS upstream. Anda mungkin ingin menggunakan penerus untuk mempercepat resolusi DNS ketika penyelesai BIND Anda sendiri membutuhkan terlalu banyak waktu untuk menyelesaikan nama DNS.

Konfigurasikan Transfer Zona

Jika Anda memiliki penyelesai DNS BIND lain, Anda dapat mengonfigurasinya sebagai penyelesai budak untuk secara otomatis menerima pembaruan dari penyelesai DNS master.

Pertama, Anda perlu mengedit /etc/bind/named.conf.local file di master DNS resolver .

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

Tambahkan alamat IP dari resolver DNS slave ke allow-transfer arahan.

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

Jika Anda memiliki beberapa slave DNS resolver, tambahkan beberapa alamat IP seperti di bawah ini.

 allow-transfer { 12.34.56.78; 12.34.56.79; };

also-notify direktif akan membuat master DNS resolver mengirim pesan notifikasi ke slave resolver saat zona RPZ diubah. Simpan dan tutup file. Mulai ulang BIND agar perubahan diterapkan.

sudo systemctl restart bind9

Jika ada firewall yang berjalan di master DNS resolver, Anda harus mengizinkan resolver DNS slave untuk terhubung ke port 53. Misalnya, jika Anda menggunakan firewall UFW, jalankan perintah berikut.

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

Selanjutnya, edit named.conf.options file di penyelesai DNS budak .

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

Tambahkan baris berikut di options {...} klausa untuk mengaktifkan zona kebijakan respons. (Baris pertama adalah komentar.)

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

Simpan dan tutup file. Kemudian edit named.conf.local berkas.

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

Tambahkan zona RPZ budak di file ini. Ganti 11.22.33.44 dengan alamat IP dari master DNS resolver.

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

Simpan dan tutup file.

Anda juga perlu mengonfigurasi firewall slave resolver untuk mengizinkan master DNS resolver mengirim notify pesan.

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

Selanjutnya, jalankan perintah berikut untuk memeriksa apakah ada kesalahan sintaks pada file konfigurasi utama. Keluaran senyap menunjukkan tidak ada kesalahan yang ditemukan.

sudo named-checkconf

Jika tidak ada kesalahan yang ditemukan, mulai ulang BIND9.

sudo systemctl restart bind9

Setelah BIND9 restart, transfer zona akan segera dimulai. Periksa log BIND9 dengan perintah berikut.

sudo journalctl -eu bind9

atau

sudo journalctl -eu named

Anda dapat melihat pesan seperti di bawah ini, yang menunjukkan transfer zona berhasil.

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)

Catatan: Setiap kali Anda mengubah zona RPZ pada master resolver, Anda perlu memperbarui nomor seri. Buat lebih besar, sehingga slave resolver mengetahui zona RPZ diubah.

Membuat Beberapa Zona RPZ

Terkadang Anda mungkin tidak ingin catatan DNS tertentu ditransfer ke resolver budak. Anda dapat membuat zona RPZ terpisah. Edit named.conf.options berkas.

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

Tambahkan zona RPZ baru.

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

Catatan :Jika dua zona RPZ memiliki catatan DNS konflik, maka entri pertama akan didahulukan. Jika Anda ingin membalikkan prioritas, maka ubah posisinya, seperti di bawah ini:

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

Simpan dan tutup file. Kemudian buka named.conf.local berkas.

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

Tambahkan definisi untuk zona baru dalam file ini.

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

Simpan dan tutup file. Kemudian kita perlu membuat file zona. Alih-alih membuat file zona dari awal, kita dapat menggunakan file template zona. Salin konten db.empty ke file baru.

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

Kemudian edit db.rpz file dan tambahkan catatan DNS khusus.

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

Kiat Pemecahan Masalah

Jika resolver DNS sekunder gagal mereplikasi data RPZ dari resolver DNS primer, kemungkinan pada resolver DNS sekunder:

  • Aturan firewall salah.
  • Resolver BIND tidak berjalan.
  • BIND tidak mendengarkan pada antarmuka jaringan yang diperlukan.

Cara Menggunakan RPZ dengan Tampilan di BIND

Jika Anda ingin membuat RPZ Anda hanya dapat diakses oleh jaringan tepercaya internal, Anda dapat menggunakan tampilan di BIND untuk mencapainya. Pengaturan ini akan kompatibel dengan transfer zona master-slave.

Pertama, edit named.conf.options berkas.

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

Tentukan jaringan internal dan jaringan tamu dengan acl arahan.

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

acl internal {
    10.10.10.0/24;
};

acl guest { 
   10.10.20.0/24;
};

Berikut 10.10.10.0/24 jaringan adalah jaringan tepercaya internal. 10.10.20.0/24 adalah jaringan tamu. Juga, hapus baris berikut dari file ini.

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

Simpan dan tutup file.

Selanjutnya, edit named.conf.local berkas.

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

Anda harus meletakkan definisi zona di dalam view klausa seperti di bawah ini. Perhatikan bahwa kita perlu mengaktifkan zona kebijakan respons di dalam view klausa.

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

};

Simpan dan tutup file. Kemudian edit named.conf berkas.

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

Letakkan zona default di guest lihat.

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

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

Simpan dan tutup file. Jalankan perintah berikut untuk memeriksa apakah ada kesalahan sintaks dalam file konfigurasi. Keluaran senyap menunjukkan tidak ada kesalahan yang ditemukan.

sudo named-checkconf

Jika tidak ada kesalahan yang ditemukan, mulai ulang BIND9 agar perubahan diterapkan.

sudo systemctl restart bind9

Debian
  1. Cara Mengatur Server DNS Pribadi dengan BIND di CentOS 8

  2. Cara Mengatur Resolver DNS Tidak Terikat di Ubuntu 20.04

  3. Siapkan vhost Apache di Ubuntu 20.04 dan Debian 10

  1. Cara Mengatur Server Nama DNS di Ubuntu 18.04

  2. Cara Menginstal dan Mengkonfigurasi Server DNS (Bind 9) di Ubuntu / Debian

  3. Cara Konfigurasi Server Slave DNS (BIND) Di Ubuntu 18.04/16.04 &Debian 10/9

  1. Cara Mengkonfigurasi Server DNS Di Debian 10 / Debian 9

  2. Cara Mengatur Zona Waktu di Debian 11

  3. Mengatur DNS melalui HTTPS (DoH) Resolver di Debian dengan DNSdist