Installasi PowerDNS-Admin Pada Debian 11
Sepertinya sudah cukup lama tidak melakukan update artikel pada blog ini :>. Pada kesempatan kali ini saya ingin mencoba membagikan step by step cara melakukan installasi PowerDNS pada debian 11.
PowerDNS ini menurut saya lebih menarik dan lebih efisien jika dibandingkan dengan bind9 karena pada powerdns memiliki sistem backend yang dapat terhubung dengan mysql dan api. Karena memiliki backend dan api maka powerdns ini juga memiliki web interface untuk kita melakukan management pada server DNS nantinya.
Tetapi dari segi performa menurut saya masih kalah dengan bind9 karena bind9 memiliki ukuran yang relatif kecil jika dibandingkan dengan PowerDNS-Admin. (Ini hanya alasan belaka sih :) gak ada sumbernya :>).
Installasi PowerDNS-Admin
(*) Semua langkah dibawah ini harus dieksekusi oleh akun root !!!
Install MariaDB untuk database mysql dan beberapa dependency tambahan
code-box root@localhost: ~# apt install mariadb-server git libpq-dev gpg sudo -y
Selanjutnya buat database dan credential mysql untuk digunakan oleh service powerdns nantinya
code-box root@localhost: ~# mysql -e "create database powerdns;"
code-box root@localhost: ~# mysql -e "grant all privileges on powerdns.* to 'powerdns'@'%' identified by 'StrongPassword';"
code-box root@localhost: ~# mysql -e "flush privileges;"
Install PowerDNS Server dan Backend-mysql
code-box root@localhost: ~# apt install pdns-server pdns-backend-mysql -y
code-box root@localhost: ~# mysql powerdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
Membuat file koneksi database.
code-box root@localhost: ~# nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
code-boxlaunch+=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=StrongPassword
gmysql-dnssec=yes
Karena pada file tersebut terdapat credential yang cukup penting, kita harus mengubah permission dari file tersebut agar hanya dapat dibaca dan di edit oleh service pdns.
code-box root@localhost: ~# chown pdns: /etc/powerdns/pdns.d/pdns.local.gmysql.conf
code-box root@localhost: ~# chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
Setelah itu restart dan enable service pdns.
code-box root@localhost: ~# systemctl restart pdns
code-box root@localhost: ~# systemctl enable pdns
Install PowerDNS-Admin
Install dependency yang dibutuhkan oleh PowerDNS-Admin.
code-box root@localhost: ~# apt install python3-dev virtualenv libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv python3-venv build-essential libmariadb-dev git python3-flask nodejs npm -y
Install yarn.
code-box root@localhost: ~# curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
code-box root@localhost: ~# echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
code-box root@localhost: ~# apt update && apt install yarn -y
Clone PowerDNS-Admin dari repository github dan letakkan pada directory web.
code-box root@localhost: ~# git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /var/www/html/pdns
Install python dependency yang dibutuhkan pada virtualenv.
Lakukan konfigurasi credential mysql pada default config yang ada di PowerDNS-Admin.
code-box nano /var/www/html/pdns/powerdnsadmin/default_config.py
code-box
### DATABASE CONFIG
SQLA_DB_USER = 'powerdns'
SQLA_DB_PASSWORD = 'StrongPassword'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'powerdns'
SQLALCHEMY_TRACK_MODIFICATIONS = True
......
Lakukan upgrade flask database.
code-box
root@localhost: ~# cd /var/www/html/pdns
root@localhost: ~# source flask/bin/activate
(flask) root@localhost: ~# export FLASK_APP=powerdnsadmin/__init__.py
(flask) root@lcoalhost: ~# flask db upgrade
(flask) root@localhost: ~# yarn install --pure-lockfile
(flask) root@localhost: ~# flask assets build
(flask) root@localhost: ~# deactivate
Konfigurasi api pada pdns-server.
code-box root@localhost: ~# nano /etc/powerdns/pdns.conf
code-box
........
#################################
# api Enable/disable the REST API (including HTTP listener)
#
api=yes
#################################
# api-key Static pre-shared authentication key for access to the REST API
#
api-key=secretapi
........
Restart pdns-server.
code-box root@localhost: ~# systemctl restart pdns
Install WebServer
Untuk webserver disini saya menggunakan nginx, untuk melayani layanan web.
Install nginx.
code-box root@localhost: ~# apt install nginx -y
Membuat konfigurasi virtualhost pada nginx.
code-box root@localhost: ~# nano /etc/nginx/conf.d/powerdns-admin.conf
code-box
server {
listen *:80;
server_name _;
index index.html index.htm index.php;
root /var/www/html/pdns;
access_log /var/log/nginx/pdnsadmin_access.log combined;
error_log /var/log/nginx/pdnsadmin_error.log;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_redirect off;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_buffer_size 8k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_bucket_size 64;
location ~ ^/static/ {
include /etc/nginx/mime.types;
root /var/www/html/pdns/powerdnsadmin;
location ~* \.(jpg|jpeg|png|gif)$ {
expires 365d;
}
location ~* ^.+.(css|js)$ {
expires 7d;
}
}
location / {
proxy_pass http://unix:/run/pdnsadmin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
}
}
Hapus konfigurasi default virtualhost nginx.
code-box root@localhost: ~# rm -f /etc/nginx/sites-enabled/default
Mengatur perizinan pada direktori pdns-admin.
code-box root@localhost: ~# chown -R www-data: /var/www/html/pdns
Restart nginx.
code-box root@localhost: ~# systemctl restart nginx
Membuat service pada systemd
Service pdnsadmin.
code-box root@localhost: ~# nano /etc/systemd/system/pdnsadmin.service
code-box
[Unit]
Description=PowerDNS-Admin
Requires=pdnsadmin.socket
After=network.target
[Service]
PIDFile=/run/pdnsadmin/pid
User=pdns
Group=pdns
WorkingDirectory=/var/www/html/pdns
ExecStart=/var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Socket pdnsadmin.
code-box root@localhost: ~# nano /etc/systemd/system/pdnsadmin.socket
code-box
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/pdnsadmin/socket
[Install]
WantedBy=sockets.target
Membuat environtment direktori untuk dapat digunakan oleh service powerdns.
code-box
root@localhost: ~# mkdir -p /run/pdnsadmin/
root@localhost: ~# echo "d /run/pdnsadmin 0755 pdns pdns -" >> /etc/tmpfiles.d/pdnsadmin.conf
root@localhost: ~# chown -R pdns: /run/pdnsadmin/
root@localhost: ~# chown -R pdns: /var/www/html/pdns/powerdnsadmin/
Restart daemon pada systemd.
code-box root@localhost: ~# systemctl daemon-reload
Enable service pdnsadmin.service dan pdnsadmin.socket.
code-box root@localhost: ~# systemctl enable --now pdnsadmin.service pdnsadmin.socket
Cek status kedua service tersebut.
code-box root@localhost: ~# systemctl status pdnsadmin.service pdnsadmin.socket
Konfigurasi API pada web browser
Buka powerdns pada browser dengan cara mengetikkan alamat ip dari server tersebut, dan silahkan membuat akun baru sebagai administrator.
Isi semua kolom yang ada dan klik register.
Jika telah membuat akun pertamakali, selanjutnya silahkan login dan akan ada input box untuk setup api key, masukkan api key yang telah di konfigurasi sebelumnya. Jika kalian mengikuti konfigurasi mulai dari awal maka api key adalah "secretapi".
Sampai disini kalian telah berhasil melakukan installasi PowerDNS Admin.
Saya juga telah membuatkan script untuk melakukan installasi dan konfigurasi PowerDNS Admin secara otomatis, bisa di download di link berikut.
Terimakasi telah membaca artikel kali ini, jika ada tulisan yang kurang tepat baik itu yang berhubungan dengan teori ataupun teknis saya mohon maaf.
Ajarin dong puh sepuh
BalasHapusdownload scriptnya aja puh gampang, tinggal run
HapusPosting Komentar