GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Installieren Sie PowerDNS auf Ubuntu 18.04, 20.04 und 22.04

Einführung

PowerDNS ist eine Open-Source-DNS-Serverlösung, die beim Auflösen von Namespaces hilft. PowerDNS unterstützt Hochverfügbarkeit, Datenredundanz und verschiedene Backends, was es zu einer flexiblen und robusten Lösung macht.

Diese Anleitung zeigt, wie man PowerDNS und die PowerDNS-Verwaltungsschnittstelle auf Ubuntu installiert.

Voraussetzungen

  • Zugang zum Terminal.
  • Zugriff auf den Root-Benutzer.
  • Ein Texteditor wie Nano.
  • Ein Webbrowser für den Zugriff auf PowerDNS Admin.

Warum PowerDNS verwenden?

PowerDNS bietet zwei Nameserver-Lösungen:

  • Der autoritative Server , die die Datenbank verwendet, um Abfragen zu Domänen aufzulösen.
  • Der Rekursor , der sich mit anderen autoritativen Servern konsultiert, um Abfragen zu lösen.

Andere Nameserver kombinieren die beiden Funktionen automatisch. PowerDNS bietet sie separat an und ermöglicht die nahtlose Mischung der beiden Lösungen für einen modularen Aufbau.

Darüber hinaus ist PowerDNS Open Source, funktioniert gleichermaßen gut für kleine und große Abfragevolumina und bietet viele Möglichkeiten für Backend-Lösungen.

Installieren von PowerDNS auf Ubuntu 18.04, 20.04 und 22.04

Führen Sie die folgenden Schritte aus, um PowerDNS mit dem MariaDB-Server als Backend-Datenbank zu installieren und zu konfigurieren. Darüber hinaus führen die Schritte Benutzer durch die Einrichtung der PowerDNS Admin-Webschnittstelle und -API.

Schritt 1:MariaDB-Server installieren und konfigurieren

Gehen Sie wie folgt vor, um MariaDB zu installieren und zu konfigurieren:

1. Systempakete aktualisieren und upgraden:

sudo apt update && sudo apt upgrade

2. Installieren Sie den MariaDB-Server und -Client mit:

sudo apt install mariadb-server mariadb-client

Hinweis: Andere mögliche Datenbankserver sind PostgreSQL, MySQL und andere relationale Datenbanken.

Warten Sie, bis die Installation abgeschlossen ist, bevor Sie fortfahren.

3. Verbinden Sie sich mit MariaDB mit:

sudo mysql

Das Terminal stellt eine Verbindung zu einer Datenbanksitzung her.

4. Erstellen Sie eine Datenbank für den PowerDNS-Nameserver:

create database pda;

Hinweis: Wenn Sie einen anderen Datenbanknamen verwenden, ändern Sie alle nachfolgenden Befehle entsprechend.

5. Gewähren Sie pda alle Berechtigungen Benutzer und geben Sie das Benutzerkennwort ein:

grant all privileges on pda.* TO 'pda'@'localhost' identified by 'YOUR_PASSWORD_HERE';
flush privileges;

6. Verbinden Sie sich mit der Datenbank:

use pda;

7. Verwenden Sie die folgenden SQL-Abfragen, um Tabellen für den pda zu erstellen Datenbank:

CREATE TABLE domains (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255) NOT NULL,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INT DEFAULT NULL,
  type                  VARCHAR(6) NOT NULL,
  notified_serial       INT UNSIGNED DEFAULT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX name_index ON domains(name);


CREATE TABLE records (
  id                    BIGINT AUTO_INCREMENT,
  domain_id             INT DEFAULT NULL,
  name                  VARCHAR(255) DEFAULT NULL,
  type                  VARCHAR(10) DEFAULT NULL,
  content               VARCHAR(64000) DEFAULT NULL,
  ttl                   INT DEFAULT NULL,
  prio                  INT DEFAULT NULL,
  change_date           INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);


CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';


CREATE TABLE comments (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  comment               TEXT CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);


CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);


CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainidindex ON cryptokeys(domain_id);


CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

8. Bestätigen Sie, dass die Tabellen erstellt wurden mit:

show tables;

Die Ausgabe listet die verfügbaren Tabellen auf.

9. Beenden Sie die Datenbankverbindung:

exit;

Der Befehl gibt die Sitzung an das Terminal zurück.

Schritt 2:PowerDNS installieren

Gehen Sie wie folgt vor, um PowerDNS unter Ubuntu zu installieren:

1. Wechseln Sie zum Root-Benutzer:

sudo su -

Die Terminalsitzung wechselt zum Root-Benutzer.

Hinweis: Erfahren Sie mehr über den Unterschied zwischen sudo und su.

2. Die systemd-resolved Der Dienst stellt die Namensauflösungen für lokale Anwendungen bereit. PowerDNS verwendet einen eigenen Dienst zur Namensauflösung.

Deaktivieren Sie systemd-resolved Service mit:

systemctl disable --now systemd-resolved

Die Ausgabe bestätigt die Dienstentfernung.

3. Löschen Sie die Systemdienst-Konfigurationsdatei mit:

rm -rf /etc/resolv.conf

4. Erstellen Sie die neue resolv.conf Datei:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

Das Anhängen des Google-Nameservers stellt die DNS-Auflösung sicher.

5. Installieren Sie die PowerDNS-Server- und Datenbank-Backend-Pakete mit:

apt-get install pdns-server pdns-backend-mysql -y

Warten Sie, bis die Installation abgeschlossen ist, bevor Sie fortfahren.

Schritt 3:PowerDNS konfigurieren

Konfigurieren Sie die lokale PowerDNS-Datei, um eine Verbindung zur Datenbank herzustellen:

1. Öffnen Sie die Konfigurationsdatei zum Bearbeiten:

nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf

2. Fügen Sie der Datei die folgenden Informationen hinzu:

# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql

# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=pda
gmysql-user=pda
gmysql-password=YOUR_PASSWORD_HERE
gmysql-dnssec=yes
# gmysql-socket=

Tauschen Sie den Datenbanknamen, den Benutzer und das Passwort mit den richtigen Parametern aus, wenn Sie andere verwenden. Speichern und schließen Sie die Datei.

3. Ändern Sie die Dateiberechtigungen:

chmod 777 /etc/powerdns/pdns.d/pdns.local.gmysql.conf

4. Beenden Sie die pdns Dienst:

systemctl stop pdns

5. Testen Sie die Verbindung zur Datenbank:

pdns_server --daemon=no --guardian=no --loglevel=9

Die Ausgabe zeigt eine erfolgreiche Verbindung. Drücken Sie STRG +C um den Test zu beenden.

6. Starten Sie den Dienst:

systemctl start pdns

7. Überprüfen Sie die Verbindung mit dem Befehl ss:

ss -alnp4 | grep pdns

Überprüfen Sie den TCP/UDP-Port 53 ist offen und in LISTEN /UCONN Zustand.

Schritt 4:PowerDNS-Admin-Abhängigkeiten installieren

Der PowerDNS Admin hilft bei der Verwaltung von PowerDNS über eine Webschnittstelle. Gehen Sie wie folgt vor, um das Dashboard lokal zu installieren:

1. Installieren Sie das Python-Entwicklungspaket:

apt install python3-dev

2. Abhängigkeiten installieren:

apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl

3. Rufen Sie das Node.js-Setup ab:

curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -

4. Installieren Sie Node.js mit:

apt install -y nodejs

5. Installieren Sie als Nächstes den Yarn-Paketmanager. Rufen Sie den öffentlichen Yarn-Schlüssel ab und fügen Sie ihn zu apt hinzu :

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -

Yarn hilft beim Erstellen der Asset-Dateien.

6. Garn zur Quellenliste hinzufügen:

echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

7. Aktualisieren Sie die apt-Quellenliste:

apt update -y

8. Installieren Sie Yarn mit:

apt install yarn -y

9. Klonen Sie das PowerDNS Admin Git-Repository nach /opt/web/powerdns-admin :

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin

Wenn Sie ein anderes Verzeichnis verwenden, tauschen Sie das Zielverzeichnis im Befehl und in allen nachfolgenden Erscheinungen aus.

10. Navigieren Sie zum geklonten Git-Verzeichnis:

cd /opt/web/powerdns-admin

11. Erstellen Sie eine virtuelle Python-Umgebung:

python3 -mvenv ./venv

12. Aktivieren Sie die virtuelle Umgebung mit:

source ./venv/bin/activate

13. Aktualisieren Sie Pip auf die neueste Version:

pip install --upgrade pip

Der Pip-Paketmanager hilft bei der Installation zusätzlicher Python-Anforderungen.

14. Installieren Sie die Anforderungen aus der requirements.txt Datei:

pip install -r requirements.txt

Nach der Installation aller Anforderungen erfordert der PowerDNS Admin eine zusätzliche Konfiguration, bevor er ausgeführt werden kann.

