PowerDNS en Poweradmin installeren op CentOS 7

PowerDNS (pdns) is een open bron DNS server, geschreven in C++ en uitgebracht onder de GPL Licentie. Het is een goed alternatief geworden voor de traditionele DNS server Bind, ontworpen met betere prestaties en weinig geheugen nodig. PowerDNS levert twee producten, de Authoritative server, en de Recursor. De PowerDNS Authoritative server kan via de verschillende backend geconfigureerd worden, waaronder de gewone Bind zone bestanden, RDBMS zoals MySQL, PostgreSQL, SQLite3 of LDAP.

In deze handleiding laat ik je zien hoe je een PowerDNS Authoritative server installeert en configureert met MariaDB databaseserver als Backend en hoe je Poweradmin gebruikt voor eenvoudig DNS beheer.

Vereisten

  • CentOS 7 server
  • Root voorrechten

Wat we zullen doen:

  1. EPEL en Remi Repositories installeren
  2. MariaDB installeren en configureren
  3. PowerDNS installeren
  4. Installeer Poweradmin
  5. Poweradmin Post-Installatie
  6. Voorbeeld Zone Aanmaken

Stap 1 – Installeer EPEL en Remi Repositories

Eerst moeten we afhankelijkheden installeren voor de PowerDNS installatie. We gaan de EPEL repository en de REMI voor PHP 7.2 installatie installeren.

Installeer de EPEL en PHP Remi repository met de volgende commando’s.

yum -y install epel-release
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Zodra deze repositories aan het systeem zijn toegevoegd, installeer je het ‘yum-utils’ pakket.

yum -y install yum-utils

En schakel de PHP 7.2 Remi repository in met het volgende commando.

yum-config-manager --enable remi-php72

Stap 2 – Installeer en configureer MariaDB

De PowerDNS Authoritative server heeft ondersteuning voor een andere backend, waaronder de MySQL/MariaDB databaseserver. Met ‘backend’ wordt een datastore bedoeld die de server zal raadplegen en die DNS records (en wat meta-gegevens) bevat. En voor deze gids zullen we de MariaDB als backend gebruiken.

Installeer MariaDB met het volgende yum commando.

yum -y install mariadb mariadb-server

Als de installatie voltooid is, start je de MariaDB dienst en voeg je die toe aan de opstarttijd.

systemctl start mariadb
systemctl enable mariadb

Vervolgens gaan we het root wachtwoord voor de MariaDB instellen met het interactieve gereedschap dat ‘mysql_secure_installation’ heet.

Voer het onderstaande commando uit.

mysql_secure_installation

En je wordt gevraagd om het root wachtwoord van de databaseserver in te stellen. Typ ‘Y’ om het root wachtwoord in te stellen en typ een sterk wachtwoord.

Set root password? [Y/n] Y
New password:
Re-enter new password:

Voor de anderen typ je gewoon ‘Y’ op ja.

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

Het resultaat is dat je de MariaDB databaseserver geïnstalleerd hebt en het root wachtwoord voor authenticatie ingesteld hebt.

Nu maken we een nieuwe database en gebruiker voor de PowerDNS installatie. Log in op de MySQL shell met de gebruiker root en je wachtwoord.

Voer het onderstaande MySQL commando uit.

mysql -u root -p
PASSWORD

Maak nu een nieuwe database genaamd ‘powerdns’ en verleen alle databankrechten aan een nieuwe gebruiker genaamd ‘pdns’ met wachtwoord ‘pdnspassword2018’.

create database powerdns;
grant all privileges on powerdns.* to [email protected] identified by 'pdnspassword2018';
flush privileges;

Installeer de PowerDNS databank

Maak daarna de tabellenstructuren voor de PowerDNS database door onderstaande MySQL queries uit te voeren.

use powerdns;

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 DEFAULT NULL,
  account               VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

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;

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);


CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;


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) NOT NULL,
  comment               VARCHAR(64000) NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX comments_domain_id_idx ON comments (domain_id);
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;

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;

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;

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

quit;

