Как установить PowerDNS и PowerAdmin в Rocky Linux

PowerDNS — это бесплатное программное обеспечение с открытым исходным кодом для DNS-серверов. Его можно использовать в качестве авторитетного сервера имен и рекурсивного DNS-сервера. PowerDNS написан на языке C++ и поддерживает множество операционных систем, включая BSD, Linux и macOS.

PowerDNS — это высокопроизводительный DNS-сервер высокого уровня, поддерживающий различные типы бэкэндов, такие как BIND, а также бэкэнды RDBMS, например базы данных MySQL/MariaDB, PostgreSQL и Oracle.

Сервер PowerDNS отличается высокой производительностью, способен обрабатывать десятки тысяч одновременных запросов, поддерживает DNSSEC и обеспечивает широкие возможности для написания скриптов на языке Lua.

В этом руководстве мы покажем вам, как установить PowerDNS и PowerDNS-Admin в системе Rocky Linux. Мы запустим PowerDNS с бэкэндом базы данных MySQL/MariaDB и настроим PowerDNS-Admin, который будет использоваться в качестве веб-инструмента управления сервером PowerDNS.

В этом руководстве также показана установка пакетов Python для проектов на основе Flask и настройка Nginx и Gunicorn, которые будут использоваться в качестве обратного прокси для веб-приложения PowerDNS-Admin.

Необходимые условия

Для начала работы с этим руководством вам потребуется следующее:

  • Сервер Rocky Linux — вы можете использовать Rocky Linux v8 или v9.
  • Пользователь без прав root, обладающий правами администратора sudo/root.

Установка и настройка сервера базы данных MariaDB

PowerDNS — это масштабируемое программное обеспечение для DNS-серверов, поддерживающее несколько бэкендов, таких как PostgreSQL, MariaDB/MySQL и SQLite. Для крупных развертываний следует рассмотреть возможность использования PostgreSQL или MySQL/MariaDB в качестве бэкенда базы данных.

Теперь вы начнете с установки и настройки базы данных MariaDB на сервере Rocky Linux. Вы настроите PowerDNS с MariaDB в качестве бэкэнда базы данных.

Репозиторий Rocky Linux по умолчанию предоставляет несколько версий пакетов сервера MariaDB. Запустите приведенную ниже команду dnf, чтобы установить сервер базы данных MariaDB.

sudo dnf install mariadb-server

Когда появится запрос на подтверждение, введите y для подтверждения и нажмите ENTER, чтобы продолжить.

install mariadb

После установки сервера MariaDB выполните приведенную ниже команду systemctl, чтобы запустить и включить службу MariaDB.

sudo systemctl start mariadb
sudo systemctl enable mariadb

Теперь сервер MariaDB должен работать и быть включен. Выполните приведенную ниже команду, чтобы проверить службу MariaDB и убедиться, что она работает.

sudo systemctl status mariadb

Вы увидите следующий вывод: служба MariaDB работает и включена, что означает, что она будет запускаться автоматически при загрузке системы.

start enable verify mariadb

Теперь, когда сервер MariaDB запущен, вам необходимо настроить и защитить установку MariaDB с помощью инструмента командной строки «mysql_secure_installation».

Выполните следующую команду, чтобы начать защиту развертывания сервера MariaDB.

sudo mysql_secure_installation

Затем вам будет предложено ввести некоторые настройки сервера MariaDB.

  • Настроить пароль root для MariaDB? Введите y для подтверждения и введите новый пароль для вашего сервера MariaDB, затем повторите пароль.
  • Отключить удаленный вход для пользователя root MariaDB? Введите y для подтверждения и отключения.
  • Удалить анонимного пользователя по умолчанию из MariaDB? Введите y для подтверждения.
  • Удалить базу данных test по умолчанию из MariaDB? Введите y еще раз для подтверждения.
  • Наконец, перезагрузить привилегии таблиц, чтобы применить новые изменения? Введите y для подтверждения, и MariaDB перезагрузит все привилегии и применит новые настройки.

Теперь, когда вы обеспечили безопасность развертывания MariaDB, вам нужно настроить новую базу данных MariaDB и пользователя для PowerDNS.

Для начала выполните приведенную ниже команду mysql, чтобы войти в оболочку MariaDB от имени пользователя root.

sudo mysql -u root -p

Когда будет запрошен пароль, введите пароль пользователя root MariaDB.

Затем выполните следующие запросы, чтобы создать новую базу данных MariaDB и пользователя. В этом примере вы создадите новую базу данных pdns с пользователем pdnsadmin и паролем ‘password‘.

