Ubuntu 20.04 - BIND9 als DNS-Server mit Namedmanager als Webinterface
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.
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
url = www.twlnet.com
content = Dokumentationen
domain = example.com
owner = root
# 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
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
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!
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
:
Aktivieren Sie das Zertifikat im nächsten Fenster mit der Leertaste
und bestätigen Sie anschliessend mit der Enter-Taste
:
Diffie-Hellman-Parameter erstellen
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
#!/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
<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>
# 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
<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>
# 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
# 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 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
# 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
[...] 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
#!/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 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
DNS-Domain einrichten
Öffnen Sie den Reiter 'Domain/Zones' und wählen Sie 'Add New Domain'
Tragen Sie unter 'Domain Name' die Domain 'example.com' ein und unter 'Email Administrator Address' die Email-Adresse des Administrators ein.
Öffnen Sie den Reiter 'Domain/Zones' und wählen Sie 'domain records' für die Domain 'example.com' aus.
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'
DNS-Server hinzufügen
Öffnen Sie den Reiter 'Name Servers' und wählen Sie 'Add New Server'
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
(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
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
# 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
:
Aktivieren Sie das Zertifikat im nächsten Fenster mit der Leertaste
und bestätigen Sie anschliessend mit der Enter-Taste
:
named.conf erweitern
Fügen Sie der Datei /etc/bind/named.conf
folgendes hinzu:
# nano /etc/bind/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
#!/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 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
Öffnen Sie den Reiter 'Name Servers' und wählen Sie 'Add New Server'
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