Mengamankan Server DNS OpenBSD dengan DNSProxy dan DNS Over HTTPS

· 2 min read

Bagi Anda yang baru mengenal DNSProxy, mungkin masih bingung bagaimana cara menjalankannya. Kebingungan itu akan segera hilang jika Anda terus belajar

Seperti yang kita ketahui, port SSH 22 dan port HTTP 80 sangat rentan disusupi oleh para hacker. Kedua port ini sangat populer karena dianggap sebagai pilihan yang tepat untuk memasuki jaringan internet milik orang lain. Selain itu, port 53 DNS juga sangat digemari para penyusup untuk mengambil semua data kita. Oleh karena itu, port 53 harus kita lindungi agar tetap aman dari para penyusup.

Banyak cara yang bisa dilakukan orang untuk meningkatkan sistem keamanan port 53. Ada yang menggunakan bantuan firewall untuk mengenkripsi server DNS dan ada pula yang berbayar. Namun, tahukah Anda bahwa ada cara yang paling murah dan gratis untuk mengamankan jaringan server DNS kita. Ada banyak aplikasi yang bisa mengenkripsi lalu lintas server DNS, salah satu yang umum digunakan adalah dengan mengalihkan port DNS ke Domain over TLS atau Domain over HTTPS. Dengan DOT dan DOH, kita bisa mengenkripsi setiap lalu lintas yang mengakses port 53 dari server kita.

Pada artikel ini akan dijelaskan proses instalasi dan pengaturan perangkat lunak DNSProxy dan DNS Over HTTPS pada sistem OpenBSD. Kami juga akan menjelaskan penggunaan kedua aplikasi ini pada server DNS Bernama ISC-Bind. Dalam implementasinya, kami akan menggunakan server DNS Bernama Bind sebagai Frontend DNSProxy dan DNS Over HTTPS.


1. Go Path Environment

Sebelum kita menginstal DNSProxy, Anda harus membuat path environment Go Golang dengan Bash, mengapa? Karena kedua aplikasi yang akan kita bahas dibuat dalam bahasa Go dan secara default OpenBSD akan menempatkan Path Go di /root. Seperti yang kita ketahui, jika proses instalasi OpenBSD dilakukan secara default, kapasitas /root sangat kecil, sehingga mungkin tidak cukup untuk menyimpan Path Go.

Install Bash dan buat file /root/.bash_profile
ns3# pkg_add bash
ns3# touch /root/.bash_profile
Pada file /root/.bash_profile, ketik skrip di bawah ini.

Script /root/.bash_profile
export GOVERSION=go1.22+
export GOCACHE=/var/go/.cache/go-build
export GOENV=/var/go/env
export GOMODCACHE=/var/go/pkg/mod
export GOPATH=/var/go
export GOROOT=/usr/local/go
export GOHOSTOS=openbsd
export GOTOOLDIR=/usr/local/go/pkg/tool/openbsd_amd64
Untuk mengaktifkan jalur lingkungan Go, Anda menjalankan Bash diikuti dengan perintah sumber untuk mengeksekusinya.

Aktifkan Go path
ns3# bash
bash-5.2# source /root/.bash_profile


2. Setup DNSProxy

Pada bagian awal ini kita akan membahas DNSProxy. OpenBSD berbeda dengan FreeBSD, kawannya FreeBSD sangat kaya akan dukungan perangkat lunak, hampir ratusan perangkat lunak tersedia di repositori FreeBSD, namun, di OpenBSD dukungan perangkat lunaknya sangat sedikit. Salah satunya adalah perangkat lunak yang akan kita bahas di artikel ini. DNSProxy tidak tersedia di repositori OpenBSD. Jika Anda ingin menggunakan perangkat lunak ini, Anda harus mengkloningnya dari server Github.

a. Install DNSProxy

Sebelum kita membahas konfigurasi lebih lanjut, langkah pertama adalah mengkloning perangkat lunak DNSProxy dari Github. Gunakan perintah di bawah ini untuk mengunduh DNSProxy dari Github.