CREATE DATABASE pdns;
GRANT ALL ON pdns.* TO pdnsadmin@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

создание базы данных и пользователя

Теперь выполните следующие запросы, чтобы проверить привилегии пользователя MariaDB pdnsadmin@localhost. Это покажет вам список привилегий пользователя MariaDB pdnsadmin@localhost.

SHOW GRANTS FOR pdnsadmin@localhost;

Вы увидите следующий вывод: пользователь MariaDB pdnsadmin@localhost имеет привилегии к базе данных PowerDNS pdns.

show suer privileges

Теперь введите ‘quit‘, чтобы выйти из оболочки MariaDB.

После запуска сервера MariaDB вам необходимо установить и настроить сервер PowerDNS с использованием бэкэнда базы данных MariaDB.

Установка и настройка PowerDNS

После установки сервера базы данных MariaDB вам предстоит установить сервер PowerDNS и настроить PowerDNS с использованием бэкэнда базы данных MariaDB.

Для операционных систем на базе RHEL PowerDNS доступен в репозитории EPEL. Поэтому перед установкой PowerDNS необходимо добавить репозиторий EPEL в вашу систему.

Выполните следующую команду dnf, чтобы установить репозиторий EPEL.

sudo dnf install epel-release -y

После добавления репозитория EPEL выполните следующую команду dnf, чтобы установить PowerDNS и бэкэнд PowerDNS MySQL.

sudo dnf install pdns pdns-backend-mysql

Когда появится запрос на подтверждение, введите y для подтверждения и нажмите ENTER, чтобы продолжить.

install powerdns

После завершения установки PowerDNS выполните следующую команду mysql, чтобы импортировать схему базы данных для PowerDNS. Следующая команда импортирует схему базы данных через пользователя MariaDB pdnsadmin в базу данных pdns.

sudo mysql -u pdnsadmin -p pdns

Input the password for the pdnsadmin user and press ENTER to confirm and proceed.

импорт схемы базы данных

Next, edit the PowerDNS configuration ‘/etc/pdns/pdns.conf’ using the following nano editor command.

sudo nano /etc/pdns/pdns.conf

Снимите комментарий с конфигурации бэкэнда MariaDB и измените данные: имя базы данных, имя пользователя и пароль. Убедитесь, что вы используете правильные данные базы данных MariaDB, которую вы создали.

#################################
# launch        Which backends to launch and order to query them in
#
launch=gmysql

gmysql-host=localhost
gmysql-user=pdnsadmin
gmysql-password=password
gmysql-dbname=pdns

Далее, снимите комментарий с ‘api’ и измените значение на ‘yes». Затем раскомментируйте опцию ‘api-key‘ и измените ключ по умолчанию. Следующий API PowerDNS будет использоваться для управления сервером PowerDNS через веб-приложение PowerDNS-Admin.

#################################
# api   Enable/disable the REST API (including HTTP listener)
#
api=yes

#################################
# api-key       Static pre-shared authentication key for access to the REST API
#
api-key=CHANGEME

Сохраните файл и закройте редактор, когда закончите.

После настройки сервера PowerDNS выполните следующую команду, чтобы проверить конфигурацию PowerDNS.

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

Вы увидите вывод, подобный следующему — подключение PowerDNS к бэкэнду базы данных MariaDB прошло успешно, теперь вы можете нажать «Ctrl+c», чтобы завершить процесс.

проверка подключения к базе данных

Теперь выполните следующую команду systemctl, чтобы запустить и включить службу PowerDNS.

sudo systemctl start pdns
sudo systemctl enable pdns

Наконец, проверьте службу PowerDNS, чтобы убедиться, что PowerDNS работает и включена.

sudo systemctl status pdns

В приведенном ниже выводе вы увидите, что служба PowerDNS работает и включена, что означает, что она будет запускаться автоматически при загрузке системы.

проверка службы pdns

На этом этапе вы завершили установку сервера PowerDNS. Далее вы приступите к установке PowerDNS-Admin, который будет использоваться в качестве веб-интерфейса для управления сервером PowerDNS.

Установка PowerDNS-Admin

После запуска PowerDNS вы установите и настроите PowerDNS-Admin на сервере Rocky Linux. PowerDNS-Admin — это веб-приложение на базе Python Flask, поэтому его установка практически не отличается от установки веб-фреймворка Flask.

