GNU/Linux >> Belajar Linux >  >> Debian

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

Tutorial ini akan menunjukkan cara menyiapkan DNS Anda sendiri melalui HTTPS (DoH) penyelesai di Debian dengan DNSdist, sehingga kueri DNS Anda dapat dienkripsi dan dilindungi dari pengintaian.

Apa itu DNS over HTTPS 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, Great Firewall (GFW ) dari China 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 ke komputer pengguna, sehingga pengguna tidak dapat mengunjungi google.com.

HTTPS adalah cara standar untuk mengenkripsi koneksi HTTP teks biasa. Dengan DNS over HTTPS (DoH), kueri DNS Anda akan dienkripsi dan tidak ada pihak ketiga yang dapat melihat kueri DNS Anda.

Mengapa Menjalankan Resolver DoH Anda Sendiri?

Sudah ada beberapa resolver DNS publik seperti 1.1.1.1 dan 9.9.9.9 yang mendukung DNS melalui HTTPS, sehingga Anda dapat menggunakannya jika Anda tidak memiliki keterampilan atau waktu untuk menjalankannya sendiri. Dimulai dengan Firefox versi 61, Anda dapat mengaktifkan DNS melalui HTTPS di pengaturan browser, yang merupakan kemajuan besar untuk keamanan dan privasi Internet. Firefox menggunakan resolver Cloudflare (1.1.1.1) secara default. Namun, beberapa orang berpendapat bahwa ini memungkinkan Cloudflare untuk mengumpulkan informasi tentang pengguna Firefox. Mereka tampaknya lebih percaya pada ISP mereka daripada Cloudflare. Saya pikir jika Anda paranoid tentang privasi, Anda harus menjalankan resolver DoH Anda sendiri, sehingga Cloudflare maupun ISP Anda tidak dapat memata-matai Anda.

DoH vs DoT

Ada protokol lain yang juga bertujuan untuk mengenkripsi kueri DNS. Ini disebut DNS melalui TLS (Dot). Apa keuntungan menggunakan DNS dibandingkan HTTPS?

Untuk orang yang tinggal di negara dengan sensor internet yang ketat seperti China, lebih menguntungkan menggunakan DoH.

  • DoT beroperasi pada port TCP 853 , yang dapat dengan mudah diblokir oleh firewall nasional.
  • DoH beroperasi pada port TCP 443 , yang merupakan port standar untuk situs web HTTPS, yang membuat DoH sangat sulit untuk diblokir, karena jika port TCP 443 diblokir, maka hampir semua situs web HTTPS juga akan diblokir.

Resolver DoH saya berjalan di VPS (virtual private server) yang terletak di luar China dan Great Firewall of China tidak dapat mencegat permintaan DNS saya. Saya bahkan dapat menyembunyikan alamat IP resolver DoH saya di balik Cloudflare CDN (Content Delivery Network).

Keuntungan lain dari DoH adalah memungkinkan aplikasi web mengakses informasi DNS melalui API browser yang ada, jadi tidak diperlukan stub resolver.

Dukungan DoH di Resolver DNS Utama

  • BIND akan mendukung DoH di versi 9.17, yang masih dalam pengembangan. Debian 10 dikirimkan dengan BIND 9.11.
  • Simpul penyelesai mendukung DoH sejak versi 4.0.0. Versi terbaru saat ini adalah 5.3.2. Ini memiliki repositori resmi untuk Debian, Debian, CentOS, Fedora.
  • Tidak terikat mendukung DoH sejak versi 1.12.0.
  • Rekursor PowerDNS tidak mendukung DoH saat ini.

Sebenarnya, saya lebih suka menjalankan resolver DoH dengan DNSdist , yang menambahkan dukungan DoH di versi 1.4. Versi terbaru saat ini adalah 1.6. Ini memiliki repositori resmi untuk Debian, Raspbian, Debian, dan CentOS. DNSdist adalah penyeimbang beban DNS yang dapat meneruskan kueri DNS ke resolver DNS backend, jadi apa pun resolver DNS yang Anda gunakan, Anda dapat menggunakan DNSdist untuk menjalankan server DoH Anda sendiri. DNSdist dikembangkan oleh tim PowerDNS.

