PowerDNS et PowerAdmin#

Deja nous allons commencer par installer PowerDNS et PowerAdmin avec un backend SQLite.

Pour simplifier les choses je pars sur le PowerDNS present dans les depots de base ; PowerDNS propose aussi ses propres repos.

Installation et configuration PowerDNS#

dnf install epel-release

dnf install pdns
dnf install pdns-backend-sqlite

Maintenant on peut passer a la conf de PowerDNS /etc/pdns/pdns.conf.

# allow-axfr-ips permet de definir les IP des serveurs qui ont le droit de repliquer
allow-axfr-ips=127.0.0.0/8,::1,185.119.254.173

# activation de l'api
api=yes
api-key=(openssl rand -hex 32)

# configuration du SOA par defaut des zones
default-soa-content=galaxy.as51144.net noc.g3e.fr. 0 10800 3600 604800 3600

# configuration du backend
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3

primary=yes

# activation du serveur web
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081

# intervalle de rafraichissement du cache, 300 par defaut
zone-cache-refresh-interval=10

On va donc initialiser la base de donnees.

groupadd -r pdnsdb
usermod -aG pdnsdb pdns

install -d -o pdns -g pdnsdb -m 2770 /var/lib/powerdns

sqlite3 /var/lib/powerdns/pdns.sqlite3 \
    < /usr/share/doc/pdns/schema.sqlite3.sql

chown -R pdns:pdnsdb /var/lib/powerdns

Installation et configuration PowerAdmin#

dnf -y install nginx php-fpm php-cli php-pdo php-intl php-xml php-mbstring \
    sqlite tar

Maintenant je vous laisse recuperer le .tar.gz de poweradmin dans /tmp. Ici nous allons installer PowerAdmin 4.4.1, mais pour l’utilisation des catalogs nous aurons besoin de la version 4.5.x, qui n’est pas encore sortie.

Une fois le .tar.gz present dans /tmp :

cd /tmp
install -d /var/www/poweradmin
tar xzf poweradmin.tar.gz -C /var/www/poweradmin --strip-components=1

usermod -aG pdnsdb nginx

install -d -o pdns -g pdnsdb -m 2770 /var/lib/poweradmin

sqlite3 /var/lib/poweradmin/pdns.sqlite3 \
    < /var/www/poweradmin/sql/poweradmin-sqlite-db-structure.sql

chown -R pdns:pdnsdb /var/lib/poweradmin

chmod 0660 /var/lib/poweradmin/pdns.sqlite3

/var/www/poweradmin/config/settings.php

<?php
return [
    'database' => [
        'type'     => 'sqlite',
        'file'     => '/var/lib/poweradmin/pdns.sqlite3',
        'host'     => '',
        'port'     => '',
        'user'     => '',
        'password' => '',
        'name'     => '',
        'charset'  => 'utf8',
        'debug'    => false,
    ],
    'security' => [
        'session_key' => '(openssl rand -hex 32)',
    ],
    'dns' => [
        'backend' => 'api',
        'hostmaster' => 'noc.g3e.fr',
        'ns1'        => 'galaxy.as51144.net',
        'ns2'        => 'icare.as51144.net',
    ],
    'pdns_api' => [
        'display_name' => 'PowerDNS',
        'url'          => 'http://127.0.0.1:8081/',
        'key'          => '(valeur generee dans pdns)',
        'server_name'  => 'localhost',
    ],
];
chown root:nginx /var/www/poweradmin/config/settings.php
chmod 0640 /var/www/poweradmin/config/settings.php
rm -rf /var/www/poweradmin/install

Vu que nous venons de supprimer install, nous allons creer manuellement le premier utilisateur :

php -r 'echo password_hash("MonMotDePasseTemporaire", PASSWORD_BCRYPT, ["cost" => 12]) . "\n";'
sqlite3 /var/lib/poweradmin/pdns.sqlite3

Puis on copie et on utilise le mot de passe “$2y$12$…”.

INSERT INTO users (username, password, fullname, email, description, perm_templ, active, use_ldap, auth_method)
VALUES ('admin', '$2y$12$…', 'Administrator', 'hostmaster@example.net', '', 1, 1, 0, 'sql');

Configuration de php-fpm :

sed -i -e 's/^user = apache/user = nginx/' \
   -e 's/^group = apache/group = nginx/' \
   -e 's/^listen.owner = nobody/listen.owner = nginx/' \
   -e 's/^listen.group = nobody/listen.group = nginx/' /etc/php-fpm.d/www.conf

chown root:nginx /var/lib/php/session /var/lib/php/opcache /var/lib/php/wsdlcache
chmod 0770       /var/lib/php/session /var/lib/php/opcache /var/lib/php/wsdlcache

systemctl enable --now php-fpm

On peut continuer avec la configuration de nginx /etc/nginx/conf.d/poweradmin.conf.

server {
    listen 80;
    server_name galaxy.as51144.net;
    root /var/www/poweradmin;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_AUTHORIZATION $http_authorization;
        fastcgi_read_timeout 180;
        include fastcgi_params;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; access_log off; }

    location ~ /\.                                   { deny all; }
    location ~ ^/vendor/twbs/(bootstrap|bootstrap-icons)/ { allow all; }
    location ~ /(config|lib|tests|vendor)/           { deny all; }
    location ~ \.(sql|sqlite|sqlite3|db|md|log)$     { deny all; }
}

On peut tester que la conf est bonne :

nginx -t

Activation et demarrage#

systemctl enable --now pdns
systemctl enable --now php-fpm
systemctl enable --now nginx

Normalement maintenant tout fonctionne. Youhou.