Ниже приведены шаги, которые необходимо выполнить для установки PowerDNS-Admin на Rocky Linux

  • Установка зависимостей пакетов
  • Настройка виртуальной среды Python
  • Установка зависимостей Python
  • Настройка PowerDNS-Admin с базой данных MariaDB
  • Генерация схемы базы данных и сборка статических файлов

Теперь приступим к установке PowerDNS-Admin

Установка зависимостей пакетов

Первым шагом при установке PowerDNS-Admin является установка зависимостей пакетов, таких как Python3, Pip, Node.js и Yarn.

Прежде чем начать, выполните приведенную ниже команду dnf, чтобы включить репозиторий ‘powertools‘ в вашей системе Rocky Linux.

sudo dnf config-manager --set-enabled powertools

После включения репозитория ‘powertools’ установите пакеты Python с помощью приведенной ниже команды dnf.

sudo dnf install python3 python3-devel python3-pip python3-xmlsec gcc git mariadb-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel

Когда появится запрос на подтверждение, введите y и нажмите ENTER, чтобы продолжить.

установить зависимости Python

Далее добавьте репозитории Node.js и Yarn в вашу систему с помощью приведенной ниже команды. Пакеты Node.js и Yarn будут использоваться для генерации статических файлов для веб-приложения PowerAdmin. В этом примере используется Node.js v16.

curl -sL https://rpm.nodesource.com/setup_16.x | bash -
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo

настройка репозитория

После добавления репозиториев запустите приведенную ниже команду dnf, чтобы установить Node.js и менеджер пакетов Yarn.

sudo dnf install nodejs yarn

Введите y и нажмите ENTER при появлении запроса на установку.

установка nodejs

Кроме того, при запросе на подтверждение ключа GPG введите y и нажмите ENTER.

импорт ключа gpg

Далее выполните приведенную ниже команду pip3, чтобы обновить пакет Python pip и установить virtualenv в вашу систему.

pip3 install -U pip
pip3 install -U virtualenv

Python pip и virtualenv теперь будут установлены в каталог ‘/usr/local/bin‘. Добавьте каталог ‘/usr/local/bin‘ к системной $PATH переменной среды с помощью приведенной ниже команды.

echo "export PATH="/usr/local/bin:$PATH"" >> ~/.bashrc

Теперь примените новые изменения в файле ‘~/.bashrc’ с помощью приведенной ниже команды. Теперь вам следует запустить команды ‘pip‘ и ‘virtualenv‘.

source ~/.bashrc

Настройка виртуальной среды Python

После установки зависимостей пакетов вам необходимо загрузить исходный код PowerDNS-Admin и настроить виртуальную среду Python для PowerDNS-Admin.

Склонируйте исходный код PowerDNS-Admin в каталог ‘/opt/powerdns-admin’ с помощью следующей команды git.

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

После загрузки исходного кода перейдите в рабочий каталог ‘/opt/powerdns-admin‘ и создайте новую виртуальную среду Python ‘flask‘.

cd /opt/powerdns-admin
virtualenv -p python3 flask

Теперь активируйте виртуальную среду Python ‘flask‘ с помощью приведенной ниже команды.

source flask/bin/activate

После активации вы должны увидеть, что командная строка стала выглядеть следующим образом: ‘(flask) [user@hostname /directory/path]#‘.

create virtualenv

С этого момента ваша рабочая среда всегда должна находиться в виртуальной среде Python ‘flask‘.

Установка зависимостей Python

После настройки виртуальной среды Python и ее запуска вы установите зависимости Python с помощью команды pip.

Запустите следующую команду pip, чтобы установить зависимости Python для PowerDNS-Admin.

pip install python-dotenv
pip install -r requirements.txt

Теперь начнется установка — будут установлены зависимости Python, необходимые для PowerDNS-Admin, которые хранятся в файле ‘requirements.txt‘.

установка зависимостей Python

Теперь, когда зависимости Python установлены, вы готовы к установке и настройке PowerDNS-Admin с базой данных MariaDB.

Настройка PowerDNS-Admin с базой данных MariaDB

После установки зависимостей Python вы можете настроить PowerDNS-Admin с базой данных MariaDB. Параметры базы данных для PowerDNS-Admin будут такими же, как и для сервера PowerDNS.

Теперь отредактируйте файл ‘/opt/powerdns-admin/powerdnsadmin/default_config.py‘ с помощью следующей команды редактора nano.

nano /opt/powerdns-admin/powerdnsadmin/default_config.py

Измените конфигурацию, как показано ниже.

SALT = 'RANDOM-GENERATED'
SECRET_KEY = 'RANDOM-GENERATED'
BIND_ADDRESS = '0.0.0.0'
PORT = 9191
HSTS_ENABLED = False
OFFLINE_MODE = False