Het resultaat is dat de MySQL/MariaDB database en een gebruiker voor de PowerDNS installatie zijn aangemaakt.

Stap 3 – Installeer PowerDNS

Installeer PowerDNS en alle benodigde pakketten met het volgende commando.

yum -y install pdns pdns-backend-mysql bind-utils

Na de installatie van PowerDNS pakketten ga je naar de ‘/etc/pdns/’ directory en bewerk je het configuratiebestand ‘pdns.conf’ met een vim editor.

cd /etc/pdns/
vim pdns.conf

Standaard gebruikt PowerDNS ‘bind’ als backend. Typ dus commentaar ‘#’ vooraan de ‘launch=bind’ configuratie en plak de MySQL backend configuratie als hieronder.

#launch=bind

launch=gmysql
gmysql-host=localhost
gmysql-user=pdns
gmysql-password=pdnspassword2018
gmysql-dbname=powerdns

Sla op en sluit.

Installeer PowerDNS

Start nu de pdns dienst en voeg hem toe aan de opstarttijd.

systemctl start pdns
systemctl enable pdns

Voeg daarna de DNS dienst toe aan de firewall.

firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

Configureer de firewall

En de PowerDNS dienst is up and running, controleer dat met het volgende commando.

netstat -tap | grep pdns
netstat -tulpn | grep 53
dig @10.9.9.10

Als resultaat krijg je dat de pdns service up and running is op poort 53 en het antwoord krijgt van de PowerDNS server.

Controleer PowerDNS status

Stap 4 – Installeer Poweradmin

In deze stap gaan we het DNS beheer voor PowerDNS installeren dat ‘Poweradmin’ heet. Het is een webapplicatie gebaseerd op PHP, dus moeten we PHP en een webserver installeren om de applicatie te kunnen draaien.

Installeer een httpd webserver en PHP pakketten met het volgende commando.

yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

Na de installatie moeten we aanvullende PHP Peer pakketten installeren. Voer het volgende commando uit.

yum -y install php-pear-DB php-pear-MDB2-Driver-mysqli

Als de httpd en PHP installatie voltooid is, start je de httpd dienst en voeg je hem toe aan de opstarttijd.

systemctl start httpd
systemctl enable httpd

Ga vervolgens naar de ‘/var/www/html’ directory en download de poweradmin broncode.

cd /var/www/html/
wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

Pak het poweradmin gecomprimeerde bestand uit en hernoem het.

tar xvf poweradmin-2.1.7.tgz
mv poweradmin-2.1.7/ poweradmin/

Voeg daarna de HTTP en HTTPS protocollen aan de firewall toe.

firewall-cmd --add-service={http,https} --permanent
firewall-cmd --reload

En we zijn klaar voor de poweradmin na-installatie.

Stap 5 – Poweradmin na-installatie

Open je web browser en typ het IP adres van de server plus de /poweradmin/install/ pad URL voor de installatie. De mijne is:

http://10.9.9.10/poweradmin/install/

Kies je voorkeurstaal en klik op de ‘Ga naar Stap 2’ knop.

PowerAdmin instelling 1

Klik nu gewoon op de ‘Ga naar stap 3’ knop.

PowerAdmin instelling 2

En je krijgt een scherm te zien voor de database configuratie. Typ de gegevens van de PowerDNS database die we gemaakt hebben en het admin wachtwoord voor PowerDNS.

PowerAdmin database opzet

Klik op de knop ‘Ga naar stap 4’.

Daarna moet je een nieuwe gebruiker aanmaken met beperkte rechten. Type de gegevens in zoals hieronder en verander de gebruiker, het wachtwoord, enz. met je eigen gegevens.

PowerAdmin gebruikersinstelling

Klik nu op ‘Ga naar stap 5’.

En je krijgt de pagina te zien zoals hieronder.

PowerAdmin setup voltooid

Open opnieuw je terminal server, log in met de root gebruiker en het wachtwoord. Voer dan de MySQL queries uit zoals op de pagina.

mysql -u root -p
PASSWORD

