Ubuntu 20.04 - BIND9 als DNS-Server mit Namedmanager als Webinterface

Aus Twilight-Networks Wiki
Wechseln zu:Navigation, Suche

Vorwort

Diese Dokumentation beschreibt den Installationsvorgang von BIND9 als DNS-Server mit Namedmanager als Administrations-Webinterface.

Bitte vergewissern Sie sich, dass Ihr System über die nötigen Voraussetzungen verfügt, wie in der Infobox beschrieben. Weiterhin sind Grundkenntnisse im Umgang mit Linux erforderlich, da die Vorgehensweise, wie sie hier beschrieben ist, in manchen Teilen abweichen kann. Kein System ist wie das Andere. Die Dokumentation wurde sorgfältig von mir geprüft. Dennoch kann ich keinerlei Haftung für Schäden an Ihrem System oder eine Gewährleistung übernehmen. Bitte verwenden Sie diese Dokumentation auf eigene Gefahr.


Ubuntu 20.04 - BIND9 als DNS-Server mit Namedmanager als Webinterface
Stand: Stand 02/2021


Bind 9 ISC Blue.png


Verwendete Software:


Voraussetzungen:

  • Ubuntu 20.04 LTS


Weitere, empfohlene Dokumentationen:







Was muss ich in der Konfiguration anpassen?

Einige Parameter müssen auf Ihre Umgebung angepasst werden. Im Verlauf dieser Dokumentation müssen Sie nur die Parameter anpassen, die in der nachfolgenden Tabelle aufgelistet sind. Sie können also ganz einfach durch die Funktion "Suchen und Ersetzen" (STRG + H), die Konfigurationsdateien auf Ihre Umgebung anpassen. Das Gleiche gilt für auszuführende Kommandos.

Folgende Parameter werden verwendet:

Wert Hinweis
Allgemein:
Hostname Namedmanager- und DNS-Server dns.example.com Ersetzen Sie diesen Wert durch den FQDN Ihres Namedmanager- und DNS-Servers.
IPv4-Adresse 192.0.2.100 Ersetzen Sie diesen Wert durch die IP-Adresse Namedmanager- und DNS-Servers.
Hostname weiterer DNS-Server (Optional) dns01.example.com Ersetzen Sie diesen Wert durch den FQDN Ihres weiteren DNS-Servers.
IPv4-Adresse (Optional) 192.0.2.101 Ersetzen Sie diesen Wert durch die IP-Adresse weiteren DNS-Servers.
Domain example.com Ersetzen Sie diesen Wert durch Ihre Domain.
SSL:
SSL-Zertifikat /etc/ssl/private/selfsigned-cert.crt Ersetzen Sie diesen Wert durch den Pfad und den Namen Ihres SSL-Zertifikats.
SSL-Zertifikat Private Key /etc/ssl/private/selfsigned-cert.key Ersetzen Sie diesen Wert durch den Pfad und den Namen des private Keys Ihres SSL-Zertifikats.
MySQL:
root SicheresRootPasswortVerwenden! MySQL-Passwort für den Benutzer root. Ersetzen Sie dieses Passwort durch ein eigenes sicheres Passwort.
namedmanager SicheresRootPasswortVerwenden! MySQL-Passwort für den Benutzer postfix. Ersetzen Sie dieses Passwort durch ein eigenes sicheres Passwort.
E-Mail-Adressen:
Root-E-Mail-Adresse root@example.com Ersetzen Sie diesen Wert durch die E-Mail-Adresse desjenigen, der E-Mails für Root erhalten soll.



Konfigurations-Dateien werden immer nach dem gleichen Muster erstellt. Unter jeder Datei, die eine Anpassung erfordert, finden Sie die nötigen Hinweise.
Dateien, die zwar Parameter aber keine eigentliche Konfiguration enthalten, werden nach dem vorgegebenen Syntax erstellt.

