Mengamankan Server DNS OpenBSD dengan DNSProxy dan DNS Over HTTPS

Terbit: Perbarui:
Tags


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 (sever DNS). 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.

A. Mengidentifikasi jenis serangan DNS yang umum

Banyak cara para hacker untuk menyerang server DNS, Mari kita lihat jenis utama serangan siber DNS dan cara mempertahankan diri darinya.

  • Keracunan cache DNS (DNS spoofing)
  • Distributed denial of service (DDoS)
  • Serangan sinkhole DNS
  • Serangan amplifikasi DNS
  • Pembajakan domain
  • Serangan transfer zona
  • Phishing
  • Typosquatting
  • Kebocoran data registrar
  • DNS tunneling
  • Keracunan cache melalui malware
  • Serangan terkait DNS pada platform penyedia domain

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.

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

ns3# pkg_add bash
ns3# touch /root/.bash_profile

Pada berkas /root/.bash_profile, ketik skrip di bawah ini.

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 path lingkungan Go, jalankan Bash diikuti dengan perintah source untuk mengeksekusinya.

ns3# bash
bash-5.2# source /root/.bash_profile

C. Go Path Environment

Pada bagian pertama ini, kita akan membahas DNSProxy. Berbeda dengan FreeBSD yang memiliki beragam pilihan perangkat lunak dengan ratusan paket tersedia di repositorinya OpenBSD menawarkan dukungan perangkat lunak yang sangat terbatas. Salah satu perangkat lunak tersebut adalah yang akan kita bahas dalam artikel ini. DNSProxy tidak tersedia di repositori OpenBSD. Jika Anda ingin menggunakan perangkat lunak ini, Anda perlu mengkloningnya dari GitHub.

a. Instalasi DNSProxy

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

ns3# cd /etc
ns3# git clone https://github.com/AdguardTeam/dnsproxy.git

Setelah proses pengunduhan selesai, silakan lanjutkan dengan proses instalasi. Untuk panduan, Anda dapat mengikuti petunjuk di bawah ini.

ns3# bash
bash-5.2# go version      
bash-5.2# cd /etc/dnsproxy
bash-5.2# go build -v ./...

Setelah proses pembuatan DNSProxy selesai, kita akan menjalankan perintah gmake untuk melanjutkan proses instalasi.

bash-5.2# gmake
bash-5.2# gmake build

Proses build di atas akan menghasilkan file biner "dnsproxy". Anda perlu memindahkan file biner ini agar dapat menjalankannya pada semua tingkat pengguna.

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

b. Konfigurasi DNSProxy

Jika Anda baru mengenal DNSProxy, Anda mungkin bingung mengenai cara menggunakannya. Kebingungan tersebut akan segera hilang jika Anda terus mempelajarinya dan membaca artikel ini sampai selesai. Ada panduan mudah untuk menjalankan DNSProxy; cukup ketik perintah berikut.

ns3# dnsproxy -help

Secara default, file konfigurasi utamanya adalah /etc/dnsproxy/config.yaml.dist; untuk menghindari kesalahan pengetikan dalam skrip, sebaiknya Anda membuat cadangan file ini.

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.

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

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.

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

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.

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.

#!/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.

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.

ns3# dig -p 8553 yahoo.com @192.168.5.3

D. Mengkonfigurasi dns-over-https

Pelajaran berikutnya kita akan menginstal dns-over-https di OpenBSD. dns-over-https yang merupakan klien dan 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.

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.

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.

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/
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