SQLA_DB_USER = ‘pdnsadmin’
SQLA_DB_PASSWORD = ‘password’
SQLA_DB_HOST = ‘127.0.0.1’
SQLA_DB_NAME = ‘pdns’
SQLALCHEMY_TRACK_MODIFICATIONS = True

Сохраните файл и закройте редактор, когда закончите.

Генерация схемы базы данных и создание статических файлов

После настройки базы данных MariaDB в PowerDNS-Admin вам необходимо перенести базу данных и сгенерировать статические файлы для PowerDNS-Admin.

Сначала выполните следующую команду для миграции базы данных PowerDNS-Admin. Это вставит в базу данных новую схему, которая будет использоваться для PowerDNS-Admin.

export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade

Ниже приведен вывод, который вы получите по завершении миграции базы данных.

migrate database

После завершения миграции базы данных выполните следующую команду для генерации статических файлов для PowerDNS-Admin.

yarn install --pure-lockfile
flask assets build

Ниже вы можете увидеть установку некоторых зависимостей JavaScript через пакетный менеджер yarn и процесс генерации статических файлов для PowerDNS-Admin.

генерация статических файлов

После генерации статических файлов выполните следующую команду, чтобы деактивировать виртуальную среду Python.

deactivate

На этом этапе вы завершили базовую установку PowerDNS-Admin с сервером базы данных MariaDB. Теперь вы можете запустить приложение PowerDNS-Admin через командную строку, а также запустить PowerDNS-Admin в качестве службы systemd.

Настройка службы systemd для PowerDNS-Admin

На этом этапе вы настроите новый файл службы systemd для приложения PowerDNS-Admin. Это позволит вам легко управлять и обслуживать PowerDNS-Admin с помощью команды systemd. Кроме того, это упростит настройку PowerDNS-Admin.

Для начала создайте новый файл службы systemd ‘/etc/systemd/system/powerdns-admin.service’ с помощью следующей команды редактора nano.

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

Добавьте в файл приведенную ниже конфигурацию. С этой конфигурацией вы запустите приложение PowerDNS-Admin через gunicorn и запустите его от имени пользователя и группы ‘pdns‘. Кроме того, PowerDNS-Admin будет запущен с файлом сокета UNIX ‘/run/powerdns-admin/socket’.

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

[Service]
PIDFile=/run/powerdns-admin/pid
User=pdns
Group=pdns
WorkingDirectory=/opt/powerdns-admin
ExecStartPre=+mkdir -p /run/powerdns-admin/
ExecStartPre=+chown pdns:pdns -R /run/powerdns-admin/
ExecStart=/usr/local/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

Сохраните файл и закройте редактор, когда закончите.

Далее создайте новый файл сокета systemd для PowerDNS-Admin ‘/etc/systemd/system/powerdns-admin.socket’ с помощью редактора nano, как показано ниже.

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

Добавьте в файл следующую конфигурацию.

[Unit]
Description=PowerDNS-Admin socket

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

[Install]
WantedBy=sockets.target

Сохраните файл и закройте редактор, когда закончите.

Теперь создайте новый файл конфигурации ‘/etc/tmpfiles.d/powerdns-admin.conf’ с помощью приведенной ниже команды редактора nano.

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

Добавьте в файл следующую конфигурацию.

d /run/powerdns-admin 0755 pdns pdns -

Сохраните файл и закройте редактор, когда закончите.

После добавления нового файла службы systemd и новой конфигурации выполните следующую команду, чтобы перезагрузить менеджер systemd и применить новые файлы служб в systemd.

sudo systemctl daemon-reload

Теперь запустите и включите службу PowerDNS-Admin с помощью следующей команды systemctl. Теперь PowerDNS-Admin должен работать с gunicorn и открыть файл сокета, доступный в каталоге ‘/run/powerdns-admin/‘.

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

настройка powerdns-admin в качестве службы

Наконец, выполните следующую команду, чтобы проверить службу PowerDNS-Admin и убедиться, что она работает.

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

В приведенном ниже выводе видно, что powerdns-admin.service и powerdns-admin.socket работают и оба включены. Обе службы будут запускаться автоматически при запуске системы.

проверка служб pdns

Установка Nginx в качестве обратного прокси для PowerDNS-Admin

На этом этапе вы настроите Nginx в качестве обратного прокси для PowerDNS-Admin.

Выполните следующую команду dnf, чтобы установить Nginx на ваш сервер Rocky Linux. При появлении запроса введите y для подтверждения и нажмите ENTER, чтобы продолжить.