Beispiel:
Im folgenden Beispiel ist die Datei /home/beispiel.conf zu erstellen und der Parameter domain anzupassen.

Erstellen Sie eine neue Datei /home/beispiel.conf mit folgendem Inhalt:

# nano /home/beispiel.conf
beispiel.conf
url     = www.twlnet.com
content = Dokumentationen

domain  = example.com
owner   = root
Anzupassende Parameter:
# beispiel.conf
[...]
domain  = example.com
[...]



Im folgenden Beispiel ist die Datei /home/beispiel.map mit einer Liste Ihrer E-Mail-Adressen zu erstellen.

Erstellen Sie eine neue Datei /home/beispiel.map nach folgendem Syntax:

# nano /home/beispiel.map
beispiel.map
benutzer1@example.com
benutzer2@example.com
benutzer3@example.com









Server vorbereiten

Root-Rechte einräumen

Während der gesamten Dokumentation werden Root-Rechte benötigt. Um auf das Voranstellen von sudo zu verzichten, verschaffen Sie sich für die gesamte Sitzung erhöhte Rechte mit:

# sudo -i


Update durchführen

Bringen Sie den Server auf den aktuellen Patchstand:

# apt update && apt upgrade



Hostname vergeben

Vergeben Sie den hostname:

# hostnamectl set-hostname dns.example.com


Editieren Sie die Datei /etc/hosts und ändern Sie den Hostnamen nach folgendem Syntax:

# nano /etc/hosts
/etc/hosts
127.0.0.1       localhost
127.0.1.1       dns.example.com dns
[...]



Software herunterladen und installieren

Laden Sie Bind9, Apache und Php aus dem offiziellen Ubuntu-Repository herunter:

# apt install bind9 apache2 mariadb-server php7.4 libapache2-mod-php7.4 php7.4-mysql php7.4-soap


Klonen Sie das Git-Repository namedmanager nach /usr/share/namedmanager:

# git clone https://github.com/jethrocarr/namedmanager.git /usr/share/namedmanager



MariaDB konfigurieren

Vergeben Sie ein Root-Passwort und die Zugriffsrechte für den MySQL-Server.
Ersetzen Sie SicheresRootPasswortVerwenden! durch ein eigenes Passwort.

# mysql_secure_installation
   [...]
   Enter current password for root (enter for none): "Enter"
   [...]
   Change the root password? [Y/n] :y
   New password: SicheresRootPasswortVerwenden!
   Re-enter new password: SicheresRootPasswortVerwenden!
   [...]
   Rspanove anonymous users? [Y/n] :y
   [...]
   Disallow root login remotely? [Y/n] :y
   [...]
   Rspanove test database and access to it? [Y/n] :y
   [...]
   Reload privilege tables now? [Y/n] :y
   [...]
   Thanks for using MariaDB!


Das MariaDB-Paket aus dem offiziellen Ubuntu-Repository nutzt standardmässig die Unix-Socket-Authentifizierung.

Die MySQL-Konsole kann also nur aufgerufen werden, wenn Sie entweder als root am System angemeldet sind, oder sudo verwenden. Eine weitere Passwort-Eingabe entfällt.
Ob die Unix-Socket-Authentifizierung verwendet wird, können Sie mit folgender Abfrage kontrollieren:

# sudo mysql -u root -p
  MariaDB [(none)]> SELECT user, host, plugin FROM mysql.user;
  +------+-----------+-------------+
  | user | host      | plugin      |
  +------+-----------+-------------+
  | root | localhost | unix_socket |
  +------+-----------+-------------+
  QUIT;


Wenn Sie die "normale" Passwort-Authentifizierung verwenden möchten, melden Sie sich an der MySQL-Konsole an und führen folgende Abfrage aus:

# sudo mysql
   MariaDB [(none)]> UPDATE mysql.user SET plugin = '' WHERE plugin = 'unix_socket';
   MariaDB [(none)]> FLUSH PRIVILEGES;
   MariaDB [(none)]> QUIT;



Apache konfigurieren

SSL-Zertifikat erstellen

Der Zugriff auf den Webserver soll selbstverständlich verschlüsselt stattfinden. Es wird also ein SSL-Zertifikat benötigt. Dieses können Sie entweder offiziell signieren lassen (i.d.R. kostenpflichtig) oder ein kostenloses, selbstsigniertes Zertifikat verwenden.
Je nach Anwendungsfall ist ein offizielles Zertifikat für den DNS-Server nicht erforderlich (wenn er z.B. nur für Dienste im eigenen Netzwerk verwendet wird). Sobald Sie den Server allerdings Dritten zur Verfügung stellen möchten, sollte der Server so regelkonform wie möglich betrieben werden.
Günstige SSL-Zertifikate sind z.B. bei DomainFactory oder interSSL erhältlich. Auch ein Let's Encrypt-Zertifikat ist eine gute und kostenlose Alternative.



Wechseln Sie in den Ordner /etc/ssl/private und erstellen Sie ein selbstsiginiertes Zertifikat:

# cd /etc/ssl/private
# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout selfsigned-cert.key -out selfsigned-cert.crt


Geben Sie die Informationen ein, die das Zertifikat enthalten soll. Wichtig ist hierbei nur der Common Name. Geben Sie als Common Name den FQDN des DNS-Servers an.

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: dns.example.com
Email Address []:


Passen Sie die Berechtigungen auf den Private Key an:

# chmod 600 *.key



SSL-Zertifikat zu vertrauenswürdigen Zertifikaten hinzufügen

Kopieren Sie das Zertifikat in den Ordner /usr/share/ca-certificates:

# cp /etc/ssl/private/selfsigned-cert.crt /usr/share/ca-certificates/


Führen Sie das Kommando dpkg-reconfigure ca-certificates aus und fügen Sie das Zertitikat hinzu:

# dpkg-reconfigure ca-certificates


Wählen Sie im Fenster ca-certificates-Konfiguration Ja aus und bestätigen Sie mit der Enter-Taste:

Ca-certificates reconfigure01.PNG



Aktivieren Sie das Zertifikat im nächsten Fenster mit der Leertaste und bestätigen Sie anschliessend mit der Enter-Taste:

Ca-certificates reconfigure02.PNG




Diffie-Hellman-Parameter erstellen

Der Diffie-Hellman-Schlüsselaustausch gehört zu den asymmetrischen Kryptoverfahren und basiert auf der diskreten Exponentialfunktion. Dafür sind zwei Parameter notwendig:

Der erste Parameter p besteht aus einer grossen Primzahl und der Zweite gibt den sogenannten Generator-Wert g an (bei OpenSSL ist dieser Wert "2").
Beide Parameter werden anschliessend in einer Datei abgelegt.

Da die, in RFC 2409 empfohlene, Schlüssellänge von 1024 Bit als nicht mehr sicher gilt, generieren wir die Parameter mit einer Schlüssellänge von 4096 Bit ("4096-bit MODP Group" gemäß RFC 3526).

In unserem Setup verwenden wir die DH-Parameter für die SSL-Verschlüsselung von Apache.
Die entsprechden Parameter finden Sie später in der Datei:

  • /etc/apache2/sites-available/new-default-ssl.conf
    # new-default-ssl.conf
    [...]
    SSLOpenSSLConfCmd DHParameters /etc/ssl/private/dh4096.pem
    [...]
    


Erstellen Sie die Diffie-Hellman-Parameter im Ordner /etc/ssl/private:

# cd /etc/ssl/private
# openssl dhparam -out dh40968.tmp 4096 && mv dh4096.tmp dh4096.pem
# chmod 600 dh4096.pem



(Optional) Diffie-Hellman-Parameter täglich erneuern