Schritt 5:PowerDNS Admin konfigurieren und ausführen

Gehen Sie wie folgt vor, um PowerDNS Admin auf einer lokalen Instanz zu konfigurieren und zu starten:

1. Verwenden Sie den Befehl cp, um das Beispiel development.py zu kopieren Python-Datei in production.py :

cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py

2. Öffnen Sie die production.py Datei zum Bearbeiten:

nano /opt/web/powerdns-admin/configs/production.py

3. Bearbeiten Sie die folgenden Zeilen:

#import urllib.parse

SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd2'

SQLA_DB_PASSWORD = 'changeme'

4. Entkommentieren Sie den Bibliotheksimport, geben Sie einen zufällig generierten geheimen Schlüssel ein und geben Sie das korrekte Datenbankkennwort ein.

import urllib.parse

SECRET_KEY = '\x19\xc7\xd8\xa7$\xb6P*\xc6\xb8\xa1E\x90P\x12\x95'

SQLA_DB_PASSWORD = 'YOUR_PASSWORD_HERE'

Hinweis: Generieren Sie einen zufälligen Schlüssel mit Python:

python3 -c "import os; print(os.urandom(16))"

Kopieren Sie die Ausgabe und fügen Sie sie in SECRET_KEY ein Wert.

Speichern und schließen Sie die Datei.

5. Exportieren Sie die Konfigurationsvariable der Produktions-App:

export FLASK_CONF=../configs/production.py

6. Exportieren Sie die Flask-Anwendungsvariable:

export FLASK_APP=powerdnsadmin/__init__.py

7. Aktualisieren Sie das Datenbankschema:

flask db upgrade

8. Projektabhängigkeiten installieren:

yarn install --pure-lockfile

9. Flask-App-Assets erstellen:

flask assets build

Warten Sie, bis der Build abgeschlossen ist.

10. Führen Sie die Anwendung aus mit:

./run.py

Lassen Sie die Anwendung laufen.

11. Die Anwendung wird derzeit auf localhost auf Port 9191 ausgeführt . Besuchen Sie die folgende Adresse:

http://localhost:9191

Der Anmeldebildschirm für PowerDNS Admin wird angezeigt. Derzeit gibt es keine Benutzer, und der erste Benutzer, den Sie registrieren, soll das Administratorkonto sein.

12. Verlassen Sie im Terminal die virtuelle Umgebung und melden Sie sich vom Root-Benutzer ab mit:

exit

Das Terminal kehrt in den Normalzustand zurück.

Schritt 6:PowerDNS-Verwaltungsdienst erstellen

Konfigurieren Sie PowerDNS Admin so, dass es beim Start ausgeführt wird:

1. Erstellen Sie eine systemd-Dienstdatei für PowerDNS Admin:

sudo nano /etc/systemd/system/powerdns-admin.service

2. Fügen Sie den folgenden Inhalt hinzu:

[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target

[Service]
User=root
Group=root
PIDFile=/run/powerdns-admin/pid
WorkingDirectory=/opt/web/powerdns-admin
ExecStartPre=/bin/bash -c '$$(mkdir -p /run/powerdns-admin/)'
ExecStart=/opt/web/powerdns-admin/venv/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

3. Erstellen Sie eine Unit-Datei:

sudo systemctl edit --force powerdns-admin.service

4. Fügen Sie Folgendes hinzu:

[Service]
Environment="FLASK_CONF=../configs/production.py"

5. Erstellen Sie eine Socket-Datei:

sudo nano /etc/systemd/system/powerdns-admin.socket

6. Geben Sie die folgenden Informationen ein:

[Unit]
Description=PowerDNS-Admin socket

[Socket]
ListenStream=/run/powerdns-admin/socket

[Install]
WantedBy=sockets.target

7. Erstellen Sie eine Umgebungsdatei:

sudo nano /etc/tmpfiles.d/powerdns-admin.conf

8. Fügen Sie die folgenden Informationen hinzu:

d /run/powerdns-admin 0755 pdns pdns -

9. Laden Sie den Daemon neu:

sudo systemctl daemon-reload

10. Starten und aktivieren Sie den Dienst und Socket:

sudo systemctl start powerdns-admin.service powerdns-admin.socket
sudo systemctl enable powerdns-admin.service powerdns-admin.socket

11. Überprüfen Sie den Status mit:

sudo systemctl status powerdns-admin.service powerdns-admin.socket

Die Dienste laufen ohne Fehler.

Schritt 7:Nginx installieren und konfigurieren

Gehen Sie wie folgt vor, um PowerDNS Admin für die Ausführung auf Nginx zu konfigurieren:

1. Installieren Sie Nginx mit:

sudo apt install nginx -y

2. Bearbeiten Sie die Nginx-Konfigurationsdatei:

sudo nano /etc/nginx/conf.d/pdns-admin.conf

3. Fügen Sie die folgenden Informationen hinzu:

server {
  listen *:80;
  server_name               localhost;

  index                     index.html index.htm index.php;
  root                      /opt/web/powerdns-admin;
  access_log                /var/log/nginx/powerdns-admin.local.access.log combined;
  error_log                 /var/log/nginx/powerdns-admin.local.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 /opt/web/powerdns-admin/powerdnsadmin;

    location ~*  \.(jpg|jpeg|png|gif)$ {
      expires 365d;
    }

    location ~* ^.+.(css|js)$ {
      expires 7d;
    }
  }

  location / {
    proxy_pass            http://unix:/run/powerdns-admin/socket;
    proxy_read_timeout    120;
    proxy_connect_timeout 120;
    proxy_redirect        off;
  }

}

