GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Mudah Mengatur DNS melalui TLS Resolver dengan Nginx di Ubuntu

Tutorial ini akan menunjukkan cara menyiapkan DNS Anda sendiri melalui TLS (DoT) resolver di Ubuntu dengan Nginx, sehingga kueri DNS Anda dapat dienkripsi dan dilindungi dari pengintaian.

Apa itu DNS over TLS dan Mengapa Penting

DNS (Domain Name System) bertanggung jawab untuk menerjemahkan nama domain ke alamat IP. Ini dirancang pada tahun 1987 tanpa memikirkan keamanan atau privasi. Secara default, kueri DNS tidak dienkripsi. Mereka dikirim dalam teks biasa melalui kabel dan dapat dimanfaatkan oleh entitas menengah. Misalnya, Tembok Api Besar China (GFW ) menggunakan teknik yang disebut racun cache DNS untuk menyensor Internet Cina. (Mereka juga menggunakan metode lain, yang berada di luar cakupan artikel ini.)

GFW memeriksa setiap permintaan DNS yang dikirim ke server DNS di luar China. Karena protokol DNS teks biasa didasarkan pada UDP, yang merupakan protokol tanpa koneksi, GFW dapat memalsukan IP klien dan IP server. Ketika GFW menemukan nama domain di daftar blokirnya, itu mengubah respons DNS. Misalnya, jika pengguna Internet China ingin mengunjungi google.com, GFW mengembalikan alamat IP yang terletak di China alih-alih alamat IP asli Google, ke resolver DNS pengguna. Kemudian DNS resolver mengembalikan alamat IP palsu tersebut ke komputer pengguna, sehingga pengguna tidak dapat mengunjungi google.com.

DNS melalui TLS berarti bahwa kueri DNS dikirim melalui koneksi aman yang dienkripsi dengan TLS, teknologi yang sama yang mengenkripsi lalu lintas HTTP.

Mengapa Menjalankan DoT Resolver Anda Sendiri?

Sudah ada beberapa resolver DNS publik seperti 1.1.1.1 dan 9.9.9.9 yang mendukung DNS melalui TLS, jadi Anda dapat menggunakannya jika Anda tidak memiliki keahlian atau waktu untuk menjalankannya sendiri. Namun, beberapa orang berpendapat bahwa ini masih memungkinkan penyedia layanan DNS besar untuk mengumpulkan informasi tentang pengguna. Mereka tampaknya lebih percaya pada ISP mereka. Tapi saya pikir jika Anda paranoid tentang privasi, Anda harus menjalankan resolver DoT Anda sendiri, sehingga baik penyedia layanan DNS besar maupun ISP Anda tidak dapat memata-matai Anda.

Saat ini, tidak semua DNS resolver (BIND, Unbound, Knot resolver, PowerDNS recursor, dll) mendukung DNS melalui TLS. Alih-alih membuat panduan untuk resolver tertentu, saya akan menunjukkan cara menyiapkan proxy Nginx TLS untuk resolver DNS yang ada untuk menyediakan layanan DoT, jadi apa pun DNS resolver yang Anda gunakan, Anda dapat mengikuti tutorial ini.

Prasyarat

Diasumsikan bahwa Anda memiliki penyelesai DNS yang berjalan di server Ubuntu Anda. Anda dapat menggunakan resolver DNS (BIND, Unbound, Knot resolver…) Saya pribadi menggunakan BIND.

  • Siapkan Penyelesai DNS BIND9 Anda Sendiri di Ubuntu 16.04/18.04
  • Siapkan Penyelesai DNS BIND9 Anda Sendiri di Ubuntu 20.04

Anda juga memerlukan nama domain, karena klien DNS perlu membuat koneksi TLS yang aman dengan resolver DNS kami. Saya mendaftarkan nama domain saya dari NameCheap karena harganya murah dan mereka memberikan perlindungan privasi whois gratis seumur hidup.

Setelah Anda memenuhi persyaratan di atas, ikuti petunjuk di bawah ini.

Langkah 1:Instal Nginx di Server Ubuntu

Ini sangat mudah dilakukan. Cukup jalankan perintah berikut.

sudo apt install nginx

