Перейти к основному контенту

3. Практика

Задачи

  1. Установить и настроить авторитетного DNS сервера
  2. Настроить DNS для работы в соответствии со стандартом RFC 2136
  3. Установка и настройка рекурсивного DNS
  4. Выпустить сертификат безопасности
  5. СПроздаверить сертификата безопасностовый сайти

Построение стенда

Схема виртуального лабораторного стенда

Рисунок 1. Схема стенда

  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

Рисунок 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

Рисунок 4. Конфигурация после обновления

Создать TSIG ключ с именем dnsudpater

sudo pdnsutil generate-tsig-key dnsupdater 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

Привести конфиг рекурсивного 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

Включаем и добавляем автозапуск демона

sudo systemctl enable --now 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 test.devops-course.test;
	return 301 https://$host$request_uri;
}

server {

    listen 443 ssl http2;
    server_name test.devops-course.test;


    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;
    }

}