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.