Langkah 2:Dapatkan Sertifikat TLS Tepercaya dari Let's Encrypt

DNS over TLS memerlukan pemasangan sertifikat TLS di sisi server. Kami akan mendapatkan dan menginstal sertifikat Let's Encrypt. Keuntungan menggunakan sertifikat Let's Encrypt adalah gratis, lebih mudah disiapkan, dan dipercaya oleh perangkat lunak klien.

Jalankan perintah berikut untuk menginstal klien Let's Encrypt (certbot) dari repositori default Ubuntu.

sudo apt install certbot

Untuk mendapatkan sertifikat Let's Encrypt TLS, kita bisa membuat virtual host Nginx dengan perintah berikut. Ganti dot.example.com dengan nama domain Anda sendiri. Jangan lupa untuk membuat catatan DNS A untuk sub-domain ini.

sudo nano /etc/nginx/conf.d/dot.example.com.conf

Salin teks berikut dan tempelkan ke file host virtual.

server {
      listen 80;
      server_name dot.example.com;

      root /usr/share/nginx/html/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Simpan dan tutup file. Muat ulang Nginx agar perubahan diterapkan.

sudo systemctl reload nginx

Setelah virtual host dibuat dan diaktifkan, jalankan perintah berikut untuk mendapatkan sertifikat Let's Encrypt menggunakan plugin webroot.

sudo certbot certonly --webroot --agree-tos --email [email protected] -d dot.example.com -w /usr/share/nginx/html/

Langkah 3:Buat DNS melalui TLS Proxy di Nginx

Edit file konfigurasi utama Nginx.

sudo nano /etc/nginx/nginx.conf

Tambahkan baris berikut di bagian bawah file ini. Perhatikan bahwa mereka harus ditempatkan di luar http konteks.

stream {
    # DNS upstream pool
    upstream dns {
        zone dns 64k;
        server 127.0.0.1:53;
    }

   # DoT server for decryption
   server {
        listen 853 ssl;
        ssl_certificate /etc/letsencrypt/live/dot.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/dot.example.com/privkey.pem;
        proxy_pass dns;
    }
}

Pada konfigurasi di atas, kita membuat Nginx mengakhiri koneksi TLS pada port 853, kemudian akan mengarahkan permintaan DNS ke resolver DNS lokal yang mendengarkan di 127.0.0.1:53 .

Simpan dan tutup file. Kemudian uji konfigurasi Nginx dan mulai ulang.

sudo nginx -t
sudo systemctl restart nginx

Jika ada firewall yang berjalan di server Ubuntu, Anda perlu membuka port TCP 853. Misalnya, jika Anda menggunakan firewall UFW, jalankan perintah berikut.

sudo ufw allow 853/tcp

Karena kami menggunakan DNS melalui TLS, tidak perlu khawatir tentang serangan amplifikasi DNS.

Langkah 5:Konfigurasikan Stubby DoT Client di Desktop Ubuntu

Stubby adalah resolver rintisan DNS open-source yang dikembangkan oleh tim getdns. Penyelesai rintisan adalah klien DNS kecil di komputer pengguna akhir yang menerima permintaan DNS dari aplikasi seperti Firefox dan meneruskan permintaan ke penyelesai rekursif seperti 1.1.1.1 atau 8.8.8.8. Stubby istimewa karena mendukung DNS melalui TLS. Secara default, ini hanya akan mengirim permintaan DNS terenkripsi.

Instal Stubby di desktop Ubuntu dari repositori default.

sudo apt install stubby

Setelah diinstal, stubby berjalan di latar belakang. cek statusnya dengan:

systemctl status stubby

Stubby mendengarkan TCP dan UDP port 53 dari localhost (127.0.0.1). Secara default, Stubby menggunakan DNS pihak ketiga melalui resolver TLS. Kita perlu mengonfigurasinya untuk menggunakan milik kita sendiri.

sudo nano /etc/stubby/stubby.yml

Gulir ke bawah ke upstream_recursive_servers: bagian dan tambahkan teks berikut di atas server DNS lainnya. Ganti 12.34.56.78 dengan alamat IP dari resolver DoT Anda.

# My Own DNS over TLS resolver
  - address_data: 12.34.56.78
    tls_auth_name: "dot.example.com"

Kemudian cari baris berikut:

round_robin_upstreams: 1

Ubah 1 ke 0 . Ini akan membuat stubby selalu menggunakan DNS Anda sendiri melalui resolver TLS. Jika tidak tersedia, stubby akan menggunakan server DNS lain. Simpan file dan mulai ulang stubby agar perubahan diterapkan.

sudo systemctl restart stubby

Langkah 6:Konfigurasi Desktop Ubuntu untuk Menggunakan Stubby

Meskipun Stubby sedang berjalan, itu tidak digunakan oleh sistem operasi. Klik ikon Network Manager di sudut kanan atas desktop Anda. Kemudian pilih pengaturan kabel. (Jika Anda menggunakan Wi-fi, pilih setelan Wi-fi.)

Klik tombol roda gigi.

Pilih IPv4 tab, lalu di pengaturan DNS, alihkan Automatic ke OFF, yang akan mencegah sistem Ubuntu Anda mendapatkan alamat server DNS dari router Anda. Masukkan 127.0.0.1 di kolom DNS. Klik Apply untuk menyimpan perubahan Anda.

Kemudian mulai ulang NetworkManager agar perubahan diterapkan.

sudo systemctl restart NetworkManager

Setelah Anda terhubung kembali, Anda dapat melihat bahwa sistem Ubuntu Anda sekarang menggunakan 127.0.0.1 sebagai server DNS di Details tab.

Cara Memeriksa Apakah Lalu Lintas DNS Anda Dienkripsi

Kita dapat menggunakan WireShark untuk memantau lalu lintas DNS. Instal WireShark di desktop Ubuntu.

sudo apt install wireshark

Jika Anda ditanya “Haruskah non-pengguna super dapat menangkap paket?”, Jawab Ya. Setelah terinstal, jalankan perintah berikut untuk menambahkan akun pengguna Anda ke grup wireshark sehingga Anda dapat menangkap paket.

sudo adduser your-username wireshark

Keluar dan masuk kembali agar perubahan diterapkan. Kemudian buka WireShark dari menu aplikasi Anda, pilih antarmuka jaringan Anda di WireShark. Misalnya, nama antarmuka Ethernet saya adalah enp5s0. Kemudian masukkan port 853 sebagai filter penangkapan. Ini akan membuat WireShark hanya menangkap lalu lintas pada port 853, yang merupakan port yang digunakan oleh DNS melalui TLS.

Klik tombol di sudut kiri atas untuk mulai menangkap. Setelah itu, di jendela terminal, jalankan perintah berikut untuk menanyakan nama domain dengan menggunakan dig kegunaan. Misalnya, saya dapat menanyakan catatan A dari nama domain saya.

dig A linuxbabe.com

Sekarang Anda dapat melihat lalu lintas DNS yang ditangkap di WireShark. Koneksi dibuat melalui TCP dan dienkripsi dengan TLS, yang kami inginkan. Anda harus memeriksa apakah kolom Tujuan menyertakan alamat IP dari resolver DoT Anda.

Jika kueri DNS dikirim tanpa enkripsi, maka komputer akan menghubungi server DNS pada port 53. Anda dapat menangkap paket lagi dengan port 53 sebagai filter pengambilan, tetapi Anda tidak akan melihat paket apa pun di WireShark, yang berarti stubby mengenkripsi kueri DNS Anda.


Ubuntu
  1. Cara mengatur DNS Nameserver di Ubuntu 20.04

  2. Cara Mengatur Server Nama DNS di Ubuntu 18.04

  3. Cara Mengatur Resolver DNS Tidak Terikat di Ubuntu 20.04

  1. Cara Mengatur Firewall dengan UFW di Ubuntu 20.04

  2. Cara Mengatur Blok Server Nginx di Ubuntu 20.04

  3. Cara Menginstal MediaWiki dengan Nginx di Ubuntu 16.04

  1. Cara Menginstal Magento dengan Nginx di Ubuntu 15.10

  2. Cara Menginstal Mailpile dengan Nginx di Ubuntu 15.10

  3. Cara Instal Redmine 3 dengan Nginx di Ubuntu 15.10