Mengamankan Server DNS OpenBSD dengan DNSProxy dan DNS Over HTTPS
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