Kloning repositori DNSProxy
ns3# cd /etc
ns3# git clone https://github.com/AdguardTeam/dnsproxy.git
Setelah Anda menyelesaikan proses pengunduhan, silakan lanjutkan dengan proses instalasi. Sebagai panduan, Anda dapat mengikuti perintah di bawah ini.

Install DNSProxy dengan Bash
ns3# bash
bash-5.2# go version      
bash-5.2# cd /etc/dnsproxy
bash-5.2# go build -v ./...
Ketika proses pembuatan DNSProxy telah selesai, kita akan menjalankan perintah gmake untuk melanjutkan proses instalasi.

Install DNSProxy
bash-5.2# gmake
bash-5.2# gmake build
Proses pembuatan di atas akan menghasilkan berkas biner "dnsproxy". Anda harus memindahkan berkas biner tersebut agar dapat dijalankan di semua level pengguna.

Pindahkan file dnsproxy ke /usr/local/bin/
bash-5.2# mv /etc/dnsproxy/dnsproxy /usr/local/bin/
bash-5.2# exit

b. Konfigurasi DNSProxy

Bagi Anda yang baru mengenal DNSProxy, mungkin masih bingung bagaimana cara menjalankannya. Kebingungan itu akan segera hilang jika Anda terus belajar dan membaca artikel ini hingga selesai. Ada panduan mudah untuk menjalankan DNSProxu, Anda tinggal mengetik perintah berikut.

Membuka Menu help DNSProxy
ns3# dnsproxy -help
Secara default file konfigurasi utama adalah /etc/dnsproxy/config.yaml.dist, untuk menghindari kesalahan pengetikan skrip, Anda harus mencadangkan file ini.

Backup /etc/dnsproxy/config.yaml.dist
ns3# cp -R /etc/dnsproxy/config.yaml.dist /etc/dnsproxy/config.yaml.dist.back
Sekarang coba buka file /etc/dnsproxy/config.yaml.dist lalu masukkan skrip seperti di bawah ini.

Script /etc/dnsproxy/config.yaml.dist
bootstrap:
   - "8.8.8.8:53"
listen-addrs:
  -  "192.168.5.3"
listen-ports:
  -  8553
max-go-routines: 0
ratelimit: 0
ratelimit-subnet-len-ipv4: 24
#ratelimit-subnet-len-ipv6: 64
udp-buf-size: 0
upstream:
  - "tls://dns.adguard.com"
  - "tcp://dns.google"
  - "tcp://1.1.1.1"
  - "https://dns.google/dns-query"
  - "https://dns.adguard.com/dns-query"  
  - "udp://dns.google"  
  - "sdns://AQMAAAAAAAAAETk0LjE0MC4xNC4xNDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20"
  - "sdns://AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk"
  - "9.9.9.9:53"
  - "1.0.0.1:53"
timeout: '10s'
#http3: 'yes'
https-port:
   - 443
tls-port:
   - 853
#dnscrypt-port: 
#    - 5353
##tls-crt: "/etc/ssl/dnsproxy/ssl2/etcd/certs/ca.pem"
##tls-key: "/etc/ssl/dnsproxy/ssl2/etcd/certs/ca-key.pem"
##tls-cert-bundle: /etc/ssl/dnsproxy/ssl1/ca.crt

tls-crt: "/etc/ssl/dnsproxy/ca.pem"
tls-key: "/etc/ssl/dnsproxy/ca-key.pem"

#tls-min-version: 1.0
#tls-max-version: 1.3

c. Membuat Sertificate TLS/SSL

Karena di DNSProxy kita akan menjalankan protokol TLS, Anda harus membuat sertifikat TLS/SSL terlebih dahulu. Dengan sertifikat ini, semua lalu lintas DNS Anda akan dienkripsi. Dalam artikel ini kita akan menggunakan sertifikat dari CloudFlare CFSSL. Untuk informasi lengkap tentang cara menginstal dan mengonfigurasi sertifikat CloudFlare CFSSL di OpenBSD, Anda dapat membuka tautan di bawah ini.

Kami membuat 4 file json sebagai berikut: ca.json, cfssl.json, dns-host.json dan intermediate-ca.json. Ikuti panduan di bawah ini untuk membuat 4 file json.

