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 pdnsadmin@localhost 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 :
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 :
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 :
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 :
Clique sur le bouton Dashboard. Tu devrais voir le tableau de bord d’administration de PowerDNS dans l’écran suivant :
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.