Présentation
PowerDNS est une solution de serveur DNS open source qui aide à résoudre les espaces de noms. PowerDNS prend en charge la haute disponibilité, la redondance des données et divers backends, ce qui en fait une solution flexible et robuste.
Ce guide montre comment installer PowerDNS et l'interface d'administration de PowerDNS sur Ubuntu.
Prérequis
- Accès au terminal.
- Accès à l'utilisateur root.
- Un éditeur de texte, tel que nano.
- Un navigateur Web pour accéder à PowerDNS Admin.
Pourquoi utiliser PowerDNS ?
PowerDNS fournit deux solutions de serveur de noms :
- Le serveur faisant autorité , qui utilise la base de données pour résoudre les requêtes sur les domaines.
- Le récurseur , qui consulte d'autres serveurs faisant autorité pour résoudre les requêtes.
D'autres serveurs de noms combinent automatiquement les deux fonctions. PowerDNS les propose séparément et permet de combiner les deux solutions de manière transparente pour une configuration modulaire.
De plus, PowerDNS est open source, fonctionne aussi bien pour les petits que pour les gros volumes de requêtes et offre de nombreuses possibilités pour les solutions backend.
Installation de PowerDNS sur Ubuntu 18.04, 20.04 et 22.04
Suivez les étapes ci-dessous pour installer et configurer PowerDNS avec le serveur MariaDB en tant que base de données principale. De plus, les étapes guident les utilisateurs tout au long de la configuration de l'interface Web et de l'API PowerDNS Admin.
Étape 1 :Installer et configurer le serveur MariaDB
Pour installer et configurer MariaDB, procédez comme suit :
1. Mettre à jour et mettre à niveau les packages système :
sudo apt update && sudo apt upgrade
2. Installez le serveur et le client MariaDB avec :
sudo apt install mariadb-server mariadb-client
Remarque : Les autres serveurs de base de données possibles incluent PostgreSQL, MySQL et d'autres bases de données relationnelles.
Attendez la fin de l'installation avant de continuer.
3. Connectez-vous à MariaDB avec :
sudo mysql
Le terminal se connecte à une session de base de données.
4. Créez une base de données pour le serveur de noms PowerDNS :
create database pda;
Remarque : Si vous utilisez un nom de base de données différent, modifiez toutes les commandes en conséquence.
5. Accordez tous les privilèges au pda
utilisateur et indiquez le mot de passe utilisateur :
grant all privileges on pda.* TO 'pda'@'localhost' identified by 'YOUR_PASSWORD_HERE';
flush privileges;
6. Connectez-vous à la base de données :
use pda;
7. Utilisez les requêtes SQL suivantes pour créer des tables pour le pda base de données :
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. Confirmez que les tables ont été créées avec :
show tables;
La sortie répertorie les tables disponibles.
9. Quittez la connexion à la base de données :
exit;
La commande renvoie la session au terminal.
Étape 2 :Installez PowerDNS
Pour installer PowerDNS sur Ubuntu, procédez comme suit :
1. Basculez vers l'utilisateur root :
sudo su -
La session de terminal passe à l'utilisateur root.
Remarque : Découvrez la différence entre sudo et su.
2. Le systemd-resolved
Le service fournit les résolutions de noms aux applications locales. PowerDNS utilise son propre service pour les résolutions de noms.
Désactiver le systemd-resolved
service avec :
systemctl disable --now systemd-resolved
La sortie confirme la suppression du service.
3. Supprimez le fichier de configuration du service système avec :
rm -rf /etc/resolv.conf
4. Créez le nouveau resolv.conf fichier :
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
L'ajout du serveur de noms Google garantit la résolution DNS.
5. Installez les packages de serveur et de base de données PowerDNS avec :
apt-get install pdns-server pdns-backend-mysql -y
Attendez que l'installation soit terminée avant de continuer.
Étape 3 :Configurer PowerDNS
Configurez le fichier PowerDNS local pour vous connecter à la base de données :
1. Ouvrez le fichier de configuration pour le modifier :
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
2. Ajoutez les informations suivantes au fichier :
# 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=
Échangez le nom, l'utilisateur et le mot de passe de la base de données avec les paramètres corrects si vous en utilisez d'autres. Enregistrez et fermez le fichier.
3. Modifiez les autorisations du fichier :
chmod 777 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
4. Arrêtez les pdns service :
systemctl stop pdns
5. Testez la connexion à la base de données :
pdns_server --daemon=no --guardian=no --loglevel=9
La sortie indique une connexion réussie. Appuyez sur CTRL +C pour quitter le test.
6. Démarrez le service :
systemctl start pdns
7. Vérifiez la connexion avec la commande ss :
ss -alnp4 | grep pdns
Vérifiez le port TCP/UDP 53
est ouvert et en LISTEN
/UCONN
état.
Étape 4 :Installer les dépendances d'administration PowerDNS
L'administrateur PowerDNS permet de gérer PowerDNS via une interface Web. Pour installer le tableau de bord localement, procédez comme suit :
1. Installez le package de développement Python :
apt install python3-dev
2. Installez les dépendances :
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. Récupérez la configuration de Node.js :
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
4. Installez Node.js avec :
apt install -y nodejs
5. Ensuite, installez le gestionnaire de packages Yarn. Récupérez la clé publique Yarn et ajoutez-la à apt :
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
Yarn aide à créer les fichiers d'actifs.
6. Ajoutez Yarn à la liste des sources :
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
7. Mettez à jour la liste des sources d'apt :
apt update -y
8. Installez Yarn avec :
apt install yarn -y
9. Clonez le référentiel PowerDNS Admin Git sur /opt/web/powerdns-admin :
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin
Si vous utilisez un répertoire différent, échangez le répertoire de destination dans la commande et dans toutes les apparitions ultérieures.
10. Accédez au répertoire Git cloné :
cd /opt/web/powerdns-admin
11. Créez un environnement virtuel Python :
python3 -mvenv ./venv
12. Activez l'environnement virtuel avec :
source ./venv/bin/activate
13. Mettez à niveau pip vers la dernière version :
pip install --upgrade pip
Le gestionnaire de packages pip permet d'installer des exigences Python supplémentaires.
14. Installez les exigences à partir du requirements.txt fichier :
pip install -r requirements.txt
Après avoir installé toutes les exigences, l'administrateur PowerDNS nécessite une configuration supplémentaire avant de s'exécuter.
Étape 5 :Configurer et exécuter PowerDNS Admin
Pour configurer et démarrer PowerDNS Admin sur une instance locale, procédez comme suit :
1. Utilisez la commande cp pour copier l'exemple development.py Fichier Python vers production.py :
cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py
2. Ouvrez le production.py fichier à éditer :
nano /opt/web/powerdns-admin/configs/production.py
3. Modifiez les lignes suivantes :
#import urllib.parse
SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd2'
SQLA_DB_PASSWORD = 'changeme'
4. Décommentez l'importation de la bibliothèque, fournissez une clé secrète générée de manière aléatoire et fournissez le mot de passe correct de la base de données.
import urllib.parse
SECRET_KEY = '\x19\xc7\xd8\xa7$\xb6P*\xc6\xb8\xa1E\x90P\x12\x95'
SQLA_DB_PASSWORD = 'YOUR_PASSWORD_HERE'
Remarque : Générez une clé aléatoire à l'aide de Python :
python3 -c "import os; print(os.urandom(16))"
Copiez et collez la sortie dans le SECRET_KEY
valeur.
Enregistrez et fermez le fichier.
5. Exportez la variable de configuration de l'application de production :
export FLASK_CONF=../configs/production.py
6. Exportez la variable d'application flask :
export FLASK_APP=powerdnsadmin/__init__.py
7. Mettez à niveau le schéma de la base :
flask db upgrade
8. Installez les dépendances du projet :
yarn install --pure-lockfile
9. Créez des ressources d'application flask :
flask assets build
Attendez que la construction soit terminée.
10. Exécutez l'application avec :
./run.py
Laissez l'application en cours d'exécution.
11. L'application s'exécute actuellement sur localhost sur le port 9191
. Rendez-vous à l'adresse suivante :
http://localhost:9191
L'écran de connexion pour PowerDNS Admin s'affiche. Actuellement, il n'y a pas d'utilisateurs, et le premier utilisateur que vous enregistrez sera le compte administrateur.
12. Dans le terminal, quittez l'environnement virtuel et déconnectez-vous de l'utilisateur root avec :
exit
Le terminal revient à un état normal.
Étape 6 :Créer un service d'administration PowerDNS
Configurez PowerDNS Admin pour qu'il s'exécute au démarrage :
1. Créez un fichier de service systemd pour l'administrateur PowerDNS :
sudo nano /etc/systemd/system/powerdns-admin.service
2. Ajoutez le contenu suivant :
[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. Créez un fichier unité :
sudo systemctl edit --force powerdns-admin.service
4. Ajoutez ce qui suit :
[Service]
Environment="FLASK_CONF=../configs/production.py"
5. Créez un fichier socket :
sudo nano /etc/systemd/system/powerdns-admin.socket
6. Insérez les informations suivantes :
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.target
7. Créez un fichier d'environnement :
sudo nano /etc/tmpfiles.d/powerdns-admin.conf
8. Ajoutez les informations suivantes :
d /run/powerdns-admin 0755 pdns pdns -
9. Rechargez le démon :
sudo systemctl daemon-reload
10. Démarrez et activez le service et le socket :
sudo systemctl start powerdns-admin.service powerdns-admin.socket
sudo systemctl enable powerdns-admin.service powerdns-admin.socket
11. Vérifiez l'état avec :
sudo systemctl status powerdns-admin.service powerdns-admin.socket
Les services s'affichent comme s'exécutant sans aucune erreur.
Étape 7 :Installer et configurer Nginx
Pour configurer PowerDNS Admin pour qu'il s'exécute sur Nginx, procédez comme suit :
1. Installez Nginx avec :
sudo apt install nginx -y
2. Modifiez le fichier de configuration Nginx :
sudo nano /etc/nginx/conf.d/pdns-admin.conf
3. Ajoutez les informations suivantes :
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;
}
}
Si vous utilisez un nom de serveur différent, modifiez localhost
à l'adresse de votre serveur.
4. Vérifiez que le fichier ne contient aucune erreur de syntaxe :
nginx -t
5. Changer le propriétaire de powerdns-admin
à www-data
:
sudo chown -R www-data:www-data /opt/web/powerdns-admin
6. Redémarrez le service Nginx :
sudo systemctl restart nginx
7. Accédez à la page d'administration de PowerDNS via le navigateur :
localhost
Si vous créez un lien vers une adresse différente, utilisez l'adresse fournie dans le fichier de configuration Nginx.
Étape 8 :Configurer l'API PowerDNS
Pour configurer l'API PowerDNS, procédez comme suit :
1. Connectez-vous à PowerDNS Admin via le navigateur. Si vous exécutez pour la première fois, créez d'abord un nouvel utilisateur. Le premier utilisateur est automatiquement l'administrateur.
2. Ouvrez la clé API s dans le menu de gauche.
3. Cliquez sur Ajouter une clé+ bouton.
4. Le rôle le champ par défaut est Administrateur utilisateur. Ajoutez une description facultative pour la clé.
5. Cliquez sur Créer une clé pour générer une clé API.
6. Une fenêtre contextuelle imprime la clé. Copier la clé et appuyez sur Confirmer pour continuer.
7. Accédez au tableau de bord page.
8. Entrez le domaine et la clé API. Enregistrez les modifications.
9. Activez l'API dans la configuration PowerDNS. Ouvrez le fichier de configuration dans le terminal :
nano /etc/powerdns/pdns.conf
10. Décommentez et modifiez les lignes suivantes :
api=yes
api-key=yoursecretekey
webserver=yes
11. Enregistrez les modifications et fermez nano. L'API est configurée et prête à être utilisée.
Conclusion
Après avoir suivi les étapes de ce guide, vous avez configuré PowerDNS, l'interface Web d'administration PowerDNS sur Nginx, et connecté l'API PowerDNS.
Ensuite, découvrez les différents types d'enregistrements DNS ou les meilleures pratiques de sécurité DNS.