sudo dnf install nginx

Далее создайте новый блок сервера Nginx ‘/etc/nginx/conf.d/pdns.conf‘ с помощью редактора nano.

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

Добавьте в файл следующую конфигурацию и не забудьте изменить доменное имя. В этом примере для PowerDNS-Admin используется домен ‘pdns.local’.

server {
        listen                  80;
        server_name             pdns.local;
        return 301 https://$http_host$request_uri;
}

server {
listen                  443 ssl http2;
server_name              pdns.local;
index                   index.html index.htm;
error_log               /var/log/nginx/error_powerdnsadmin.log error;
access_log              off;

ssl_certificate                 /etc/letsencrypt/live/pdns.local/fullchain.pem;
ssl_certificate_key             /etc/letsencrypt/live/pdns.local/privkey.pem;
#ssl_dhparam                     path_to_your_dhparam.pem;
ssl_prefer_server_ciphers       on;
ssl_ciphers                     ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’;
ssl_session_cache               shared:SSL:10m;

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 $http_host;
proxy_set_header                X-Scheme $scheme;
proxy_set_header                X-Real-IP $remote_addr;
proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header                X-Forwarded-Proto $scheme;
proxy_headers_hash_bucket_size  64;

location ~ ^/static/  {
include         mime.types;
root            /opt/powerdns-admin/powerdnsadmin;
location        ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
location        ~* ^.+.(css|js)$ { expires 7d; }
}

location ~ ^/upload/  {
include         mime.types;
root            /opt/powerdns-admin;
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          http:// $scheme://;
}
}

Сохраните файл и закройте редактор, когда закончите.

Далее, запустите следующую команду, чтобы проверить конфигурацию Nginx и убедиться, что она верна. Вы должны увидеть сообщение типа ‘syntax ok — test is successful‘.

sudo nginx -t

Теперь выполните следующую команду systemctl, чтобы запустить и включить службу Nginx.

sudo systemctl start nginx
sudo systemctl enable nginx

setup nginx

Наконец, проверьте службу Nginx с помощью следующей команды, чтобы убедиться, что она работает.

sudo systemctl status nginx

Вы должны увидеть сообщение о том, что служба nginx работает и включена. Таким образом, служба Nginx будет запускаться автоматически при запуске системы.

check nginx

Доступ к установке PowerDNS-Admin

Откройте веб-браузер и перейдите по доменному имени вашей установки PowerDNS-Admin (например: https://pdns.local), после чего должна открыться страница входа в PowerDNS-Admin.

Нажмите на ссылку ‘Создать учетную запись», чтобы настроить нового администратора для PowerDNS-Admin.

pdns создать учетную запись

Теперь введите данные нового пользователя, адрес электронной почты и пароль. Затем нажмите «Зарегистрироваться», чтобы подтвердить.

 

После создания администратора вы снова будете перенаправлены на страницу входа в PowerDNS-Admin. Войдите с помощью нового имени пользователя admin и пароля, затем нажмите «Войти».

 

Теперь вы должны увидеть панель управления PowerDNS-Admin. PowerDNS-Admin запущен, но пока еще не подключен к серверу PowerDNS.

Чтобы настроить сервер PowerDNS с помощью PowerDNS-Admin, необходимо добавить в PowerDNS-Admin ключ API, который вы настроили через сервер PowerDNS.

Введите данные API сервера PowerDNS в раздел ‘Настройки PDNS» и нажмите «Обновить».

настройка api

Когда PowerDNS-Admin и сервер PowerDNS подключены через API, ваша панель управления должна выглядеть как на следующем скриншоте.

Панель управления pdnsadmin

Теперь вы можете легко добавлять новые записи DNS или изменять существующие через панель управления PowerDNS-Admin.

Заключение

В этом руководстве вы узнали, как установить сервер PowerDNS с базой данных MySQL/MariaDB на сервере Rocky Linux. Вы также изучили основы развертывания базы данных MariaDB на Rocky Linux. Наконец, вы узнали, как установить и настроить PowerDNS-Admin, который будет использоваться в качестве веб-инструмента управления сервером PowerDNS. PowerDNS-Admin работает с Nginx в качестве обратного прокси и базой данных MariaDB в качестве бэкэнда.

После запуска сервера PowerDNS и PowerDNS-Admin вы можете управлять своим DNS-сервером через веб-панель администрирования. Вы можете добавлять, редактировать или удалять записи DNS через панель администрирования PowerDNS-Admin.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *