Tutorial ini akan menunjukkan kepada Anda cara mengganti data DNS publik di resolver DNS BIND Anda dengan zona kebijakan respons (RPZ) di CentOS/RHEL.
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 hanya di BIND RPZ 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 BIND DNS 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 CentOS/RHEL Anda. Jika tidak, silakan baca tutorial berikut untuk menyiapkan resolver BIND.
- Siapkan Resolver DNS BIND9 Anda Sendiri di CentOS 8/RHEL 8
Setelah BIND Resolver Anda aktif dan berjalan, ikuti petunjuk di bawah ini.
Cara Mengatur Zona Kebijakan Respons BIND di Server CentOS/RHEL
Pertama, edit named.conf
file dengan editor teks baris perintah seperti Nano.
sudo nano /etc/named.conf
Tambahkan baris berikut di options {...}
klausa untuk mengaktifkan zona kebijakan respons. (Baris pertama adalah komentar.)
//enable response policy zone. response-policy { zone "rpz.local"; };
Kemudian gulir ke bawah ke bagian bawah file ini dan tambahkan zona RPZ di file ini.
zone "rpz.local" { type master; file "rpz.local"; allow-query { localhost; }; allow-transfer { 12.34.56.78; }; };
Catatan:
- Anda dapat menggunakan jalur absolut alih-alih nama file sederhana di
file
pengarahan. BIND akan menganggap file dalam/var/named/
. - 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 menggunakanlocalhost
seperti ini:allow-transfer { localhost; };
Disarankan untuk menggunakan file log terpisah untuk RPZ guna menganalisis log dengan lebih baik, jadi tambahkan baris berikut di logging {...};
klausa.
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 named
sebagai pemilik.
sudo mkdir /var/log/named/ sudo chown named:named /var/log/named/ -R
Kemudian kita perlu membuat file zona. Alih-alih membuat file zona dari awal, kita dapat menggunakan file template zona. Salin konten named.empty
ke file baru.
sudo cp /var/named/named.empty /var/named/rpz.local
Edit file zona.
sudo nano /var/named/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 .
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.
Simpan dan tutup file. Selanjutnya, kita harus mengatur named
sebagai pemilik grup /var/named/rpz.local
file, atau bernama tidak akan dapat memuat zona ini.
sudo chown root:named /var/named/rpz.local
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 /var/named/rpz.local
Jika tidak ada kesalahan yang ditemukan, mulai ulang BIND.
sudo systemctl restart named
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/named.conf
file, maka resolver BIND Anda menjadi forwarder, yang akan meneruskan permintaan DNS ke resolver DNS upstream seperti 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; }; ... };
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/named.conf
file di master DNS resolver .
sudo nano /etc/named.conf
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 named
Jika ada firewall yang berjalan di master DNS resolver, Anda harus mengizinkan resolver DNS slave untuk terhubung ke port 53.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="12.34.56.78" accept' sudo systemctl reload firewalld
Selanjutnya, edit /etc/named.conf
file di penyelesai DNS budak .
sudo nano /etc/named.conf
Tambahkan baris berikut di options {...}
klausa untuk mengaktifkan zona kebijakan respons. (Baris pertama adalah komentar.)
//enable response policy zone. response-policy { zone "rpz.local"; };
Kemudian tambahkan zona RPZ budak di akhir file ini. Ganti 11.22.33.44
dengan alamat IP dari master DNS resolver.
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; }; };
Simpan dan tutup file.
Anda juga perlu mengonfigurasi firewall slave resolver untuk mengizinkan master DNS resolver mengirim notify
pesan.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="11.22.33.44" accept' sudo systemctl reload firewalld
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 BIND.
sudo systemctl restart named
Setelah BIND restart, transfer zona akan segera dimulai. Periksa log BIND9 dengan perintah berikut.
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)
File zona akan disimpan sebagai /var/named/rpz.local
pada penyelesai budak.
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 /etc/named.conf
berkas.
sudo nano /etcnamed.conf
Tambahkan zona RPZ baru.
//enable response policy zone. response-policy { zone "rpz.local"; zone "rpz.local.notransfer"; };
Tambahkan definisi untuk zona baru di bagian bawah file ini.
zone "rpz.local.notransfer" { type master; file "/var/named/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 named.empty
ke file baru.
sudo cp /var/named/named.empty /var/named/rpz.local.notransfer
Edit file zona.
sudo nano /var/named/rpz.local.notransfer