Wenn Sie einen anderen Servernamen verwenden, ändern Sie localhost an Ihre Serveradresse.

4. Bestätigen Sie, dass die Datei keine Syntaxfehler enthält:

nginx -t

5. Ändern Sie den Eigentümer von powerdns-admin zu www-data :

sudo chown -R www-data:www-data /opt/web/powerdns-admin

6. Starten Sie den Nginx-Dienst neu:

sudo systemctl restart nginx

7. Greifen Sie über den Browser auf die PowerDNS-Admin-Seite zu:

localhost

Wenn Sie auf eine andere Adresse verlinken, verwenden Sie die in der Nginx-Konfigurationsdatei angegebene Adresse.

Schritt 8:PowerDNS-API konfigurieren

Gehen Sie wie folgt vor, um die PowerDNS-API zu konfigurieren:

1. Melden Sie sich über den Browser bei PowerDNS Admin an. Wenn Sie es zum ersten Mal ausführen, erstellen Sie zuerst einen neuen Benutzer. Der erste Benutzer ist automatisch der Administrator.

2. Öffnen Sie den API-Schlüssel s-Tab im linken Menü.

3. Klicken Sie auf Schlüssel hinzufügen+ Schaltfläche.

4. Die Rolle ist standardmäßig der Administrator Benutzer. Fügen Sie eine optionale Beschreibung für den Schlüssel hinzu.

5. Klicken Sie auf Schlüssel erstellen um einen API-Schlüssel zu generieren.

6. Ein Popup-Fenster druckt den Schlüssel. Kopieren Sie den Schlüssel und drücken Sie Bestätigen um fortzufahren.

7. Navigieren Sie zum Dashboard Seite.

8. Geben Sie die Domäne und den API-Schlüssel ein. Speichern Sie die Änderungen.

9. Aktivieren Sie die API in der PowerDNS-Konfiguration. Öffnen Sie die Konfigurationsdatei im Terminal:

nano /etc/powerdns/pdns.conf

10. Entkommentieren und ändern Sie die folgenden Zeilen:

api=yes
api-key=yoursecretekey
webserver=yes

11. Speichern Sie die Änderungen und schließen Sie nano. Die API ist eingerichtet und einsatzbereit.

Fazit

Nachdem Sie die Schritte in diesem Handbuch ausgeführt haben, haben Sie PowerDNS, die PowerDNS Admin-Webschnittstelle auf Nginx, eingerichtet und die PowerDNS-API verbunden.

Informieren Sie sich als Nächstes über die verschiedenen DNS-Eintragstypen oder Best Practices für die DNS-Sicherheit.


Linux
  1. Installieren Sie Podman auf Ubuntu

  2. Dinge, die auf Ubuntu 20.04 installiert werden müssen

  3. Installieren Sie GitLab auf Ubuntu 18.04

  4. Installieren Sie Nginx auf Ubuntu

  5. Installieren Sie Qt unter Ubuntu

Installieren Sie Redis auf Ubuntu

Installieren Sie Jenkins auf Ubuntu 18.04

Installieren Sie Elasticsearch auf Ubuntu 18.04

Installieren Sie MongoDB auf Ubuntu 18.04

So installieren Sie PowerDNS und PowerAdmin unter CentOS 8

So richten Sie PowerDNS unter Ubuntu Linux ein