Installasi PowerDNS GUI Web Interface

 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.


code-boxroot@localhost: ~# virtualenv -p python3 /var/www/html/pdns/flask (flask) root@localhost: ~# source /var/www/html/pdns/flask/bin/activate (flask) root@localhost: ~# pip install --upgrade pip (flask) root@localhost: ~# pip install gunicorn flask (flask) root@localhost: ~# sed -i -e 's/--use-feature=no-binary-enable-wheel-cache lxml==4.9.0/#/g' /var/www/html/pdns/requirements.txt (flask) root@localhost: ~# pip install -r /var/www/html/pdns/requirements.txt (flask) root@localhost: ~# deactivate


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.


Download


Terimakasi telah membaca artikel kali ini, jika ada tulisan yang kurang tepat baik itu yang berhubungan dengan teori ataupun teknis saya mohon maaf.


2 Komentar

Posting Komentar

Post a Comment

Lebih baru Lebih lama