Grosse Organisationen, wie z.B. die NSA, könnten Rainbow Tables für Default-Diffie-Hellman-Parameter besitzen. Schenkt man dem NSA-Whistleblower Edward Snowden Glauben, ist diese Annahme sogar plausibel. Mit der entsprechenden Rechenleistung könnten demnach für häufig verwendete Diffie-Hellman-Parameter Rainbow Tables berechnet werden. Hier hilft eine gute Server-Konfiguration, die auf maximale Sicherheit ausgelegt ist. Mit Hilfe der folgenden Konfiguration werden die Diffie-Hellman-Parameter täglich erneuert.



Erstellen Sie die Datei /etc/cron.daily/dh-param-regeneration mit folgendem Inhalt:

# nano /etc/cron.daily/dh-param-regeneration
dh-param-regeneration
#!/bin/sh
#
#########################################################################
# Script Name   : dh-param-regeneration                                 #
# Description   : Regenerates Diffie Hellman Parameter and sets         #
#                 File-Permission                                       #
# Args          :                                                       #
#                                                                       #
# Version       : 1.00                                                  #
# Last Update   : 03.02.2021                                            #
# Author        : Twilight                                              #
# Email         : twilight@twlnet.com                                   #
# Web:          : https://www.twilight-networks.com                     #
#########################################################################
# Tested with   : Ubuntu 16.04 LTS                                      #
#########################################################################

# File-Dir
DHDIR='/etc/ssl/private/'
# Key-Size
DHBIT='4096'



# Normaly there is no need to change anything below this comment line!
#########################################################################

if [ ! -d ${DHDIR} ]; then
        echo Error: Directory "'"${DHDIR}"'" does not exist!
        exit 1
fi

FILE=`mktemp` ;
openssl dhparam -out $FILE ${DHBIT} > /dev/null 2>&1 && mv -f $FILE ${DHDIR}dh${DHBIT}.pem
chmod 600 ${DHDIR}dh${DHBIT}.pem
exit 0
#end


Setzen Sie die nötigen Zugriffsrechte, damit die Datei ausgeführt werden kann:

# chmod 755 /etc/cron.daily/dh-param-regeneration 



Apache-Konfiguration erstellen

Informationen, die über das Webinterface von Namedmanager eingegeben werden, sollen selbstverständlich auch verschlüsselt übertragen werden. Daher wird in dieser Apache-Konfiguration festgelegt, dass Verbindungen über http automatisch auf https umgeleitet werden. Natürlich wird auch hier der Diffie-Hellman-Schlüsselaustausch verwendet.


Deaktivien Sie die Default-Site:

# a2dissite 000-default.conf


Löschen Sie die Default-index.php:

# rm /var/www/html/index.html


Erstellen Sie eine neue Datei /etc/apache2/sites-available/new-default.conf mit folgendem Inhalt:

# nano /etc/apache2/sites-available/new-default.conf
new-default.conf
<VirtualHost *:80>
    ServerName example.com
    ServerAdmin webmaster@example.com

    DocumentRoot /var/www

    #Weiterleitung von HTTP zu HTTPS
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Anzupassende Parameter:
# new-default.conf
[...]
ServerName example.com
ServerAdmin webmaster@example.com
[...]


Erstellen Sie eine neue Datei /etc/apache2/sites-available/new-default-ssl.conf mit folgendem Inhalt:

# nano /etc/apache2/sites-available/new-default-ssl.conf
new-default-ssl.conf
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerName example.com
        ServerAdmin webmaster@example.com

        DocumentRoot /var/www/html

        # Aktivieren Sie diese Option, wenn Sie ein offiziell siginiertes SSL-Zertifikat verwenden
        #Header always set Strict-Transport-Security "max-age=31556926; includeSubDomains"

        SSLEngine on
        SSLCompression Off
        SSLHonorCipherOrder on
        SSLOpenSSLConfCmd DHParameters /etc/ssl/private/dh4096.pem
        SSLProtocol -ALL +TLSv1.1 +TLSv1.2 +TLSv1.3
        SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
        SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
        
        SSLCertificateFile /etc/ssl/private/selfsigned-cert.crt
        SSLCertificateKeyFile /etc/ssl/private/selfsigned-cert.key

        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