GRANT SELECT, INSERT, UPDATE, DELETE
ON powerdns.*
TO 'hakase'@'localhost'
IDENTIFIED BY 'hakase-labs123';

Mysql commando's

Ga nu terug naar de web browser en klik op de ‘Ga naar stap 6’ knop.

En je krijgt de pagina te zien zoals hieronder.

Installatie stap 6

Het installatieprogramma kon geen nieuwe configuratie aanmaken “../inc/config.inc.php”. We moeten het dus handmatig aanmaken.

Ga terug naar de terminal server, ga naar de ‘/var/www/html/poweradmin’ directory en maak een nieuw configuratiebestand ‘inc/config.inc.php’.

cd /var/www/html/poweradmin
vim inc/config.inc.php

Plak er nu het PHP script op de pagina in.

<?php

$db_host                = 'localhost';
$db_user                = 'hakase';
$db_pass                = 'hakase-labs123';
$db_name                = 'powerdns';
$db_type                = 'mysql';
$db_layer               = 'PDO';

$session_key            = '[email protected]=uetwJeD2#uApgO)2Ekj+S#oN1Khhoj';

$iface_lang             = 'en_EN';

$dns_hostmaster         = 'server.hakase-labs.io';
$dns_ns1                = 'ns1.hakase-labs.io';
$dns_ns2                = 'ns2.hakase-labs.io';

Sla op en sluit, ga dan terug naar de browser en klik op de knop.

Database configuratiebestand

En de installatie is voltooid.

Optioneel:

Als je ondersteuning wilt voor de URL’s die door andere Dynamische aanbieders gebruikt worden, kopieer dan het htaccess bestand.

cd /var/www/html/poweradmin
cp install/htaccess.dist .htaccess

Daarna MOET je de ‘install’ directory verwijderen.

rm -rf /var/www/html/poweradmin/install

.htaccess bescherming

Ga weer terug naar je web browser en log in op het Poweradmin dashboard met de URL zoals hieronder.

http://10.9.9.10/poweradmin/

Log in met de standaard gebruiker ‘admin’ en het wachtwoord, klik op de ‘Go’ knop.

PowerAdmin Inloggen

En als resultaat krijg je het Poweradmin dashboard te zien en is de installatie voltooid.

PowerAdmin Dashboard

Stap 6 – Maak voorbeeldzone en DNS records

In dit stadium gaan we de PowerDNS en Poweradmin installatie testen door een nieuwe DNS zone aan te maken voor een domein met de naam ‘emma.io’.

Klik op het Poweradmin dashboard op het menu ‘Master zone toevoegen’.

Add master zone

Stel de zonenaam in met de domeinnaam ‘emaa.io’ en klik op de knop ‘Zone toevoegen’.

DNS zone toevoegen in PowerAdmin

Klik op het menu ‘Lijst zones’ om alle beschikbare zone te krijgen. En klik op de knop ‘edit’ voor de zone ‘emma.io’.

Zone naam instellen

Klik op het ‘List zones’ menu om alle beschikbare zones te krijgen. En klik op de ‘edit’ knop voor de zone ‘emma.io’.

List zones

Klik nu op de knop ‘Add record’ en we voegen met succes de DNS zone en DNS record toe voor het domein met de naam ‘emma.io’.

Vervolgens gaan we het domein ‘emma.io’ testen met een ‘dig’ DNS utility commando.

Controleer het naamserver of ns record van het domein ‘emma.io’.

dig NS emma.io @10.9.9.10

Controleer de zone met dig commando

Controleer het A DNS record van het domein ‘emma.io’.

dig A emma.io @10.9.9.10

dig commando resultaat

En je krijgt te zien dat het domein ‘emma.io’ een nameserver heeft van onze DNS server ‘ns1.hakase-labs.io’, en de ‘A’ van die domeinnaam komt overeen met onze configuratie bovenaan met server IP adres ‘10.9.9.11’.

Tenslotte zijn de installatie en configuratie van PowerDNS en Poweradmin op CentOS 7 met succes voltooid.

Referentie