Comment installer PowerDNS Server et PowerDNS Admin sur Ubuntu 20.04

PowerDNS est un serveur de noms faisant autorité, gratuit et open-source. Il est écrit en C++ et fonctionne sur les systèmes d’exploitation Unix, Linux et macOS. Il utilise MySQL, MariaDB, PostgreSQL et Oracle pour stocker les fichiers de zone et les enregistrements.

PowerDNS Admin est un outil basé sur le Web utilisé pour gérer PowerDNS. Tu peux créer et gérer des zones DNS à l’aide du navigateur Web. Il est livré avec un riche ensemble de fonctionnalités. Certaines d’entre elles sont énumérées ci-dessous :

  • Prise en charge d’IPv4 et d’IPv6
  • Page d’état affichant des informations utiles
  • Création/mise à jour automatique des enregistrements PTR inversés
  • Prise en charge de la création de domaines en masse
  • Prise en charge des templates de domaine
  • Prise en charge de DNSSec
  • Prise en charge de l’authentification des utilisateurs de Local DB, SAML, LDAP, Active Directory

Dans ce tutoriel, nous allons te montrer comment installer PowerDNS et PowerDNS admin sur le serveur Ubuntu 20.04.

Conditions préalables

  • Un serveur exécutant Ubuntu 20.04.
  • Un nom de domaine valide pointé avec l’IP de ton serveur.
  • Un mot de passe root est configuré sur le serveur.

Installer et configurer le serveur MariaDB

Avant de commencer, tu dois installer le serveur de base de données MariaDB dans ton système. Par défaut, la dernière version de MariaDB n’est pas disponible dans le dépôt par défaut d’Ubuntu 20.04. Tu devras donc ajouter le dépôt MariaDB à ton système.

Tout d’abord, installe les paquets requis avec la commande suivante :

apt-get install software-properties-common gnupg2 -y

Une fois que tous les paquets sont installés, ajoute la clé de signature MariaDB avec la commande suivante :

apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'

Ensuite, ajoute le référentiel MariaDB avec la commande suivante :

add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirrors.ukfast.co.uk/sites/mariadb/repo/10.5/ubuntu focal main'

Ensuite, installe le serveur MariaDB en exécutant la commande suivante :

apt-get install mariadb-server -y

Une fois installé, tu devras créer une base de données et un utilisateur pour PowerDNS.

Tout d’abord, connecte-toi à MariaDB avec la commande suivante :

mysql

Une fois connecté, crée une base de données et un utilisateur avec la commande suivante :

MariaDB [(none)]> create database pdns;
MariaDB [(none)]> grant all on pdns.* to [email protected] identified by 'password';

Ensuite, vide les privilèges et quitte le shell MariaDB avec la commande suivante: :

MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

Installer PowerDNS

Tout d’abord, tu dois désactiver le service systemd-resolved de ton système. Tu peux le désactiver avec la commande suivante :

systemctl disable --now systemd-resolved

Ensuite, supprime le fichier resolv.conf par défaut et crée un nouveau fichier :

rm -rf /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf

Ensuite, installe le serveur PowerDNS avec la commande suivante :

apt-get install pdns-server pdns-backend-mysql -y

Une fois que le PowerDNS est installé, tu peux passer à l’étape suivante.

Configurer PowerDNS

Tout d’abord, tu dois importer le schéma de la base de données PowerDNS dans la base de données PowerDNS. Tu peux l’importer avec la commande suivante :

mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

Ensuite, tu devras définir les détails de la connexion à la base de données PowerDNS. Tu peux le faire en modifiant le fichier pdns.local.gmysql.conf :

nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf

Change les lignes suivantes :

# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql

# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=pdnsadmin
gmysql-password=password
gmysql-dnssec=yes
# gmysql-socket=

Sauvegarde et ferme le fichier puis donne la permission appropriée au fichier pdns.local.gmysql.conf :

chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf

Ensuite, arrête le serveur PowerDNS et vérifie le PowerDNS avec la commande suivante :

systemctl stop pdns
pdns_server --daemon=no --guardian=no --loglevel=9

Si tout va bien, tu devrais obtenir la sortie suivante :

Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
Nov 02 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
Nov 02 10:43:47 Done launching threads, ready to distribute questions

Ensuite, démarre le serveur PowerDNS avec la commande suivante :

systemctl start pdns

À ce stade, PowerDNS est lancé et écoute sur le port 53. Tu peux le vérifier avec la commande suivante :

ss -alnp4 | grep pdns

Tu devrais obtenir le résultat suivant :

udp     UNCONN   0        0                0.0.0.0:53             0.0.0.0:*      users:(("pdns_server",pid=33140,fd=5))                                         
tcp     LISTEN   0        128              0.0.0.0:53             0.0.0.0:*      users:(("pdns_server",pid=33140,fd=7))                                         

Installer PowerDNS Admin

Dans cette section, nous allons te montrer comment installer PowerDNS admin avec Nginx.

Installe les dépendances requises

Tout d’abord, installe toutes les dépendances requises pour PowerDNS admin avec la commande suivante :

apt-get install nginx python3-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential libmariadb-dev git python3-flask -y

Une fois que toutes les dépendances sont installées, ajoute le référentiel Node.js avec la commande suivante :

curl -sL https://deb.nodesource.com/setup_14.x | bash -

Ensuite, installe le Node.js avec la commande suivante :

apt-get install nodejs -y

Ensuite, ajoute le référentiel yarn avec la commande suivante: :

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

Ensuite, mets à jour le référentiel et installe Yarn avec la commande suivante :

apt-get update -y
apt-get install yarn -y

À ce stade, toutes les dépendances requises sont installées, tu peux maintenant passer à l’étape suivante.

Télécharge PowerDNS Admin

Ensuite, télécharge la dernière version de PowerDNS admin depuis le référentiel Git dans le répertoire racine de Nginx :

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns

Ensuite, change le répertoire pour le répertoire téléchargé et crée un environnement virtuel Python avec la commande suivante :

cd /var/www/html/pdns/
virtualenv -p python3 flask

Ensuite, active l’environnement virtuel et installe toutes les dépendances Python avec la commande suivante :

source ./flask/bin/activate
pip install -r requirements.txt

Ensuite, désactive l’environnement virtuel avec la commande suivante: :

deactivate

Définir la connexion à la base de données

Ensuite, tu dois définir les détails de la connexion à la base de données PowerDNS dans le fichier default_config.py :

nano /var/www/html/pdns/powerdnsadmin/default_config.py

Change les lignes suivantes :

SALT = 'yoursecretekey'
SECRET_KEY = 'yoursecretekey'
BIND_ADDRESS = '0.0.0.0'
PORT = 9191
HSTS_ENABLED = False
OFFLINE_MODE = False

SQLA_DB_USER = 'pdnsadmin'
SQLA_DB_PASSWORD = 'password'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'pdns'
SQLALCHEMY_TRACK_MODIFICATIONS = True

Sauvegarde et ferme le fichier puis change le répertoire en pdns et active l’environnement virtuel :

cd /var/www/html/pdns/
source ./flask/bin/activate

Ensuite, mets à jour la base de données avec la commande suivante :

export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade
yarn install --pure-lockfile
flask assets build

Ensuite, désactive l’environnement virtuel avec la commande suivante :

deactivate

Activer l’API d’administration de PowerDNS

PowerDNS admin utilise l’API JSON pour lire les statistiques et modifier le contenu des zones, les métadonnées et les clés DNSSEC. Tu peux l’activer en modifiant le fichier pdns.conf :

nano /etc/powerdns/pdns.conf

Change les lignes suivantes :

api=yes
api-key=yoursecretekey

Enregistre et ferme le fichier puis redémarre le service PowerDNS pour appliquer les modifications :

systemctl restart pdns

Configurer Nginx pour PowerDNS Admin

Ensuite, tu devras configurer Nginx pour l’administration de PowerDNS. Pour ce faire, crée un fichier de configuration d’hôte virtuel Nginx avec la commande suivante :

nano /etc/nginx/conf.d/pdns-admin.conf

Ajoute les lignes suivantes :

server {
  listen	*:80;
  server_name               pdnsadmin.example.com;

  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;
  }

}

Enregistre et ferme le fichier puis vérifie que Nginx n’a pas d’erreur de syntaxe avec la commande suivante :

nginx -t

Tu devrais obtenir la sortie suivante :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ensuite, change la propriété du pdns en www-data :

chown -R www-data:www-data /var/www/html/pdns

Enfin, redémarre le service Nginx pour appliquer les modifications :

systemctl restart nginx

Créer un fichier de service Systemd pour PowerDNS Admin

Ensuite, tu devras créer un fichier de service systemd pour gérer le service PowerDNS.

Tout d’abord, crée un fichier de service pdns avec la commande suivante :

nano /etc/systemd/system/pdnsadmin.service

Ajoute les lignes suivantes :

[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

Sauvegarde et ferme le fichier puis crée un fichier sockt pdnsadmin avec la commande suivante :

nano /etc/systemd/system/pdnsadmin.socket

Ajoute les lignes suivantes :

[Unit]
Description=PowerDNS-Admin socket

[Socket]
ListenStream=/run/pdnsadmin/socket

[Install]
WantedBy=sockets.target

Sauvegarde et ferme le fichier puis crée les fichiers et répertoires nécessaires avec la commande suivante :

echo "d /run/pdnsadmin 0755 pdns pdns -" >> /etc/tmpfiles.d/pdnsadmin.conf
mkdir /run/pdnsadmin/
chown -R pdns: /run/pdnsadmin/
chown -R pdns: /var/www/html/pdns/powerdnsadmin/

Ensuite, recharge le démon systemd avec la commande suivante :

systemctl daemon-reload

Ensuite, active le service pdnsadmin pour qu’il démarre au redémarrage du système avec la commande suivante :

systemctl enable --now pdnsadmin.service pdnsadmin.socket

Ensuite, vérifie l’état des deux services à l’aide de la commande suivante :

systemctl status pdnsadmin.service pdnsadmin.socket

Tu devrais obtenir la sortie suivante :

? pdnsadmin.service - PowerDNS-Admin
     Loaded: loaded (/etc/systemd/system/pdnsadmin.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-02 10:54:19 UTC; 5s ago
TriggeredBy: ? pdnsadmin.socket
   Main PID: 38881 (gunicorn)
      Tasks: 2 (limit: 2353)
     Memory: 62.5M
     CGroup: /system.slice/pdnsadmin.service
             ??38881 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa>
             ??38898 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsa>

Nov 02 10:54:19 pdnsadmin.example.com systemd[1]: Started PowerDNS-Admin.
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Starting gunicorn 20.0.4
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Listening at: unix:/run/pdnsadmin/socket (38881)
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38881]: [2020-11-02 10:54:19 +0000] [38881] [INFO] Using worker: sync
Nov 02 10:54:19 pdnsadmin.example.com gunicorn[38898]: [2020-11-02 10:54:19 +0000] [38898] [INFO] Booting worker with pid: 38898

? pdnsadmin.socket - PowerDNS-Admin socket
     Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-02 10:54:19 UTC; 5s ago
   Triggers: ? pdnsadmin.service
     Listen: /run/pdnsadmin/socket (Stream)
     CGroup: /system.slice/pdnsadmin.socket

Nov 02 10:54:19 pdnsadmin.example.com systemd[1]: Listening on PowerDNS-Admin socket.

Accéder à l’interface Web de PowerDNS Admin

Maintenant, ouvre ton navigateur Web et accède à l’interface Web d’administration de PowerDNS en utilisant l’URL http://pdnsadmin.example.com. Tu seras redirigé vers la page suivante :

Connexion Admin PowerDNS

Clique sur le bouton Créer un compte. Tu devrais voir l’écran suivant :

Indique tes coordonnées d’utilisateur admin et clique sur le bouton S’inscrire pour créer un compte. Tu devrais voir la page de connexion de l’administrateur de PowerDNS dans l’écran suivant :

Connecte-toi

Indique ton nom d’utilisateur admin, ton mot de passe et clique sur le bouton Connexion. L’interface Web d’administration de PowerDNS devrait apparaître à la page suivante :

Tableau de bord de l'administration de PowerDNS

Ici, indique l’URL de l’API PowerDNS pour te connecter à PowerDNS et le gérer. Ensuite, clique sur le bouton Mettre à jour pour enregistrer les modifications. Tu devrais voir la page suivante :

API PowerDNS configurée

Clique sur le bouton Dashboard. Tu devrais voir le tableau de bord d’administration de PowerDNS dans l’écran suivant :

Le tableau de bord de ton serveur PowerDNS

Conclusion

Félicitations ! Tu as réussi à installer et à configurer PowerDNS et PowerDNS admin sur le serveur Ubuntu 20.04. Tu peux maintenant créer des zones et ajouter des enregistrements via l’interface Web d’administration de PowerDNS.

Vous aimerez aussi...