Pendahuluan
PowerDNS adalah solusi server DNS open-source yang membantu menyelesaikan namespace. PowerDNS mendukung ketersediaan tinggi, redundansi data, dan berbagai backend, yang menjadikannya solusi yang fleksibel dan tangguh.
Panduan ini menunjukkan cara menginstal PowerDNS dan antarmuka Admin PowerDNS di Ubuntu.
Prasyarat
- Akses ke terminal.
- Akses ke pengguna root.
- Editor teks, seperti nano.
- Peramban web untuk mengakses Admin PowerDNS.
Mengapa Menggunakan PowerDNS?
PowerDNS menyediakan dua solusi server nama:
- Server Resmi , yang menggunakan database untuk menyelesaikan kueri tentang domain.
- Rekursor , yang berkonsultasi dengan server otoritatif lainnya untuk menyelesaikan kueri.
Server nama lain menggabungkan dua fungsi secara otomatis. PowerDNS menawarkannya secara terpisah, dan memungkinkan perpaduan dua solusi dengan mulus untuk pengaturan modular.
Selain itu, PowerDNS adalah open source, berfungsi sama baiknya untuk volume kueri kecil dan besar, dan menawarkan banyak kemungkinan untuk solusi backend.
Menginstal PowerDNS di Ubuntu 18.04, 20.04, &22.04
Ikuti langkah-langkah di bawah ini untuk menginstal dan mengkonfigurasi PowerDNS dengan server MariaDB sebagai database backend. Selain itu, langkah-langkah tersebut memandu pengguna melalui penyiapan antarmuka web dan API PowerDNS Admin.
Langkah 1:Instal dan Konfigurasikan Server MariaDB
Untuk menginstal dan mengkonfigurasi MariaDB, lakukan hal berikut:
1. Perbarui dan tingkatkan paket sistem:
sudo apt update && sudo apt upgrade
2. Instal server dan klien MariaDB dengan:
sudo apt install mariadb-server mariadb-client
Catatan: Server database lain yang mungkin termasuk PostgreSQL, MySQL, dan database relasional lainnya.
Tunggu penginstalan selesai sebelum melanjutkan.
3. Hubungkan ke MariaDB dengan:
sudo mysql
Terminal terhubung ke sesi database.
4. Buat database untuk server nama PowerDNS:
create database pda;
Catatan: Jika menggunakan nama database yang berbeda, ubah semua perintah konsekuen yang sesuai.
5. Berikan semua hak istimewa ke pda
pengguna dan berikan kata sandi pengguna:
grant all privileges on pda.* TO 'pda'@'localhost' identified by 'YOUR_PASSWORD_HERE';
flush privileges;
6. Hubungkan ke database:
use pda;
7. Gunakan kueri SQL berikut untuk membuat tabel untuk pda basis data:
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';
CREATE UNIQUE INDEX name_index ON domains(name);
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,
change_date 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';
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);
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';
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';
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
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';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
8. Konfirmasikan bahwa tabel telah dibuat dengan:
show tables;
Outputnya mencantumkan tabel yang tersedia.
9. Keluar dari koneksi database:
exit;
Perintah mengembalikan sesi ke terminal.
Langkah 2:Instal PowerDNS
Untuk menginstal PowerDNS di Ubuntu, lakukan hal berikut:
1. Beralih ke pengguna root:
sudo su -
Sesi terminal berubah menjadi pengguna root.
Catatan: Pelajari tentang perbedaan antara sudo dan su.
2. systemd-resolved
service menyediakan resolusi nama untuk aplikasi lokal. PowerDNS menggunakan layanannya sendiri untuk resolusi nama.
Nonaktifkan systemd-resolved
layanan dengan:
systemctl disable --now systemd-resolved
Output mengkonfirmasi penghapusan layanan.
3. Hapus file konfigurasi layanan sistem dengan:
rm -rf /etc/resolv.conf
4. Buat resolv.conf baru berkas:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Menambahkan server nama Google memastikan resolusi DNS.
5. Instal server PowerDNS dan paket backend database dengan:
apt-get install pdns-server pdns-backend-mysql -y
Tunggu hingga penginstalan selesai sebelum melanjutkan.
Langkah 3:Konfigurasi PowerDNS
Konfigurasikan file PowerDNS lokal untuk terhubung ke database:
1. Buka file konfigurasi untuk mengedit:
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
2. Tambahkan informasi berikut ke file:
# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pda
gmysql-user=pda
gmysql-password=YOUR_PASSWORD_HERE
gmysql-dnssec=yes
# gmysql-socket=
Tukarkan nama database, user, dan password dengan parameter yang benar jika menggunakan parameter yang berbeda. Simpan dan tutup file.
3. Ubah izin file:
chmod 777 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
4. Hentikan pdns layanan:
systemctl stop pdns
5. Uji koneksi ke database:
pdns_server --daemon=no --guardian=no --loglevel=9
Output menunjukkan koneksi yang berhasil. Tekan CTRL +C untuk keluar dari pengujian.
6. Mulai layanan:
systemctl start pdns
7. Cek koneksi dengan perintah ss:
ss -alnp4 | grep pdns
Verifikasi port TCP/UDP UCONN
terbuka dan dalam LISTEN
/UCONN
negara.
Langkah 4:Instal Ketergantungan Admin PowerDNS
Admin PowerDNS membantu mengelola PowerDNS melalui antarmuka web. Untuk menginstal dasbor secara lokal, lakukan hal berikut:
1. Instal paket pengembangan Python:
apt install python3-dev
2. Instal dependensi:
apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl
3. Ambil setup Node.js:
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
4. Instal Node.js dengan:
apt install -y nodejs
5. Selanjutnya, instal manajer paket Benang. Ambil kunci publik Yarn dan tambahkan ke apt :
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
Benang membantu membangun file aset.
6. Tambahkan Benang ke daftar sumber:
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
7. Perbarui daftar sumber yang tepat:
apt update -y
8. Instal Benang dengan:
apt install yarn -y
9. Mengkloning repositori PowerDNS Admin Git ke /opt/web/powerdns-admin :
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin
Jika menggunakan direktori yang berbeda, tukar direktori tujuan di perintah dan di semua tampilan berikutnya.
10. Arahkan ke direktori Git kloning:
cd /opt/web/powerdns-admin
11. Buat lingkungan virtual Python:
python3 -mvenv ./venv
12. Aktifkan lingkungan virtual dengan:
source ./venv/bin/activate
13. Tingkatkan pip ke versi terbaru:
pip install --upgrade pip
Manajer paket pip membantu menginstal persyaratan Python tambahan.
14. Instal persyaratan dari requirements.txt berkas:
pip install -r requirements.txt
Setelah menginstal semua persyaratan, Admin PowerDNS memerlukan konfigurasi tambahan sebelum dijalankan.
Langkah 5:Konfigurasi dan Jalankan Admin PowerDNS
Untuk mengonfigurasi dan memulai Admin PowerDNS pada instans lokal, lakukan hal berikut:
1. Gunakan perintah cp untuk menyalin contoh development.py File Python ke production.py :
cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py
2. Buka production.py file untuk diedit:
nano /opt/web/powerdns-admin/configs/production.py
3. Edit baris berikut:
#import urllib.parse
SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd2'
SQLA_DB_PASSWORD = 'changeme'
4. Batalkan komentar impor perpustakaan, berikan kunci rahasia yang dibuat secara acak, dan berikan kata sandi basis data yang benar.
import urllib.parse
SECRET_KEY = '\x19\xc7\xd8\xa7$\xb6P*\xc6\xb8\xa1E\x90P\x12\x95'
SQLA_DB_PASSWORD = 'YOUR_PASSWORD_HERE'
Catatan: Hasilkan kunci acak menggunakan Python:
python3 -c "import os; print(os.urandom(16))"
Salin dan tempel hasilnya ke SECRET_KEY
nilai.
Simpan dan tutup file.
5. Ekspor variabel konfigurasi aplikasi produksi:
export FLASK_CONF=../configs/production.py
6. Ekspor variabel aplikasi labu:
export FLASK_APP=powerdnsadmin/__init__.py
7. Tingkatkan skema database:
flask db upgrade
8. Instal dependensi proyek:
yarn install --pure-lockfile
9. Bangun aset aplikasi flask:
flask assets build
Tunggu hingga pembangunan selesai.
10. Jalankan aplikasi dengan:
./run.py
Biarkan aplikasi berjalan.
11. Aplikasi saat ini berjalan di localhost pada port 9191
. Kunjungi alamat berikut:
http://localhost:9191
Layar masuk untuk Admin PowerDNS ditampilkan. Saat ini, tidak ada pengguna, dan pengguna pertama yang Anda daftarkan adalah akun administrator.
12. Di terminal, keluar dari lingkungan virtual dan keluar dari pengguna root dengan:
exit
Terminal kembali ke keadaan biasa.
Langkah 6:Buat Layanan Admin PowerDNS
Konfigurasikan Admin PowerDNS untuk dijalankan saat startup:
1. Buat file layanan systemd untuk Admin PowerDNS:
sudo nano /etc/systemd/system/powerdns-admin.service
2. Tambahkan konten berikut:
[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target
[Service]
User=root
Group=root
PIDFile=/run/powerdns-admin/pid
WorkingDirectory=/opt/web/powerdns-admin
ExecStartPre=/bin/bash -c '$$(mkdir -p /run/powerdns-admin/)'
ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3. Buat file satuan:
sudo systemctl edit --force powerdns-admin.service
4. Tambahkan berikut ini:
[Service]
Environment="FLASK_CONF=../configs/production.py"
5. Buat file soket:
sudo nano /etc/systemd/system/powerdns-admin.socket
6. Masukkan informasi berikut:
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.target
7. Buat file lingkungan:
sudo nano /etc/tmpfiles.d/powerdns-admin.conf
8. Tambahkan informasi berikut:
d /run/powerdns-admin 0755 pdns pdns -
9. Muat ulang daemon:
sudo systemctl daemon-reload
10. Mulai dan aktifkan layanan dan soket:
sudo systemctl start powerdns-admin.service powerdns-admin.socket
sudo systemctl enable powerdns-admin.service powerdns-admin.socket
11. Periksa statusnya dengan:
sudo systemctl status powerdns-admin.service powerdns-admin.socket
Layanan ditampilkan sebagai berjalan tanpa kesalahan.
Langkah 7:Instal dan Konfigurasi Nginx
Untuk mengonfigurasi Admin PowerDNS agar berjalan di Nginx, lakukan hal berikut:
1. Instal Nginx dengan:
sudo apt install nginx -y
2. Edit file konfigurasi Nginx:
sudo nano /etc/nginx/conf.d/pdns-admin.conf
3. Tambahkan informasi berikut:
server {
listen *:80;
server_name localhost;
index index.html index.htm index.php;
root /opt/web/powerdns-admin;
access_log /var/log/nginx/powerdns-admin.local.access.log combined;
error_log /var/log/nginx/powerdns-admin.local.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 /opt/web/powerdns-admin/powerdnsadmin;
location ~* \.(jpg|jpeg|png|gif)$ {
expires 365d;
}
location ~* ^.+.(css|js)$ {
expires 7d;
}
}
location / {
proxy_pass http://unix:/run/powerdns-admin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
}
}
Jika menggunakan nama server yang berbeda, ubah localhost
ke alamat server Anda.
4. Konfirmasikan bahwa file tidak memiliki kesalahan sintaks:
nginx -t
5. Ubah kepemilikan powerdns-admin
ke www-data
:
sudo chown -R www-data:www-data /opt/web/powerdns-admin
6. Mulai ulang layanan Nginx:
sudo systemctl restart nginx
7. Akses halaman admin PowerDNS melalui browser:
localhost
Jika menautkan ke alamat yang berbeda, gunakan alamat yang disediakan di file konfigurasi Nginx.
Langkah 8:Konfigurasikan PowerDNS API
Untuk mengonfigurasi API PowerDNS, lakukan hal berikut:
1. Masuk ke Admin PowerDNS melalui browser. Jika dijalankan untuk pertama kalinya, buat pengguna baru terlebih dahulu. Pengguna pertama secara otomatis menjadi administrator.
2. Buka Kunci API s di menu sebelah kiri.
3. Klik Tambahkan Kunci+ tombol.
4. Peran bidang default ke Administrator pengguna. Tambahkan deskripsi opsional untuk kunci.
5. Klik Buat Kunci untuk menghasilkan kunci API.
6. Sebuah jendela popup mencetak kunci. Salin kunci dan tekan Konfirmasi untuk melanjutkan.
7. Navigasikan ke Dasbor halaman.
8. Masukkan domain dan kunci API. Simpan perubahannya.
9. Aktifkan API dalam konfigurasi PowerDNS. Buka file konfigurasi di terminal:
nano /etc/powerdns/pdns.conf
10. Batalkan komentar dan ubah baris berikut:
api=yes
api-key=yoursecretekey
webserver=yes
11. Simpan perubahan dan tutup nano. API sudah disiapkan dan siap digunakan.
Kesimpulan
Setelah melalui langkah-langkah dalam panduan ini, Anda telah menyiapkan PowerDNS, antarmuka web Admin PowerDNS di Nginx, dan menghubungkan API PowerDNS.
Selanjutnya, pelajari tentang berbagai jenis data DNS atau praktik terbaik keamanan DNS.