Create json file
ns3# mkdir -p /etc/ssl/dnsproxy
ns3# touch /etc/ssl/dnsproxy/ca.json
ns3# touch /etc/ssl/dnsproxy/cfssl.json
ns3# touch /etc/ssl/dnsproxy/dns-host.json
ns3# touch /etc/ssl/dnsproxy/intermediate-ca.json
Create permissions
ns3# chown -R 770 /etc/ssl/dnsproxy/ca.json
ns3# chown -R 770 /etc/ssl/dnsproxy/cfssl.json
ns3# chown -R 770 /etc/ssl/dnsproxy/dns-host.json
ns3# chown -R 770 /etc/ssl/dnsproxy/intermediate-ca.json
Pada keempat file json, masukkan skrip di bawah ini.

Script /etc/ssl/dnsproxy/ca.json
{
    "CN": "kursor.my.id",
    "key": {
      "algo": "ecdsa",
      "size": 256
    },
    "names": [
    {
      "C":  "LI",
      "L":  "Vaduz",
      "O":  "Internet Widgets, Inc.",
      "OU": "WWW"
    }
   ]
  }
Script /etc/ssl/dnsproxy/cfssl.json
{
  "signing": {
    "default": {
      "expiry": "8760h"
    },
    "profiles": {
      "intermediate_ca": {
        "usages": [
            "signing",
            "digital signature",
            "key encipherment",
            "cert sign",
            "crl sign",
            "server auth",
            "client auth"
        ],
        "expiry": "8760h",
        "ca_constraint": {
            "is_ca": true,
            "max_path_len": 0, 
            "max_path_len_zero": true
        }
      },
      "peer": {
        "usages": [
            "signing",
            "digital signature",
            "key encipherment", 
            "client auth",
            "server auth"
        ],
        "expiry": "8760h"
      },
      "server": {
        "usages": [
          "signing",
          "digital signing",
          "key encipherment",
          "server auth"
        ],
        "expiry": "8760h"
      },
      "client": {
        "usages": [
          "signing",
          "digital signature",
          "key encipherment", 
          "client auth"
        ],
        "expiry": "8760h"
      }
    }
  }
}
Script /etc/ssl/dnsproxy/dns-host.json
{
  "CN": "ns3.kursor.my.id",
  "key": {
    "algo": "ecdsa",
    "size": 256
  },
  "names": [
  {
    "C":  "LI",
    "L":  "Vaduz",
    "O":  "Internet Widgets, Inc.",
    "OU": "WWW"
  }
 ],
 "hosts": [
  "ns3.kursor.my.id"
  ]
}
Script /etc/ssl/dnsproxy/intermediate-ca.json
{
  "CN": "kursor.my.id",
  "key": {
    "algo": "ecdsa",
    "size": 256
  },
  "names": [
  {
    "C":  "LI",
    "L":  "Vaduz",
    "O":  "Internet Widgets, Inc.",
    "OU": "WWW"
  }
 ],
  "ca": {
    "expiry": "42720h"
  }
}
Hasilkan sertifikat TLS. Untuk contoh ini, saya akan menggunakan sertifikat yang ditandatangani sendiri. Root CA.

Create certificate TLS/SSL
ns3# cd /etc/ssl/dnsproxy
ns3# cfssl gencert -initca ca.json | cfssljson -bare ca
ns3# cfssl gencert -initca intermediate-ca.json | cfssljson -bare intermediate_ca
ns3# cfssl sign -ca ca.pem -ca-key ca-key.pem -config cfssl.json -profile intermediate_ca intermediate_ca.csr | cfssljson -bare intermediate_ca
ns3# cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=server dns-host.json | cfssljson -bare dns-server dnsproxy

d. Jalankan DNSProxy

Anda harus membuat skrip rc.d, sehingga DNSProxy dapat berjalan secara otomatis di OpenBSD. Anda dapat membuka direktori /etc/rc.d untuk membuat skrip Boot otomatis. Kita membuat file /etc/rc.d/dns_proxy.

Create /etc/dnsproxy/config.yaml.dist and permissions
ns3# touch /etc/rc.d/dns_proxy
ns3# chmod -R +x /etc/rc.d/dns_proxy
Pada file /etc/rc.d/dns_proxy Anda memasukkan skrip untuk melakukan booting. Anda dapat melihat contoh skrip di bawah ini.

