Configure-PowerDNS-with-MariaDB-Server =============== Repositori untuk melakukan instalasi dan konfigurasi PowerDNS dengan menggunakan database server MariaDB ## Task Instalasi dan Konfigurasi * PowerDNS * Database Server MariaDB 10.1.44 * Glue Record Domain Ketentuan pengerjaan: * Menggunakan VPS dengan OS centos7 * Menggunakan domain utama (domain.tld) * Menggunakan DNS Server Pdns * Menggunakan Database Server MariaDB 10.1.44 ## Tentang PowerDNS #### 1. Pengertian PowerDNS PowerDNS adalah DNS Server yang bisa berjalan di banyak turunan Linux/Unix. aplikasi ini juga bisa dikonfigurasi dengan berbagai macam backend termasuk BIND, Database Relational atau Load balancer. Kemampuan lainnya adalah aplikasi ini juga bisa diatur untuk menjadi DNS recursor yang berjalan sebagai service atau proses yang berbeda (pdns-recursor). #### 2. Tiga Produk Open Source dalam PowerDNS ##### A. PowerDNS Authoritative Server PowerDNS Authoritative Server adalah satu-satunya solusi yang memungkinkan layanan DNS otoritatif dari semua database utama, tetapi tidak terbatas pada MySQL, PostgreSQL, SQLite3, Oracle, Sybase, Microsoft SQL Server, LDAP dan file teks biasa. Record DNS juga dapat ditulis menggunakan berbagai bahasa (scripting) seperti Lua, Java, Perl, Python, Ruby, C dan C ++. Skrip semacam itu dapat digunakan untuk dynamic redirection, (spam) filtering atau real time intervention. Selain itu, PowerDNS Authoritative Server adalah implementasi DNSSEC terkemuka, menampung sebagian besar semua domain DNSSEC di seluruh dunia. Authoritative Server memiliki setidaknya 30% dari semua nama domain di Eropa, dan sekitar 90% dari semua domain DNSSEC di Eropa. ##### B. DNSdist DNSdist adalah fitur untuk loadbalancer yang berguna untuk DNS, DoS dan penyalahgunaan lainnya. Tujuannya adalah untuk mengarahkan lalu lintas ke server terbaik, memberikan kinerja terbaik untuk pengguna yang sah sambil mengubah atau memblokir lalu lintas yang mencurigakan. Dnsdist digunakan untuk melindungi dan mengoptimalkan lalu lintas DNS dari ratusan juta pelanggan internet. ##### C. Recursor PowerDNS Recursor adalah name server dengan penyelesaian tinggi, berkinerja tinggi yang mendukung resolusi DNS yang setidaknya lebih dari seratus juta pelanggan. Memanfaatkan banyak prosesor dan mendukung kemampuan scripting yang sama dari Server Resmi, Recursor memberikan kinerja terbaik sambil mempertahankan fleksibilitas yang dibutuhkan untuk penyebaran DNS modern. ## Instalasi dan Konfigurasi Pdns dan MariaDB 10.1.44 #### Step 1: Instalasi Database Server MariaDB 10.1.44 Untuk melakukan instalasi MariaDB 10.1.44 yang pertama adalah melakukan remote ke IP VPS dengan menggunakan SSH > ```$ ssh root@ipaddress``` Setelah berhasil login ke VPS, lakukan pembaharuan paket/repository dari system operasi Centos7 dengan perintah sebagai berikut: > ```#yum -y update``` Setelah melakukan update system selanjutnya lakukan instalasi database server mariaDB 10.1.44 dan langkah pertama ialah menambahkan repository untuk mariaDB. > ```# vi /etc/yum.repos.d/mariadb.repo``` Masukan perintah berikut: > ``` [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1``` Setelah menambahkan repo mariaDB, lakukan instalasi mariaDB dengan perintah berikut: > ```# yum install mariadb-server``` Selanjutnya lakukan enable direktori dan file database mariaDB, berikut perintahnya: > ```# systemctl enable mariadb``` Setelah direktori dan file database mariaDB dienable, jalankan service mariaDB dengan perintah berikut: > ```# systemctl start mariadb``` Apabila paket database server telah selesai diinstall pastikan service mariaDB berjalan dengan status Running. > ``` # systemctl status mariadb ● mariadb.service - MariaDB 10.1.44 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/mariadb.service.d └─migrated-from-my.cnf-settings.conf Active: active (running) since Sat 2020-03-07 20:09:38 WIB; 22h ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Process: 29925 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 29885 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS) Process: 29883 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Main PID: 29897 (mysqld) Status: "Taking your SQL requests now..." CGroup: /system.slice/mariadb.service └─29897 /usr/sbin/mysqld ``` #### Step 2: Secure mariaDB server Setelah melakukan instalasi mariaDB Server selanjutnya kita harus mengamankan databese server dengan cara menambahkan password login saat mengakses mariaDB server. > ```# mysql_secure_installation``` Nantinya kita akan melakukan perubahan password untuk root database server, pilih `Y` dan masukan Password baru yang kuat. > ``` Set root password? [Y/n] Y New password: Re-enter new password: ``` Apabila ada yang lain silakan klik `Y` > ``` Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y ``` Setelah itu kita coba untuk melakukan login dengan password baru yang telah dibuat dengan perintah berikut: > ``` # mysql -u root -p Input Password ``` Apabila telah login selanjutnya buat database, user dan password untuk service PowerDNS. > ``` MariaDB [(none)]> Create database testpdns; MariaDB [(none)]> grant all privileges on testdns.* to pdns@localhost identified by 'pdnspassword'; MariaDB [(none)]> flush privileges; ``` Setelah itu pilih database testpdns; > ``` MariaDB [(none)]>use testpdns; MariaDB [testpdns]> ``` Buat table baru untuk menyimpan record pdns pada database testpdns. > ``` MariaDB [testpdns]> CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; ``` > ``` MariaDB [testpdns]> CREATE UNIQUE INDEX name_index ON domains(name); ``` > ``` MariaDB [testpdns]>CREATE TABLE records ( id BIGINT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; ``` > ``` MariaDB [testpdns]> CREATE INDEX nametype_index ON records(name,type); ``` > ``` MariaDB [testpdns]> CREATE INDEX domain_id ON records(domain_id); ``` > ``` MariaDB [testpdns]> CREATE INDEX ordername ON records (ordername); ``` > ``` MariaDB [testpdns]> CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB CHARACTER SET 'latin1'; ``` > ``` MariaDB [testpdns]> CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, comment TEXT CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; ``` > ``` MariaDB [testpdns]> CREATE INDEX comments_name_type_idx ON comments (name, type); ``` > ``` MariaDB [testpdns]> CREATE INDEX comments_order_idx ON comments (domain_id, modified_at); ``` > ``` MariaDB [testpdns]> CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; ``` > ``` MariaDB [testpdns]> CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind); ``` > ``` MariaDB [testpdns]> CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, published BOOL DEFAULT 1, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB CHARACTER SET 'latin1'; ``` > ``` MariaDB [testpdns]>CREATE INDEX domainidindex ON cryptokeys(domain_id); ``` > ``` MariaDB [testpdns]> CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; ``` > ``` MariaDB [testpdns]> CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm); ```