</IfModule>
Anzupassende Parameter:
# new-default-ssl.conf
[...]
ServerName example.com
ServerAdmin webmaster@example.com
[...]
# Nur anpassen, wenn Sie ein anderes Zertifikat verwenden!
SSLCertificateFile /etc/ssl/private/selfsigned-cert.crt
SSLCertificateKeyFile /etc/ssl/private/selfsigned-cert.key
[...]



Aktivieren Sie die Module ssl und rewrite, die neuen Sites und starten Sie Apache neu:

# a2enmod ssl rewrite
# a2ensite new-default.conf new-default-ssl.conf
# service apache2 restart



Namedmanager einrichten

Datenbank für Namedmanager einrichten

Importieren Sie das Namedmanager-Datenbankschema und anschliessend das Upgrade:

# mysql -u root -p < /usr/share/namedmanager/sql/version_20171107_install.sql
# mysql -u root -p namedmanager < /usr/share/namedmanager/sql/version_20171107_upgrade.sql


Verbinden Sie sich mit dem MySQL-Server:

# mysql -u root -p


Erstellen Sie einen Benutzer namedmanager. Räumen Sie dem Benutzer die benötigten Rechte ein.
Ersetzen Sie SicheresPasswortVerwenden! durch ein eigenes Passwort.

GRANT USAGE ON * . * TO 'namedmanager'@'%' IDENTIFIED BY 'SicheresPasswortVerwenden!' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;
GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES, LOCK TABLES ON `namedmanager` . * TO 'namedmanager'@'%';
FLUSH PRIVILEGES;
QUIT;



Namedmanager-Konfiguration erstellen

Erstellen Sie einen neuen Ordner /etc/namedmanager und kopieren Sie die Beispiel-Konfiguration:

# mkdir /etc/namedmanager
# cp /usr/share/namedmanager/htdocs/include/sample-config.php /etc/namedmanager/config.php


Öffnen Sie die Datei /etc/namedmanager/config.php und ändern Sie folgende Parameter:

# nano /etc/namedmanager/config.php
Anzupassende Parameter:
# config.php
[...]
$config["db_name"] = "namedmanager";                           // database name
$config["db_user"] = "namedmanager";                           // MySQL user
$config["db_pass"] = "SicheresPasswortVerwenden!";             // MySQL password (if any)
[...]


Schränken Sie die Berechtigungen auf den Benutzer www-data ein:

# chown www-data:www-data /etc/namedmanager/config.php
# chmod 600 /etc/namedmanager/config.php


Erstellen Sie die notwendigen Verknüpfungen:

# ln -s /etc/namedmanager/config.php /usr/share/namedmanager/htdocs/include/config-settings.php
# ln -s /usr/share/namedmanager/htdocs /var/www/html/namedmanager



Log-Verzeichnis erstellen

Erstellen Sie den Ordner /var/log/namedmanager und vergeben Sie die benötigten Zugriffsrechte:

# mkdir /var/log/namedmanager
# chown www-data:www-data /var/log/namedmanager



Cron-Job erstellen

Erstellen Sie die Datei /etc/cron.d/namedmanager-www mit folgendem Inhalt:

# nano /etc/cron.d/namedmanager-www
namedmanager-www
#
# NAMEDMANAGER CRONJOBS
#

# Synchronise any changes to Route53
*/1 * * * * www-data cd /usr/share/namedmanager/htdocs/include/cron/; php -q route53.php >> /var/log/namedmanager/cron-route53 2>&1
#



BIND-Integration einrichten

Konfigurationsdatei erstellen

Kopieren Sie die Beispiel-Konfiguration in den Ordner /etc/namedmanager:

# cp /usr/share/namedmanager/bind/include/sample-config.php /etc/namedmanager/config-bind.php