Script /etc/rc.d/dns_proxy
#!/bin/ksh

daemon="/usr/local/bin/dnsproxy"
daemon_flags="--config-path=/etc/dnsproxy/config.yaml.dist"

. /etc/rc.d/rc.subr

pexp="${daemon}${daemon_flags:+ ${daemon_flags}}.*"

rc_bg=YES
rc_reload=NO

rc_cmd $1
Aktifkan dan jalankan DNSProxy.

Run DNSProxy
ns3# rcctl enable dns_proxy
ns3# rcctl restart dns_proxy
dns_proxy(ok)
dns_proxy(ok)
Langkah selanjutnya adalah menguji DNSProxy, apakah DNSProxy berjalan atau tidak.

Test DNSProxy
ns3# dig -p 8553 yahoo.com @192.168.5.3

3. Mengkonfigurasi dns-over-https

Pelajaran berikutnya kita akan menginstal "dns-over-https" di OpenBSD. dns-over-https merupakan klien & server DNS over HTTPS dengan performa tinggi. Dalam perangkat lunak ini terdapat dua berkas konfigurasi utama, yaitu doh-ser dan doh-client. Sama halnya dengan perangkat lunak DNSProxy, dns-over-https juga tidak tersedia di repositori OpenBSD. Anda dapat mengunduhnya dari repositori Github.

a. Instal dns-over-https

Proses instalasi dns-over-https hampir sama dengan DNSProxy. Kita tetap menggunakan Bash untuk menginstal dns-over-https. Proses konfigurasinya sama persis, tidak ada perbedaan dalam proses instalasi dan konfigurasi antara DNS-over-https dan DNSProxy.

Download dns-over-https
ns3# cd /usr/local
ns3# git clone https://github.com/m13253/dns-over-https.git
ns3# cd dns-over-https
Untuk menginstal DNS-over-https, kami menggunakan go dan gmake. Ikuti panduan di bawah ini untuk memulai proses instalasi DNS-over-https.

Install dns-over-https
ns3# bash
bash-5.2# cd /usr/local/dns-over-https
bash-5.2# go build -v ./...
bash-5.2# gmake
bash-5.2# gmake install

b. Membuat Sertificate TLS/SSL untuk dns-over-https

Cara membuat sertifikat TLS/SSL dns-over-https hampir sama dengan membuat sertifikat DNSProxy. Anda baca (c. Membuat Sertifikat TLS/SSL) dalam pembahasan DNSProxy. Kita akan meletakkan sertifikat dns-over-https di direktori /etc/ssl/dns-over-https.

Create json file
ns3# mkdir -p /etc/ssl/dns-over-https
ns3# cd /etc/ssl/dns-over-https 
ns3# cp -R /etc/ssl/dnsproxy/ca.json /etc/ssl/dns-over-https/
ns3# cp -R /etc/ssl/dnsproxy/cfssl.json /etc/ssl/dns-over-https/
ns3# cp -R /etc/ssl/dnsproxy/dns-host.json /etc/ssl/dns-over-https/
ns3# cp -R /etc/ssl/dnsproxy/intermediate-ca.json /etc/ssl/dns-over-https/

Create certificate TLS/SSL
ns3# cd /etc/ssl/dns-over-https
ns3# cfssl gencert -initca ca.json | cfssljson -bare ca
ns3# cfssl gencert -initca intermediate-ca.json | cfssljson -bare intermediate_ca
ns3# cfssl sign -ca ca.pem -ca-key ca-key.pem -config cfssl.json -profile intermediate_ca intermediate_ca.csr | cfssljson -bare intermediate_ca
ns3# cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=server dns-host.json | cfssljson -bare dns-server dnsproxy

Subscribe on LinkedIn Mengamankan Server DNS OpenBSD dengan DNSProxy dan DNS Over HTTPS

Enclosures Link: Mengamankan Server DNS OpenBSD dengan DNSProxy dan DNS Over HTTPS

Silahkan Berkomentar, Kakak...! Bunda...!

Posting Komentar