Persyaratan

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

  • Siapkan Resolver DNS BIND9 Anda Sendiri di Debian 10 Buster

Setelah DNS resolver Anda aktif dan berjalan, ikuti petunjuk di bawah ini.

Langkah 1:Instal DNSdist di Server Debian

Disarankan untuk menginstal DNSdist dari repositori upstream, sehingga Anda akan memiliki versi stabil terbaru. Pertama, Anda perlu membuat file daftar sumber untuk DNSdist.

Debian 10

echo "deb [arch=amd64] http://repo.powerdns.com/debian buster-dnsdist-16 main" | sudo tee /etc/apt/sources.list.d/pdns.list

Debian 9

echo "deb [arch=amd64] http://repo.powerdns.com/debian stretch-dnsdist-15 main" | sudo tee /etc/apt/sources.list.d/pdns.list

Selanjutnya, kami membuat file preferensi untuk DNSdist untuk menyematkan paket, sehingga kami tidak akan secara tidak sengaja menginstal DNSdist dari repositori lain.

sudo nano /etc/apt/preferences.d/dnsdist

Tambahkan baris berikut ke dalam file.

Package: dnsdist*
Pin: origin repo.powerdns.com
Pin-Priority: 600

Simpan dan tutup file. Kemudian jalankan perintah berikut untuk mengimpor kunci publik PowerDNS, sehingga manajer paket APT dapat memverifikasi interitas paket perangkat lunak yang diunduh dari repositori ini.

curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add -

Selanjutnya, perbarui daftar repositori dan instal DNSdist.

sudo apt update

sudo apt install dnsdist

Secara default, DNSdist mencoba mengikat ke port 53. Karena Anda memiliki resolver DNS yang sudah ada seperti BIND yang mendengarkan pada port 53, dnsdist.service akan gagal untuk memulai.

Karena kami hanya menggunakan resolver DoH dan tidak peduli dengan penyeimbangan beban DNS, kami dapat mengonfigurasi DNSdist untuk mendengarkan di port lain. Edit file konfigurasi DNSdist.

sudo nano /etc/dnsdist/dnsdist.conf

Tidak ada konten dalam file ini. Untuk saat ini, cukup tambahkan baris berikut dalam file ini, sehingga DNSdist akan mendengarkan pada port TCP dan UDP 5353, bukan port 53.

setLocal("127.0.0.1:5353")

Simpan dan tutup file. Kemudian restart DNSdist.

sudo systemctl restart dnsdist

Periksa statusnya.

systemctl status dnsdist

Seharusnya aktif (berjalan) .

Langkah 2:Instal Let's Encrypt Client (Certbot) di Server Debian

DNS melalui HTTPS 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 Debian.

sudo apt install certbot

Untuk memeriksa nomor versi, jalankan

certbot --version

Contoh keluaran:

certbot 0.31.0

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

Saya sarankan menggunakan standalone atau webroot plugin untuk mendapatkan sertifikat TLS untuk dnsdist.

Plugin Mandiri

Jika tidak ada server web yang berjalan di server Debian Anda, Anda dapat menggunakan plugin mandiri untuk mendapatkan sertifikat TLS dari Let's Encrypt. Buat DNS A record untuk subdomain (doh.example.com), lalu jalankan perintah berikut.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d doh.example.com

Dimana:

  • certonly :Dapatkan sertifikat tetapi jangan menginstalnya.
  • --standalone :Gunakan plugin mandiri untuk mendapatkan sertifikat
  • --preferred-challenges http :Lakukan tantangan http-01 untuk memvalidasi domain kami, yang akan menggunakan port 80.
  • --agree-tos :Setuju dengan persyaratan layanan Let's Encrypt.
  • --email :Alamat email digunakan untuk pendaftaran dan pemulihan akun.
  • -d :Tentukan nama domain Anda.

Menggunakan Plugin webroot

Jika server Debian Anda memiliki server web yang mendengarkan pada port 80 dan 443, maka sebaiknya gunakan plugin webroot untuk mendapatkan sertifikat karena plugin webroot berfungsi dengan hampir semua server web dan kami tidak perlu menginstal sertifikat di server web.

Pertama, Anda perlu membuat host virtual untuk doh.example.com.

Apache

Jika Anda menggunakan Apache, maka

sudo nano /etc/apache2/sites-available/doh.example.com.conf

Dan rekatkan baris berikut ke dalam file.

<VirtualHost *:80>        
        ServerName doh.example.com

        DocumentRoot /var/www/dnsdist
</VirtualHost>

Simpan dan tutup file. Kemudian buat direktori root web.

sudo mkdir /var/www/dnsdist

Tetapkan www-data (pengguna Apache) sebagai pemilik root web.

sudo chown www-data:www-data /var/www/dnsdist -R

Aktifkan host virtual ini.

sudo a2ensite doh.example.com

Muat ulang Apache agar perubahan diterapkan.

sudo systemctl reload apache2

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 doh.example.com -w /var/www/dnsdist

Nginx

Jika Anda menggunakan Nginx, maka

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

Rekatkan baris berikut ke dalam file.

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

      root /var/www/dnsdist/;

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

Simpan dan tutup file. Kemudian buat direktori root web.

sudo mkdir -p /var/www/dnsdist

Tetapkan www-data (pengguna Nginx) sebagai pemilik root web.

sudo chown www-data:www-data /var/www/dnsdist -R

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 doh.example.com -w /var/www/dnsdist

Langkah 4:Aktifkan DoH di DNSdist

Edit file konfigurasi DNSdist.

sudo nano /etc/dnsdist/dnsdist.conf

Tambahkan baris berikut ke dalam file.

-- allow query from all IP addresses
addACL('0.0.0.0/0')

-- add a DoH resolver listening on port 443 of all interfaces
addDOHLocal("0.0.0.0:443", "/etc/letsencrypt/live/doh.example.com/fullchain.pem", "/etc/letsencrypt/live/doh.example.com/privkey.pem", { "/" }, { doTCP=true, reusePort=true, tcpFastOpenSize=0 })

-- downstream resolver
newServer({address="127.0.0.1:53",qps=5, name="resolver1"})

Simpan dan tutup file. DNSdist berjalan sebagai _dnsdist pengguna, jadi kita perlu memberikan _dnsdist izin pengguna untuk membaca sertifikat TLS dengan perintah berikut.

sudo apt install acl

sudo setfacl -R -m u:_dnsdist:rx /etc/letsencrypt/

Kemudian periksa sintaks file konfigurasi.

sudo dnsdist --check-config

Jika sintaksnya ok, mulai ulang DNSdist.

sudo systemctl restart dnsdist

Perhatikan bahwa jika ada server web yang mendengarkan pada port TCP 443, DNSdist akan gagal untuk memulai ulang. Anda dapat menghentikan sementara server web. Cara membuat web server dan DNSdist menggunakan TCP port 443 secara bersamaan akan saya jelaskan di akhir artikel ini.

Langkah 5:Konfigurasi DoH di Browser Web Firefox

Buka Preferensi -> Umum dan gulir ke bawah ke bawah untuk mengonfigurasi Setelan Jaringan . Aktifkan DNS melalui HTTPS, dan atur resolver DoH Anda sendiri.

Kami kemudian dapat menyempurnakan konfigurasi DoH dengan masuk ke about:config tab di Firefox.

jaringan.trr.mode

Secara default, network.trr.mode parameter di Firefox disetel ke 2 , yang berarti jika kueri DoH gagal, Firefox akan meneruskan kueri DNS ke sistem host. Saya ingin selalu menggunakan resolver DoH, jadi ubah network.trr.mode ke 3 jadi resolver host tidak akan digunakan. Ini memungkinkan kami memiliki cara mudah untuk menguji apakah resolver DoH Anda berfungsi.

network.trr.allow-rfc1918

Ini disetel ke false secara default, yang berarti jika respons DNS menyertakan alamat IP pribadi, maka itu akan dianggap sebagai respons salah yang tidak akan digunakan. Jika Anda menggunakan zona kebijakan respons di BIND, Anda mungkin memiliki beberapa nama host yang menunjuk ke alamat IP pribadi, lalu setel nilai ini ke true .

jaringan.trr.bootstrapAddress

Firefox perlu mencari alamat IP dari resolver DoH untuk mengirim kueri DNS. Anda dapat memasukkan alamat IP di bidang ini untuk menghilangkan kueri awal ini.

Pengujian

Sekarang masukkan nama domain seperti linuxbabe.com di bilah alamat Firefox. Jika halaman web dimuat secara normal, itu pertanda baik bahwa resolver DoH Anda berfungsi. Kemudian pergi ke konsol terminal server DNS Anda dan periksa log permintaan DNS. Saya menggunakan BIND, jadi saya memasukkan perintah berikut untuk memeriksa log permintaan DNS.

sudo journalctl -eu bind9

Seperti yang Anda lihat dari log BIND di bawah, Firefox menanyakan domain berikut.

  • www.linuxbabe.com :situs web saya
  • fonts.gstatic.com :Ini menyajikan font Google di situs web saya
  • cdn.shareaholic.net :widget berbagi di situs web saya
  • newsletter.linuxbabe.com :platform pemasaran email saya yang dihosting sendiri.
  • translate.google.com :widget terjemahan Google di situs web saya

Log kueri di atas memberi tahu saya bahwa DNS saya melalui resolver HTTPS berfungsi. Jika saya menghentikan penyelesai BIND (sudo systemctl stop named ), Firefox memberi tahu saya bahwa situs itu tidak dapat ditemukan. Dan ketika saya memulai BIND, halaman web dimuat kembali.

Langkah 6:Konfigurasi Klien DoH di Desktop Debian

Saya tahu ada 3 klien DNS open-source di Linux yang mendukung DNS terenkripsi.

  • diselesaikan dengan sistem
  • gemuk
  • dnscrypt-proxy

Saat ini, dnscrypt-proxy (versi 2.x) adalah implementasi klien DoH terbaik di Linux, jadi saya akan menunjukkan cara menggunakannya. Jalankan perintah berikut untuk menginstal dnscrypt-proxy di desktop Debian Anda.

sudo apt install dnscrypt-proxy

Ini akan dimulai secara otomatis, seperti yang Anda lihat dengan:

sudo systemctl status dnscrypt-proxy

Jika tidak memulai, Anda dapat menjalankan perintah berikut untuk memulainya.

sudo systemctl enable dnscrypt-proxy --now

Periksa alamat mendengarkan.

sudo ss -lnptu | grep dnscrypt-proxy

Di komputer saya, dnscrypt-proxy mendengarkan 127.0.2.1:53 . Ada layanan systemd lain (dnscrypt-proxy-resolvconf.service ) diinstal oleh dnscrypt-proxy,

systemctl status dnscrypt-proxy-resolvconf

Ini adalah layanan yang menyetel 127.0.2.1 sebagai resolver di komputer Anda. Anda dapat memeriksa resolver DNS saat ini untuk komputer Anda dengan:

cat /etc/resolv.conf

Secara default, dnscrypt-proxy menggunakan Clouldflare sebagai resolver DoH upstream. Untuk menggunakan resolver DoH Anda sendiri, edit file konfigurasi.

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Temukan baris berikut

server_names = ['cloudflare']

Ubah ke nama host penyelesai DoH Anda. Perhatikan bahwa lokasi parameter itu penting. Anda tidak boleh memasukkan server_names parameter di tempat lain dalam file ini.

server_names = ['doh.example.com']

Kemudian beri komentar pada [sources] bagian.

#[sources]
#  [sources.'public-resolvers']
#  url = 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md'
#  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
#  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
#  refresh_delay = 72
#  prefix = ''

Kita perlu menambahkan resolver DoH kita sendiri seperti di bawah ini di bagian bawah file ini.

[static]  
  [static.'doh.example.com']
  stamp = 'sdns://AgUAAAAAAAAAAAAOZG5zLmdvb2dsZS5jb20NL2V4cGVyaW1lbnRhbA'

Cap berisi nama host penyelesai DoH, alamat IP, dan jalur kueri Anda. Untuk mendapatkan cap Anda sendiri, gunakan kalkulator cap DNS online. Pilih DNS-over-HTTPS sebagai protokol, dan masukkan alamat IP, nama host, dan jalur kueri. Jika Anda mengikuti tutorial ini untuk menyiapkan resolver DoH Anda sendiri, jalurnya harus disetel hanya ke / . Jika Anda tidak mengaktifkan DNSSEC di resolver, hapus centang pada kotak DNSSEC.

Setelah Anda menambahkan cap DNS Anda, simpan dan tutup file. Kemudian restart dnscrypt-proxy .

sudo systemctl restart dnscrypt-proxy

Periksa statusnya. Pastikan itu berjalan.

systemctl status dnscrypt-proxy

Sekarang Anda dapat menguji apakah dnscrypt-proxy berfungsi.

Jika Anda tidak ingin memublikasikan DNS Anda melalui resolver HTTPS ke seluruh dunia, Anda dapat menghapus catatan DNS A dari nama host resolver DoH Anda, karena dnscrypt-proxy memiliki alamat IP di cap DNS.

Mengonfigurasi DoH di iOS

iOS mendukung DNS melalui HTTPS sejak iOS 14. Namun, tidak ada opsi konfigurasi sederhana di iOS untuk mengatur resolver DoH. Anda perlu membuat .mobileconfig file dan instal di iOS. Agak rumit untuk menghasilkan .mobileconfig iOS yang ditandatangani berkas.

Jika resolver DoH Anda tidak akan digunakan secara publik, Anda dapat membuat file sederhana yang tidak ditandatangani. Gunakan editor teks untuk membuat file dengan .mobileconfig perpanjangan. Salin dan tempel teks berikut. Ganti alamat IP dan URL server.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>PayloadContent</key>
        <array>
                <dict>
                        <key>DNSSettings</key>
                        <dict>
                                <key>DNSProtocol</key>
                                <string>HTTPS</string>
                                <key>ServerAddresses</key>
                                <array>
                                        <string>12.34.56.78</string>
                                </array>
                                <key>ServerURL</key>
                                <string>https://doh.example.com/</string>
                        </dict>
                        <key>PayloadDescription</key>
                        <string>Configures device to use Encrypted DNS over HTTPS</string>
                        <key>PayloadDisplayName</key>
                        <string>My own DNS over HTTPS Resolver</string>
                        <key>PayloadIdentifier</key>
                        <string>com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4</string>
                        <key>PayloadType</key>
                        <string>com.apple.dnsSettings.managed</string>
                        <key>PayloadUUID</key>
                        <string>35d5c8a0-afa6-4b36-a9fe-099a997b44ad</string>
                        <key>PayloadVersion</key>
                        <integer>1</integer>
                        <key>ProhibitDisablement</key>
                        <false/>
                </dict>
        </array>
        <key>PayloadDescription</key>
        <string>Adds self-hosted DoH resolver to Big Sur and iOS 14 based systems</string>
        <key>PayloadDisplayName</key>
        <string>My own DNS over HTTPS</string>
        <key>PayloadIdentifier</key>
        <string>com.example.doh</string>
        <key>PayloadRemovalDisallowed</key>
        <false/>
        <key>PayloadType</key>
        <string>Configuration</string>
        <key>PayloadUUID</key>
        <string>A4475135-633A-4F15-A79B-BE15093DC97A</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
</dict>
</plist>

Simpan dan tutup file. Kemudian Anda dapat mengirim file sebagai lampiran email ke iOS Anda. Buka email di iOS dan ketuk lampiran untuk mengunduh file konfigurasi. Setelah itu, buka Settings iOS -> Profile Downloaded . Ini akan meminta Anda untuk menginstal profil.

Ketuk tombol Instal dan masukkan kata sandi iOS Anda untuk menginstalnya. Ketuk tombol Instal lagi.

Setelah terinstal, buka Settings iOS -> VPN & Network . Gulir ke bawah ke buttom untuk memilih resolver DNS untuk sistem iOS Anda. Perhatikan bahwa resolver DoH ini akan menimpa resolver DNS yang disediakan oleh VPN seperti ProtonVPN. iOS Anda akan selalu menggunakan resolver DoH Anda.

Jika Anda ingin menghapus .mobileconfig file dari iOS, buka Settings -> General -> Profile .

Buat DNSdist dan server web menggunakan port 443 secara bersamaan

Penyelesai DNS over HTTPS perlu mengikat ke port 443. Jika Anda sudah memiliki Apache/Nginx yang mendengarkan pada port 443, maka DNSdist tidak dapat mengikat ke port 443. Biasanya sebuah port hanya dapat digunakan oleh satu proses. Namun, kita dapat menggunakan HAproxy (High Availability Proxy) dan SNI (Server Name Indication) untuk membuat DNSdist dan Apache/Nginx menggunakan port 443 secara bersamaan.

Konfigurasi DNSdist

Edit file konfigurasi DNSdist.

sudo nano /etc/dnsdist/dnsdist.conf

Ubah alamat mendengarkan DoH menjadi 127.0.0.1 .

addDOHLocal("127.0.0.1:443", "/etc/letsencrypt/live/doh.example.com/fullchain.pem", "/etc/letsencrypt/live/doh.example.com/privkey.pem", { "/" }, { doTCP=true, reusePort=true, tcpFastOpenSize=0 })

Simpan dan tutup file. Kemudian restart DNSdist.

sudo systemctl restart dnsdist

Konfigurasi Nginx

Jika Anda menggunakan Nginx, edit file blok server.

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

Di blok server SSL, temukan arahan berikut.

listen 443 ssl;

Ubah ke

listen 127.0.0.2:443 ssl;

Kali ini kita membuatnya mendengarkan di 127.0.0.2:443 karena 127.0.0.1:443 sudah diambil oleh DNSdist. Simpan dan tutup file. File konfigurasi utama Nginx /etc/nginx/nginx.conf dan server default memblokir /etc/nginx/sites-enabled/default mungkin menyertakan host virtual default yang mendengarkan pada 443, jadi Anda mungkin perlu mengedit file ini juga.

Kemudian mulai ulang Nginx.

sudo systemctl restart nginx

Konfigurasi Apache

Jika Anda menggunakan server web Apache, edit file host virtual Anda.

sudo nano /etc/apache2/sites-enabled/example.com.conf

Di host virtual SSL, ubah

<VirtualHost *:443>

Untuk

<VirtualHost 127.0.0.2:443>

Kali ini kita membuatnya mendengarkan di 127.0.0.2:443 karena 127.0.0.1:443 sudah diambil oleh DNSdist. Simpan dan tutup file. Kemudian edit /etc/apache2/ports.conf berkas.

sudo nano /etc/apache2/ports.conf

Ubah

Listen 443

Untuk

Listen 127.0.0.2:443

Simpan dan tutup file. Mulai ulang Apache.

sudo systemctl restart apache2

Konfigurasi HAProxy

Sekarang instal HAproxy.

sudo apt install haproxy

Mulai HAProxy

sudo systemctl start haproxy

Edit file konfigurasi.

sudo nano /etc/haproxy/haproxy.cfg

Jika Anda menggunakan Nginx , salin dan tempel baris berikut ke akhir file. Ganti 12.34.56.78 dengan alamat IP publik server Anda. Ganti doh.example.com dengan nama domain yang digunakan oleh DNSdist dan www.example.com dengan nama domain yang digunakan oleh server web Anda.

