Работа с DNS
Задачи
- Установить и настроить авторитетного DNS сервера
- Настроить DNS для работы в соответствии со стандартом RFC 2136
- Установка и настройка рекурсивного DNS
- Выпустить сертификат безопасности
- Проверить сертификата безопасности
Построение стенда
Схема виртуального лабораторного стенда
Рисунок 1. Схема стенда
- Создать виртуальные машины для работы
Название виртуальной машины | Источник | Тип инстанса | Сети для внешнего подключения |
---|---|---|---|
web-server | Образ-Ubuntu-server20.04 | small | external-net |
dns-server | Образ-Ubuntu-server20.04 | small | external-net |
Так же нужно проверить развернутую инфраструктуру на соответствие схеме на рисунке 1.
В группах безопастности необходимо разрешить DNS
1. Установка и настройка авторитетного DNS сервера
Обновляем пакеты внутри системы до последней версии
sudo apt update
# Необязательно, но желательно
sudo apt full-upgrade -y
Устанавливаем сервер реализацию DNS сервера PowerDNS
sudo apt install pdns-server pdns-backend-sqlite3 sqlite3 -y
Настроить для работы c sqlite бд
sudo mkdir /var/lib/powerdns
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 < /usr/share/doc/pdns-backend-sqlite3/schema.sqlite3.sql
sudo chown -R pdns:pdns /var/lib/powerdns
Выключаем systemd-resolved
sudo systemctl disable --now systemd-resolved.service
Изменяем используемый dns-сервер на 172.17.1.10
sudo rm -rf /etc/resolv.conf
echo "nameserver 172.17.1.10" |sudo tee /etc/resolv.conf
Отредактировать /etc/powerdns/pdns.conf
include-dir=/etc/powerdns/pdns.d
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
security-poll-suffix=
setgid=pdns
setuid=pdns
- include-dir=/etc/powerdns/pdns.d: Эта строка указывает серверу PowerDNS загружать все конфигурационные файлы из директории /etc/powerdns/pdns.d. Это позволяет разделять конфигурацию на несколько файлов для более удобного управления.
- launch=gsqlite3: Эта строка определяет, какой бэкенд базы данных будет использоваться для хранения данных сервера DNS. В данном случае, указан бэкенд gsqlite3, что означает использование базы данных SQLite.
- gsqlite3-database=/var/lib/powerdns/pdns.sqlite3: Здесь указывается путь к файлу базы данных SQLite, который будет использоваться сервером PowerDNS для хранения записей DNS.
- security-poll-suffix=: Этот параметр связан с безопасностью и суффиксом для защиты от определенных видов атак. В данном случае, он не задан (пустое значение), в данном случае это означает не использовать варианты защиты.
- setgid=pdns и setuid=pdns: Эти параметры устанавливают идентификатор группы и пользователя, от которого будет работать процесс PowerDNS. В этом случае, сервер будет запущен с правами группы pdns и пользователем pdns для обеспечения минимальных привилегий в целях безопасности.
Рисунок 2. Пример конфига
Активируем демона dns-сервера
sudo systemctl enable --now pdns
Создаем зону по имени пользователя(для примера используется devops-course.test)
sudo pdnsutil create-zone {zone name} ns1.{zone name}
sudo pdnsutil add-record {zone name}. www A 127.0.0.1
Проверьте работу сервера
nslookup www.devops-course.test {server ip}
Запрос делается с пользователького пк
Рисунок 3. Пример ответ при адресе сервера 172.17.36.216
2. Настроить DNS для работы в соответствии со стандартом RFC 2136
Для работы по стандарту rfc2136, необходимо изменить конфигурацию работы PowerDNS, в конфигурационном файле необходимо добавить строки:
dnsupdate=yes
allow-dnsupdate-from=172.16.0.0/12
- dnsupdate=yes - это включает поддержку динамического обновления DNS-записей (DNSUPDATE), что позволяет клиентам обновлять записи на сервере DNS.
- allow-dnsupdate-from=172.16.0.0/12 - это определяет диапазон IP-адресов (в данном случае, подсеть) для разрешения выполнения динамических обновлений DNS. Только запросы, идущие от адресов в этой подсети (172.16.0.0 - 172.31.255.255), будут разрешены для выполнения обновлений.
Рисунок 4. Конфигурация после обновления
Создать TSIG ключ с именем dnsudpater
sudo pdnsutil generate-tsig-key dnsupdater hmac-sha512
pdnsutil - это утилита для работы с PowerDNS. generate-tsig-key - команда для создания нового ключа TSIG. dnsupdater - это имя, которое будет присвоено сгенерированному ключу TSIG. hmac-sha512 - это алгоритм хеширования, используемый для создания ключа.
Рисунок 5. Пример корректного создания TSIG ключа
Посмотреть существующие ключи можно командой:
sudo pdnsutil list-tsig-keys
Для проверки работы rfc2136 добавим новую A запись test указывающую, на наш web-сервер
nsupdate <<!
server {ip dns-server} 53
zone {zone name}
update add test.{zone name} 3600 A {ip web-server}
key hmac-sha512:{key name} {tsig key}
send
!
выполнять с устройства в сети 172.16.0.0/12
Проверить, что запись добавилась
nslookup test.{zone name} {ip dns-server}
3. Настройка рекурсивного DNS
Так как наша конфигурация подразумевает совместную работы рекурсивного и авторитетного сервера на одном виртуальном сервере, нам необходимо разграничить их по портам, так для авторитетного сервера, будет использовать порт 5353
Для этого в конфигурации авторитетного сервера необходимо изменить слушаемые порт добавив в конфигурационный файл строки
local-port=5353
После изменения конфигурации необходимо перезапустить службу
sudo systemctl restart pdns
Проверьте, что теперь слушается только порт 5353
ss -tulpan
Установите рекурсивный сервер DNS
sudo apt install pdns-recursor -y
Привести конфиг(/etc/powerdns/recursor.conf) рекурсивного DNS к виду:
config-dir=/etc/powerdns
hint-file=/usr/share/dns/root.hints
include-dir=/etc/powerdns/recursor.d
local-address=0.0.0.0
local-port=53
lua-config-file=/etc/powerdns/recursor.lua
public-suffix-list-file=/usr/share/publicsuffix/public_suffix_list.dat
quiet=yes
security-poll-suffix=
setgid=pdns
setuid=pdns
# authoritative zone
forward-zones={zone name}=127.0.0.1:5353
forward-zones-recurse={zone name}=127.0.0.1:5353
# also
forward-zones+=.=1.1.1.1
forward-zones-recurse+=.=1.1.1.1
- config-dir=/etc/powerdns - указывает на папку с дополнительными файлами конфигурации для PowerDNS Recursor.
- hint-file=/usr/share/dns/root.hints - определяет местоположение файла с базовыми подсказками (hints) для поиска корневых серверов DNS.
- include-dir=/etc/powerdns/recursor.d - указывает на папку, где Recursor будет искать дополнительные файлы конфигурации для обработки.
- local-address=0.0.0.0 и local-port=53 - определяют, на каком адресе и порту будет слушать Recursor для входящих DNS-запросов.
- lua-config-file=/etc/powerdns/recursor.lua - указывает на файл конфигурации Lua, который может содержать дополнительные пользовательские настройки для Recursor.
- quiet=yes - включает режим тишины, что означает меньше вывода информации в логах или на консоль.
- forward-zones={zone name}=127.0.0.1:5353 и forward-zones-recurse={zone name}=127.0.0.1:5353 - эти строки настраивают перенаправление запросов для конкретной зоны {zone name} на адрес 127.0.0.1 с портом 5353.
- forward-zones+=.=1.1.1.1 и forward-zones-recurse+=.=1.1.1.1 - эти строки добавляют общее перенаправление запросов для всех неопределенныз явным образом зон на указанный IP-адрес (1.1.1.1).
Включаем и добавляем автозапуск демона
sudo systemctl enable pdns-recursor
sudo systemctl restart pdns-recursor
4. Выпуск сертификата безопасности
Переходим на узел веб сервера и используя команду генерируем самоподписанный сертификат для нашего будущего тестового сайта
openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -subj '/CN={Доменное имя}' -addext "subjectAltName = DNS:{Доменное имя}" -addext "keyUsage = digitalSignature, keyEncipherment" -addext "extendedKeyUsage = serverAuth"
Пример создания сертификата
Для проверки созданного сертификата можно использовать команду
openssl x509 -in cert.pem -noout -text
5. Проверка сертификата безопасности
Для проверки мы установим nginx и установим на него ранее созданный сертификат. Нам необходимо начать с установки nginx
sudo apt update
sudo apt install nginx -y
После установки необходимо конфигурацию по умолчанию(/etc/nginx/sites-available/default) и привести ее к виду:
server {
listen 80 default_server;
server_name {доменное имя};
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name {доменное имя};
ssl_certificate /home/cloudadmin/cert.pem;
ssl_certificate_key /home/cloudadmin/key.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.3;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/cloud.access.log;
error_log /var/log/nginx/cloud.error.log;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
После этого можно проверить конфигурацию nginx и перезапустить демона
sudo nginx -t
sudo systemctl restart nginx
Пример ответа при правильной конфигурации
После этого необходимо убедиться в наличии созданного вами доменного имени с помощью утилиты dig
dig {доменное имя} @{адрес dns сервера}
Пример валидного ответа
После этого Вам необходимо изменить DNS сервер на вашем устройстве, на созданный вами DNS сервер и попробовать открыть в браузере ваш домен
Пример выполненой работы
Нет комментариев