Öffnen Sie die Datei /etc/namedmanager/config-bind.php und ändern Sie folgende Parameter:

# nano /etc/namedmanager/config-bind.php
Anzupassende Parameter:
# config-bind.php
[...]
$config["api_url"]              = "https://dns.example.com/namedmanager";       // Application Install Location
$config["api_server_name"]      = "dns.example.com";            // Name of the DNS server (important: part of the authentication process)
$config["api_auth_key"]         = "ultrahighsecretkey";         // API authentication key
[...]
$config["log_file"]             = "/var/log/syslog";
[...]
$config["bind"]["config"]       = "/etc/bind/named.namedmanager.conf";      // configuration file to write bind config too
$config["bind"]["zonefiledir"]  = "/var/cache/bind/";           // directory to write zonefiles too
[...]


Schränken Sie die Zugriffsrechte ein:

# chmod 600 /etc/namedmanager/config-bind.php


Erstellen Sie die notwendige Verknüpfung:

# ln -s /etc/namedmanager/config-bind.php /usr/share/namedmanager/bind/include/config-settings.php



named.conf erweitern

Fügen Sie der Datei /etc/bind/named.conf folgendes hinzu:

# nano /etc/bind/named.conf
named.conf
[...]
include "/etc/bind/named.namedmanager.conf";


Starten Sie den Dienst neu, damit die Änderung angewendet wird:

# service bind9 restart



Logpush einrichten

Erstellen Sie eine neue Datei /etc/init.d/namedmanager_logpush mit folgendem Inhalt:

# nano /etc/init.d/namedmanager_logpush
namedmanager_logpush
#!/bin/sh
### BEGIN INIT INFO
# Provides:          namedmanager_logpush
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Delivers logs from Named (via syslog) back to NamedManager
### END INIT INFO

# Source function library.
. /lib/lsb/init-functions

start()
{
        echo -n $"Starting namedmanager_logpush service:"
        nohup php -q /usr/share/namedmanager/bind/namedmanager_logpush.php 2>&1 > /var/log/namedmanager/namedmanager_logpush &
        echo -n $! > /var/run/namedmanager_bind_logpush.pid
        echo ""
}

stop()
{
        echo -n "Stopping namedmanager_logpush services:"
        kill `cat /var/run/namedmanager_bind_logpush.pid`
        echo ""
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        ;;
  status)
        status php
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload}"
        exit 1
        ;;
esac

exit 0
#


Vergeben Sie die benötigte Berechtigung, damit die Datei ausgeführt werden kann und aktualisieren Sie anschließend systemd:

# chmod 755 /etc/init.d/namedmanager_logpush
# systemctl daemon-reload


Führen Sie folgendes Kommando aus, damit der Dienst nach einem Neustart automatisch startet:

# systemctl enable namedmanager_logpush
   namedmanager_logpush.service is not a native service, redirecting to systemd-sysv-install.
   Executing: /lib/systemd/systemd-sysv-install enable namedmanager_logpush


Starten Sie den Dienst:

# service namedmanager_logpush start



Cron-Job erstellen

Erstellen Sie die Datei /etc/cron.d/namedmanager-bind mit folgendem Inhalt:

# nano /etc/cron.d/namedmanager-bind
namedmanager-bind
#
# NAMEDMANAGER INTEGRATION
# Cron Jobs
#

# check for new configuration every minute
*/1 * * * * root php -q /usr/share/namedmanager/bind/namedmanager_bind_configwriter.php >> /var/log/namedmanager/namedmanager_bind_configwriter

# PHP slowly leaks memory, restart the process weekly to prevent it getting too large over months
01 01 * * 0 root /etc/init.d/namedmanager_logpush restart >> /dev/null 2>&1
#



DNS-Domain einrichten und DNS-Server hinzufügen

Rufen Sie das Namedmanager-Webinterface auf und melden Sie sich an:
Der Standard-Benutzer lautet setup mit Passwort setup123.

http://dns.example.com/namedmanager


Namedmanager web01.PNG



DNS-Domain einrichten

Öffnen Sie den Reiter 'Domain/Zones' und wählen Sie 'Add New Domain'

Namedmanager web02.PNG




Tragen Sie unter 'Domain Name' die Domain 'example.com' ein und unter 'Email Administrator Address' die Email-Adresse des Administrators ein.

Namedmanager web03.PNG




Öffnen Sie den Reiter 'Domain/Zones' und wählen Sie 'domain records' für die Domain 'example.com' aus.

Namedmanager web04.PNG




Tragen Sie als Test-DNS-Eintrag den Host-A 'test' mit der IP-Adresse '192.0.2.1' ein und wählen Sie anschliessend 'Save Changes'

Namedmanager web05.PNG




DNS-Server hinzufügen

Öffnen Sie den Reiter 'Name Servers' und wählen Sie 'Add New Server'

Namedmanager web06.PNG




Tragen Sie als 'Name Server FQDN' den FQDN Ihres Namedmanager-Servers ein und als 'API Authentication Key' den API-Key aus der Datei config-bind.php ein

Namedmanager web07.PNG




(Optional) Weitere DNS-Server hinzufügen

Hostname vergeben

Vergeben Sie den hostname:

# hostnamectl set-hostname dns01.example.com


Editieren Sie die Datei /etc/hosts und ändern Sie den Hostnamen nach folgendem Syntax:

# nano /etc/hosts
/etc/hosts
127.0.0.1       localhost
127.0.1.1       dns01.example.com dns01
[...]



Software herunterladen und installieren

Laden Sie Bind9 und Php aus dem offiziellen Ubuntu-Repository herunter:

# apt install bind9 php7.4 php7.4-soap


Klonen Sie das Git-Repository namedmanager nach /usr/share/namedmanager:

# git clone https://github.com/jethrocarr/namedmanager.git /usr/share/namedmanager


Beenden und deaktivieren Sie den Dienst Apache:

# service apache2 stop
# systemctl disable apache2.service



Konfigurationsdatei erstellen

Erstellen Sie einen neuen Ordner /etc/namedmanager und kopieren Sie die Beispiel-Konfiguration:

# mkdir /etc/namedmanager
# cp /usr/share/namedmanager/bind/include/sample-config.php /etc/namedmanager/config-bind.php


Öffnen Sie die Datei /etc/namedmanager/config-bind.php und ändern Sie folgende Parameter:

# nano /etc/namedmanager/config-bind.php
Anzupassende Parameter:
# config-bind.php
[...]
$config["api_url"]              = "https://dns.example.com/namedmanager";       // Application Install Location
$config["api_server_name"]      = "dns01.example.com";          // Name of the DNS server (important: part of the authentication process)
$config["api_auth_key"]         = "ultrahighsecretkey";         // API authentication key
[...]
$config["log_file"]             = "/var/log/syslog";
[...]
$config["bind"]["config"]       = "/etc/bind/named.namedmanager.conf";      // configuration file to write bind config too
$config["bind"]["zonefiledir"]  = "/var/cache/bind/";           // directory to write zonefiles too
[...]


Schränken Sie die Zugriffsrechte ein:

# chmod 600 /etc/namedmanager/config-bind.php


Erstellen Sie die notwendige Verknüpfung:

# ln -s /etc/namedmanager/config-bind.php /usr/share/namedmanager/bind/include/config-settings.php



SSL-Zertifikat zu vertrauenswürdigen Zertifikaten hinzufügen

Kopieren Sie das Zertifikat vom Namedmanager-Server (dns.example.com) in den lokalen Ordner /usr/share/ca-certificates:

dns.example.com:~# scp -r /etc/ssl/private/selfsigned-cert.crt root@192.0.2.101:/usr/share/ca-certificates/


Führen Sie das Kommando dpkg-reconfigure ca-certificates aus und fügen Sie das Zertitikat hinzu:

# dpkg-reconfigure ca-certificates


Wählen Sie im Fenster ca-certificates-Konfiguration Ja aus und bestätigen Sie mit der Enter-Taste:

Ca-certificates reconfigure01.PNG



Aktivieren Sie das Zertifikat im nächsten Fenster mit der Leertaste und bestätigen Sie anschliessend mit der Enter-Taste:

Ca-certificates reconfigure02.PNG




named.conf erweitern

Fügen Sie der Datei /etc/bind/named.conf folgendes hinzu:

# nano /etc/bind/named.conf
named.conf
[...]
include "/etc/bind/named.namedmanager.conf";


Starten Sie den Dienst neu, damit die Änderung angewendet wird:

# service bind9 restart



Logpush einrichten

Erstellen Sie eine neue Datei /etc/init.d/namedmanager_logpush mit folgendem Inhalt:

# nano /etc/init.d/namedmanager_logpush
namedmanager_logpush
#!/bin/sh
### BEGIN INIT INFO
# Provides:          namedmanager_logpush
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Delivers logs from Named (via syslog) back to NamedManager
### END INIT INFO

# Source function library.
. /lib/lsb/init-functions

start()
{
        echo -n $"Starting namedmanager_logpush service:"
        nohup php -q /usr/share/namedmanager/bind/namedmanager_logpush.php 2>&1 > /var/log/namedmanager/namedmanager_logpush &
        echo -n $! > /var/run/namedmanager_bind_logpush.pid
        echo ""
}

stop()
{
        echo -n "Stopping namedmanager_logpush services:"
        kill `cat /var/run/namedmanager_bind_logpush.pid`
        echo ""
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        ;;
  status)
        status php
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload}"
        exit 1
        ;;
esac

exit 0
#


Vergeben Sie die benötigte Berechtigung, damit die Datei ausgeführt werden kann und aktualisieren Sie anschließend systemd:

# chmod 755 /etc/init.d/namedmanager_logpush
# systemctl daemon-reload


Führen Sie folgendes Kommando aus, damit der Dienst nach einem Neustart automatisch startet:

# systemctl enable namedmanager_logpush
   namedmanager_logpush.service is not a native service, redirecting to systemd-sysv-install.
   Executing: /lib/systemd/systemd-sysv-install enable namedmanager_logpush


Starten Sie den Dienst:

# service namedmanager_logpush start



Log-Verzeichnis erstellen

Erstellen Sie den Ordner /var/log/namedmanager und vergeben Sie die benötigten Zugriffsrechte:

# mkdir /var/log/namedmanager
# chown www-data:www-data /var/log/namedmanager



Cron-Job erstellen

Erstellen Sie die Datei /etc/cron.d/namedmanager-bind mit folgendem Inhalt:

# nano /etc/cron.d/namedmanager-bind
namedmanager-bind
#
# NAMEDMANAGER INTEGRATION
# Cron Jobs
#

# check for new configuration every minute
*/1 * * * * root php -q /usr/share/namedmanager/bind/namedmanager_bind_configwriter.php >> /var/log/namedmanager/namedmanager_bind_configwriter

# PHP slowly leaks memory, restart the process weekly to prevent it getting too large over months
01 01 * * 0 root /etc/init.d/namedmanager_logpush restart >> /dev/null 2>&1
#



DNS-Server hinzufügen

Rufen Sie das Namedmanager-Webinterface auf und melden Sie sich an:
Der Standard-Benutzer lautet setup mit Passwort setup123.

http://dns.example.com/namedmanager


Namedmanager web01.PNG




Öffnen Sie den Reiter 'Name Servers' und wählen Sie 'Add New Server'

Namedmanager web08.PNG




Tragen Sie als 'Name Server FQDN' den FQDN Ihres weiteren DNS-Servers ein und als 'API Authentication Key' den API-Key aus der Datei config-bind.php ein

Namedmanager web09.PNG