frontend https
   bind 12.34.56.78:443
   mode tcp
   tcp-request inspect-delay 5s
   tcp-request content accept if { req_ssl_hello_type 1 }

   use_backend dnsdist if { req_ssl_sni -i doh.example.com }
   use_backend nginx if { req_ssl_sni -i www.example.com }
   use_backend nginx if { req_ssl_sni -i example.com }

   default_backend dnsdist

backend dnsdist
   mode tcp
   option ssl-hello-chk
   server dnsdist 127.0.0.1:443

backend nginx
   mode tcp
   option ssl-hello-chk
   server nginx 127.0.0.2:443 check

Jika Anda menggunakan Apache , salin dan tempel baris berikut ke akhir file. Ganti 12.34.56.78 dengan alamat IP publik server Anda. Ganti doh.example.com dengan nama domain yang digunakan oleh DNSdist dan www.example.com dengan nama domain yang digunakan oleh server web Anda.

frontend https
   bind 12.34.56.78:443
   mode tcp
   tcp-request inspect-delay 5s
   tcp-request content accept if { req_ssl_hello_type 1 }

   use_backend dnsdist if { req_ssl_sni -i doh.example.com }
   use_backend apache if { req_ssl_sni -i www.example.com }
   use_backend apache if { req_ssl_sni -i example.com }

   default_backend dnsdist

backend dnsdist
   mode tcp
   option ssl-hello-chk
   server dnsdist 127.0.0.1:443

backend apache
    mode tcp
    option ssl-hello-chk
    server apache 127.0.0.2:443 check

Simpan dan tutup file. Kemudian restart HAproxy.

sudo systemctl restart haproxy

Pada konfigurasi di atas, kami menggunakan fitur SNI (Server Name Indication) di TLS untuk membedakan traffic VPN dan traffic HTTPS normal.

  • Saat doh.example.com ada di Klien TLS Halo, HAProxy mengalihkan lalu lintas ke backend DNSdist.
  • Saat www.example.com ada di Klien TLS Halo, HAProxy mengalihkan lalu lintas ke backend Apache/nginx.
  • Jika klien tidak menentukan nama server di TLS Client Hello, maka HAproxy akan menggunakan backend default (DNSdist).

Anda dapat menguji pengaturan ini dengan openssl alat. Pertama, jalankan perintah berikut beberapa kali.

echo | openssl s_client -connect your-server-IP:443 | grep subject

Kami tidak menentukan nama server dalam perintah di atas, jadi HAproxy akan selalu meneruskan permintaan ke backend default (DNSdist), dan sertifikatnya akan dikirim ke klien. Selanjutnya, jalankan dua perintah berikut.

echo | openssl s_client -servername www.example.com -connect your-server-IP:443 | grep subject

echo | openssl s_client -servername doh.example.com -connect your-server-IP:443 | grep subject

Sekarang kita tentukan nama server dalam perintah, sehingga HAproxy akan meneruskan permintaan sesuai dengan aturan SNI yang kita tetapkan.

Saat memperbarui sertifikat Let's Encrypt untuk situs web Anda, sebaiknya gunakan http-01 tantangan alih-alih tls-alpn-01 tantangan, karena HAproxy mendengarkan pada port 443 alamat IP publik, sehingga dapat mengganggu proses pembaruan.

sudo certbot renew --preferred-challenges http-01

Debian
  1. Cara Mengatur Firewall dengan UFW di Debian 10

  2. Cara Menyebarkan Server DNS Dinamis dengan Docker di Debian 10

  3. Siapkan Server Mail dengan PostfixAdmin di Debian 9

  1. Cara Mengatur Firewall dengan UFW di Debian 9

  2. Cara Mengatur Server Mail dengan PostfixAdmin di Debian 11

  3. Cara Mengatur Nginx dengan Modul Google Pagespeed di Debian 11

  1. Cara Mengatur Server Mail dengan Modoboa di Debian 10

  2. Cara Mengatur Server FTP Aman di Debian 10 dengan Pure-FTPd

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