FreeIPA как локальный CA для oVirt Engine и прочих WEB приложений

Используем локальный SSL CA

Стояла замечательная погода задачка по реализации локального SSL УЦ (CA) для локальных доменов и задач. Тыкать постоянно исключение безопасности в браузере показалось мне не лучшей затеей, тем более учитывая серьёзность всех тех данных, с которыми работают эти приложения. На момент старта мы имели несколько oVirt Engine и кучу WEB приложений, которые буквально на глазах росли как грибы после летнего дождя и постоянно совали в пользователей самоподписанными сертификатами. Так как повсеместно использовался домен в локальной зоне, в изолированной от мира сети, вариант wildcard сертификата от внешнего CA отпал сам собой.

Буквы

Для авторизации пользователей мы используем FreeIPA (LDAP), который из коробки сам по себе CA и может выдавать SSL сертификаты. Соответственно почему бы не воспользоваться этой прекрасной возможность? Данный рецепт приведён в виде Copy-Paste данных, которые нужно только Copy-Paste… Статья поможет создать собственный CA способный выдавать SSL сертификаты для всех узлов сети и установить один такой в oVirt Engine без гибели последнего. Описание по инсталляции опущено, так ка военного в этом ничего нет, а мануалов на тему freeipa server install centos 7 можно найти десятки при помощи Google. Задачу разделяем на три ветви. Первая — работа с IPA, вторая — работа с oVirt Engine и третья — все остальные WEB приложения. Если oVirt Engine отсутствует, то все действия связанные с ним пропускаем. Последовательность действий везде идентична, генерируем запрос на сервере WEB-приложения, добавляем хост в IPA, генерируем ему сертификат, добавляем сертификат на сервер. Не маловажным замечанием станет тот факт, что root-ca вашей IPA необходимо скормить не только в клиентскую систему, которой вы будете открывать искомые WEB-приложения, но и в сам браузер, иначе никак. Делается это элементарно, просто открываем ссылку на IPA сертификат браузером и ставим галки + OK.

Грабли

По славному старому обычаю, всё что бесплатное от RedHat, как говорит мой коллего, либо кривое либо кривущее. В нашем случае имеет описательную часть, выполненную в стиле minimal-techno с элементами ребусов, лабиринтов в суперпозиции и чёрного юмора. В связи с вышесказанным, мануал по прикручиванию стороннего SSL к oVirt Engine ломал всё самым изощрённым образом. Падала Java, отваливалась авторизация, падал Engine (в эти моменты количество седых волос стремительно увеличивалось). Нас как всегда спасло желание выжить и чтение логов, иногда даже тех, которых нет в природе… Вообще нужно быть максимально осторожным с oVirt Engine. Штука весьма нежная и крайне скверная в лечении.

Важные вводные

Для начала определим сущности и переменные. В данном примере мы рассматриваем следующие сущности:
— FreeIPA сервер (CentOS 7). Может быть как виртуальной так и физической машиной. Главное доступность по доменному имени для всех участников PKI, как серверов, так и клиентов. FreeIPA можно использовать как DNS, мы так не поступаем, у нас отдельная инфраструктура DNS серверов. Если идти по этому пути, то в IPA нужно в любом случае держать все зоны, просто зоны, можно даже их отключить, но их наличие обязательно;
— oVirt Engine (CentOS 7). Может быть как виртуальной (hosted engine) так и физической машиной;
— WEB-сервер 1 на основе Apache2(HTTPD) (CentOS 7);
— WEB-сервер 2 на основе Apache2 (Debian 8);
— Клиентские десктопы, использующие данные сервисы.
Все перечисленные сущности на момент производимых действий установлены, настроены и функционируют в штатном режиме.

Теперь о переменных. Важный аспект, для простоты действий, используются Bash переменные, посему до завершения процесса не перезагружаемся. Все доменные имена должны резольвиться на всех серверах и клиентах. Не стоит делать прописи в хостах, это печальная практика. Все домены добавляем в DNS зону!
Переменные:
— domain.local — это наша локальная зона;
— sub.domain.local — это вторая наша локальная зона;
— ipa.domain.local — доменное имя FreeIPA сервера;
— engine.domain.local — доменное имя oVirt Engine сервера;
— web1.domain.local — доменное имя WEB-сервера 1;
— web2.sub.domain.local — доменное имя WEB-сервера 2;
— HOSTNAME — доменное имя хоста;
— MASTERADDRESS — переменная, в которой мы задаём IP хоста на котором слушает WEB-сервер;

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

1
2
3
4
5
#### Для CentOS
yum update -y && yum install mtr mc tcpdump telnet nano nload ntpdate ntp wget net-tools -y  
 
#### Для Debian
apt update && apt upgrade -y && apt install mtr mc tcpdump telnet nano nload ntpdate ntp wget net-tools -y  #

На всех клиентах устанавливаем в браузер root-ca нашего FreeIPA, просто открыв эту ссылку (по крайней мере так это работает в Firefox) https://ipa.domain.local/ipa/config/ca.crt

Рецепт

Начнём пожалуй с самого главного главного — oVirt Engine. Далее по порядку, заходим на сервер по SSH и копируем приведённые ниже строки.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
#### Определяем основные переменные и добавляем домен в /etc/hosts
HOSTNAME=engine.domain.local
MASTERADDRESS=192.168.1.10
ETCHOSTS=/etc/hosts
SRCANCRS=/etc/pki/ca-trust/source/anchors/
PKIOE=/etc/pki/ovirt-engine
IPARCA=/root/freeipa-ca.crt
OECTS=/etc/ovirt-engine/engine.conf.d/99-custom-truststore.conf
ESSLC=/etc/ssl/certs/freeipa-ca.crt
OELC=/etc/ovirt-engine/logcollector.conf
EPKIT=/etc/pki/tls
hostnamectl set-hostname $HOSTNAME
hostnamectl set-icon-name $HOSTNAME
hostnamectl
echo -e "\n$MASTERADDRESS\tsystemip\t$HOSTNAME\n" >> $ETCHOSTS && cat $ETCHOSTS
 
 
#### Создаём запрос и ключ на хосте, где мы хотим установить SSL сертификат.
# Данная команда создаёт два файла в директории root с именем "ВАШ_ХОСТ_HOSTNAME-privateKey.key" для ключа и
# "ВАШ_ХОСТ_HOSTNAME-request.csr" для запроса. В нашем случае мы генерируем сертификаты на 1095 дней. После выполнения
# этой команды в терминале мы увидим ключ и запрос, который нам понадабится для создания сертификата.
openssl req -new -sha256 -nodes -days 1095 -newkey rsa:2048 -keyout /root/$HOSTNAME-privateKey.key -out /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-privateKey.key && ls /root/  
 
# Заполняем запрашиваемые данные (данные указаны в качестве примера, их нужно/желательно заменить на реальные)
Country Name (2 letter code) [AU]:					RU
State or Province Name (full name) [Some-State]:			Krasnodarskiy kray
Locality Name (eg, city) []:						Krasnodar
Organization Name (eg, company) [Internet Widgits Pty Ltd]:		CompanyName
Organizational Unit Name (eg, section) []:				DC
Common Name (e.g. server FQDN or YOUR name) []:				engine.domain.local
Email Address []:							adm@domain.local

Теперь нужно создать хост и сам сертификат на сервере FreeIPA, для чего воспользуемся WEB интерфейсом. В WEB интерфейсе FreeIPA нажимаем «Identity» -> «Hosts» чтобы открыть раздел Hosts, затем нажимаем «+Add» и заполняем следующие поля:
— «Host Name» сюда мы добавляем имя хоста (доменное имя) в нашей DNS зоне. К примеру «engine» для хоста с FQDN «engine.domain.local»;
— «DNS Zone» выбираем DNS зону для нашего домена. К примеру «domain.local» для хоста «engine.domain.local»;
— Если «A» запись для данного домена отсутствует в заданной зоне, необходимо добавить IP адрес этого хоста.
— В завершении добавляем класс в поле «Class». К примеру «Engine» для «engine.domain.local». Действие не обязательное, но в итоге поможет систематизировать кучу доменных имён.
Теперь жмём «Add».
После того как хост был создан, можно приступать к генерированию сертификата. Жмём «Authentication» -> «Certificates» для перехода в раздел сертификатов, нажимаем «+Issue» и заполняем следующие поля:
— «Principal» — сюда мы вводим тип сервиса и имя хоста. К примеру «HTTP/engine.domain.local» для «engine.domain.local»;
— Устанавливаем чекбокс «Add principal» если он отсутствует;
— Выбираем CA thats при необходимости, или в том случае, если CA не один;
— Копируем запрос на сертификат в текстовое поле и жмём кнопку «Issue».
Теперь можно получить сгенерированный сертификат в разделе сервисы. Жмём «Identity» -> «Services», затем нажимаем на ссылку сервиса. К примеру «HTTP/engine.domain.local@DOMAIN.LOCAL» для «engine.domain.local». В открывшемся окне находим секцию «Service Certificate» (в правом верхнем углу) и в выпадающем меню «Actions» выбираем «Download» или «Get» для отображения. сертификата.

Возвращаемся к нашему oVirt Engine.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
#### Создаём сертификат хоста
nano /root/$HOSTNAME-certificate.pem
cp /root/$HOSTNAME-certificate.pem $SRCANCRS
 
#### Загружаем root (CA) сертификат FreeIPA
wget --output-document=$IPARCA --no-check-certificate https://ipa.domain.local/ipa/config/ca.crt && cat $IPARCA
 
 
## Копируем и обновляем доверенные сертификаты
cp $IPARCA $SRCANCRS && update-ca-trust
 
 
#### Создаём p12 цепочку
mv $PKIOE/keys/apache.p12 /root/
openssl pkcs12 -export -out /root/$HOSTNAME-bundle.p12 -inkey /root/$HOSTNAME-privateKey.key -in /root/$HOSTNAME-certificate.pem
## Enter Export Password: - жмём "Enter"
## Verifying - Enter Export Password: - жмём "Enter"
cp /root/$HOSTNAME-bundle.p12 $PKIOE/keys/apache.p12
 
 
#### Создаём apache-ca.pem
cp $PKIOE/apache-ca.pem /root/ && rm -f $PKIOE/apache-ca.pem
cp /root/$HOSTNAME-certificate.pem $PKIOE/apache-ca.pem
 
 
#### Создаём apache.key.nopass
cp $PKIOE/keys/apache.key.nopass /root/
openssl pkcs12 -in  $PKIOE/keys/apache.p12 -nocerts -nodes > $PKIOE/keys/apache.key.nopass
## Enter Import Password: - жмём "Enter"
 
#### Create apache.cer
cp $PKIOE/certs/apache.cer /root/
openssl pkcs12 -in $PKIOE/keys/apache.p12 -nokeys > $PKIOE/certs/apache.cer
## Enter Import Password: - жмём "Enter"
 
#### Создайте новый конфигурационный файл хранилища доверия
touch $OECTS && echo -e "ENGINE_HTTPS_PKI_TRUST_STORE=\"/etc/pki/java/cacerts\"\nENGINE_HTTPS_PKI_TRUST_STORE_PASSWORD=\"\"" > $OECTS && cat $OECTS
 
 
#### Замена сертификата может привести к сбою сборщика журналов. Чтобы избежать этого сбоя, редактируем конфигурацию сборщика журналов:
cp $IPARCA $ESSLC
touch $OELC && echo -e "cert-file=$ESSLC\n" >> $OELC
 
 
#### Добавляем глобально сертификат и ключ
cp $HOSTNAME-certificate.pem $EPKIT/certs/$HOSTNAME-certificate.pem
cp $HOSTNAME-privateKey.key $EPKIT/private/$HOSTNAME-privateKey.key
 
 
#### Теперь можно всё презагрузить
systemctl restart httpd.service && systemctl restart ovirt-engine.service

Переходим к WEB серверам. Принцип и последовательность действий прежние. WEB-сервера 1 (CentOS 7):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
#### Определяем основные переменные и добавляем домен в /etc/hosts
HOSTNAME=web1.domain.local
MASTERADDRESS=192.168.1.11
ETCHOSTS=/etc/hosts
SRCANCRS=/etc/pki/ca-trust/source/anchors/
IPARCA=/root/freeipa-ca.crt
ESSLC=/etc/ssl/certs/freeipa-ca.crt
EPKIT=/etc/pki/tls
hostnamectl set-hostname $HOSTNAME
hostnamectl set-icon-name $HOSTNAME
hostnamectl
echo -e "\n$MASTERADDRESS\tsystemip\t$HOSTNAME\n" >> $ETCHOSTS && cat $ETCHOSTS
 
 
#### Создаём запрос и ключ на хосте, где мы хотим установить SSL сертификат.
# Данная команда создаёт два файла в директории root с именем "ВАШ_ХОСТ_HOSTNAME-privateKey.key" для ключа и
# "ВАШ_ХОСТ_HOSTNAME-request.csr" для запроса. В нашем случае мы генерируем сертификаты на 1095 дней. После выполнения
# этой команды в терминале мы увидим ключ и запрос, который нам понадабится для создания сертификата.
openssl req -new -sha256 -nodes -days 1095 -newkey rsa:2048 -keyout /root/$HOSTNAME-privateKey.key -out /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-privateKey.key && ls /root/  
 
# Заполняем запрашиваемые данные (данные указаны в качестве примера, их нужно/желательно заменить на реальные)
Country Name (2 letter code) [AU]:					RU
State or Province Name (full name) [Some-State]:			Krasnodarskiy kray
Locality Name (eg, city) []:						Krasnodar
Organization Name (eg, company) [Internet Widgits Pty Ltd]:		CompanyName
Organizational Unit Name (eg, section) []:				DC
Common Name (e.g. server FQDN or YOUR name) []:				web1.domain.local
Email Address []:							adm@domain.local

Аналогично создаём хост и сам сертификат на сервере FreeIPA. В WEB интерфейсе FreeIPA нажимаем «Identity» -> «Hosts» чтобы открыть раздел Hosts, затем нажимаем «+Add» и заполняем следующие поля:
— «Host Name» сюда мы добавляем имя хоста (доменное имя) в нашей DNS зоне. К примеру «web1» для хоста с FQDN «web1.domain.local»;
— «DNS Zone» выбираем DNS зону для нашего домена. К примеру «domain.local» для хоста «web1.domain.local»;
— Если «A» запись для данного домена отсутствует в заданной зоне, необходимо добавить IP адрес этого хоста.
— В завершении добавляем класс в поле «Class». К примеру «WEB» для «web1.domain.local». Действие не обязательное, но в итоге поможет систематизировать кучу доменных имён.
Теперь жмём «Add».
После того как хост был создан, можно приступать к генерированию сертификата. Жмём «Authentication» -> «Certificates» для перехода в раздел сертификатов, нажимаем «+Issue» и заполняем следующие поля:
— «Principal» — сюда мы вводим тип сервиса и имя хоста. К примеру «HTTP/web1.domain.local» для «web1.domain.local»;
— Устанавливаем чекбокс «Add principal» если он отсутствует;
— Выбираем CA thats при необходимости, или в том случае, если CA не один;
— Копируем запрос на сертификат в текстовое поле и жмём кнопку «Issue».
Теперь можно получить сгенерированный сертификат в разделе сервисы. Жмём «Identity» -> «Services», затем нажимаем на ссылку сервиса. К примеру «HTTP/web1.domain.local@DOMAIN.LOCAL» для «web1.domain.local». В открывшемся окне находим секцию «Service Certificate» (в правом верхнем углу) и в выпадающем меню «Actions» выбираем «Download» или «Get» для отображения. сертификата.

Возвращаемся к нашему хосту.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
#### Создаём сертификат хоста
nano /root/$HOSTNAME-certificate.pem
 
#### Загружаем root (CA) сертификат FreeIPA
wget --output-document=$IPARCA --no-check-certificate https://ipa.domain.local/ipa/config/ca.crt && cat $IPARCA
 
## Копируем и обновляем доверенные сертификаты (CentOS)
cp /root/$HOSTNAME-certificate.pem $SRCANCRS && cp $IPARCA $SRCANCRS && update-ca-trust
cp /root/$HOSTNAME-certificate.pem $EPKIT/certs/ && cp /root/$HOSTNAME-privateKey.key $EPKIT/private/
#### Добавляем глобально сертификат и ключ для HTTPD
cp $IPARCA $ESSLC
cp /root/$HOSTNAME-certificate.pem $EPKIT/certs/$HOSTNAME-certificate.pem
cp /root/$HOSTNAME-privateKey.key $EPKIT/private/$HOSTNAME-privateKey.key
 
В завершении меняем пути в конфигурационном файле Apache2 для конкретного доменного имени и глобально.
 
#### Теперь можно презагрузить Apache2
systemctl restart httpd.service

WEB-сервера 2 (Debian 8):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
#### Определяем основные переменные и добавляем домен в /etc/hosts
HOSTNAME=web2.sub.domain.local
MASTERADDRESS=192.168.1.12
ETCHOSTS=/etc/hosts
IPARCA=/root/freeipa-ca.crt
ESSLC=/etc/ssl/certs/freeipa-ca.crt
EPKIT=/etc/pki/tls
LDCA=/usr/share/ca-certificates/local
hostnamectl set-hostname $HOSTNAME
hostnamectl set-icon-name $HOSTNAME
hostnamectl
echo -e "\n$MASTERADDRESS\tsystemip\t$HOSTNAME\n" >> $ETCHOSTS && cat $ETCHOSTS
 
 
#### Создаём запрос и ключ на хосте, где мы хотим установить SSL сертификат.
# Данная команда создаёт два файла в директории root с именем "ВАШ_ХОСТ_HOSTNAME-privateKey.key" для ключа и
# "ВАШ_ХОСТ_HOSTNAME-request.csr" для запроса. В нашем случае мы генерируем сертификаты на 1095 дней. После выполнения
# этой команды в терминале мы увидим ключ и запрос, который нам понадабится для создания сертификата.
openssl req -new -sha256 -nodes -days 1095 -newkey rsa:2048 -keyout /root/$HOSTNAME-privateKey.key -out /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-privateKey.key && ls /root/  
 
# Заполняем запрашиваемые данные (данные указаны в качестве примера, их нужно/желательно заменить на реальные)
Country Name (2 letter code) [AU]:					RU
State or Province Name (full name) [Some-State]:			Krasnodarskiy kray
Locality Name (eg, city) []:						Krasnodar
Organization Name (eg, company) [Internet Widgits Pty Ltd]:		CompanyName
Organizational Unit Name (eg, section) []:				DC
Common Name (e.g. server FQDN or YOUR name) []:				web2.sub.domain.local
Email Address []:							adm@domain.local

Аналогично создаём хост и сам сертификат на сервере FreeIPA. В WEB интерфейсе FreeIPA нажимаем «Identity» -> «Hosts» чтобы открыть раздел Hosts, затем нажимаем «+Add» и заполняем следующие поля:
— «Host Name» сюда мы добавляем имя хоста (доменное имя) в нашей DNS зоне. К примеру «web2» для хоста с FQDN «web2.sub.domain.local»;
— «DNS Zone» выбираем DNS зону для нашего домена. К примеру «sub.domain.local» для домена «web2.sub.domain.local»;
— Если «A» запись для данного домена отсутствует в заданной зоне, необходимо добавить IP адрес этого хоста.
— В завершении добавляем класс в поле «Class». К примеру «WEB» для «web2.sub.domain.local». Действие не обязательное, но в итоге поможет систематизировать кучу доменных имён.
Теперь жмём «Add».
После того как хост был создан, можно приступать к генерированию сертификата. Жмём «Authentication» -> «Certificates» для перехода в раздел сертификатов, нажимаем «+Issue» и заполняем следующие поля:
— «Principal» — сюда мы вводим тип сервиса и имя хоста. К примеру «HTTP/web2.sub.domain.local» для «web2.sub.domain.local»;
— Устанавливаем чекбокс «Add principal» если он отсутствует;
— Выбираем CA thats при необходимости, или в том случае, если CA не один;
— Копируем запрос на сертификат в текстовое поле и жмём кнопку «Issue».
Теперь можно получить сгенерированный сертификат в разделе сервисы. Жмём «Identity» -> «Services», затем нажимаем на ссылку сервиса. К примеру «HTTP/web2.sub.domain.local@DOMAIN.LOCAL» для «web2.sub.domain.local». В открывшемся окне находим секцию «Service Certificate» (в правом верхнем углу) и в выпадающем меню «Actions» выбираем «Download» или «Get» для отображения. сертификата.

Возвращаемся к нашему хосту.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
#### Создаём сертификат хоста
nano /root/$HOSTNAME-certificate.pem
 
#### Загружаем root (CA) сертификат FreeIPA
wget --output-document=$IPARCA --no-check-certificate https://ipa.domain.local/ipa/config/ca.crt && cat $IPARCA
 
## Копируем и обновляем доверенные сертификаты (Debian)
mkdir $LDCA && cp $IPARCA $LDCA/ && dpkg-reconfigure ca-certificates
 
#### Добавляем глобально сертификат и ключ для HTTPD
cp $IPARCA $ESSLC
cp /root/$HOSTNAME-certificate.pem $EPKIT/certs/$HOSTNAME-certificate.pem
cp /root/$HOSTNAME-privateKey.key $EPKIT/private/$HOSTNAME-privateKey.key
 
В завершении меняем пути в конфигурационном файле Apache2 для конкретного доменного имени и глобально.
 
#### Теперь можно презагрузить Apache2
service apache2 restart

В качестве примера конфигурационного файла Apache2 для HTTPS сервиса, рассмотрим конфигурационный файл сервера Zabbix

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
DirectoryIndex index.php index.html
 
 
<VirtualHost systemip:80>
	ServerName zabbix.domain.local
	DocumentRoot /usr/share/zabbix
 
	RewriteEngine On
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L]
 
	<Directory "/usr/share/zabbix">
		Options FollowSymLinks
		AllowOverride None
		Require all granted
		php_value max_execution_time 300
		php_value memory_limit 128M
		php_value post_max_size 16M
		php_value upload_max_filesize 2M
		php_value max_input_time 300
		php_value date.timezone Europe/Moscow
	</Directory>
	<Directory "/usr/share/zabbix/conf">
		Require all denied
	</Directory>
	<Directory "/usr/share/zabbix/include">
		Require all denied
	</Directory>
</VirtualHost>
 
<VirtualHost systemip:443>
	SSLEngine on
	SSLCertificateFile /etc/pki/tls/certs/zabbix.domain.local-certificate.pem
	SSLCertificateKeyFile /etc/pki/tls/private/zabbix.domain.local-privateKey.key
 
	ServerName zabbix.domain.local
	DocumentRoot /usr/share/zabbix
 
	<Directory "/usr/share/zabbix">
		Options FollowSymLinks
		AllowOverride None
		Require all granted
		php_value max_execution_time 300
		php_value memory_limit 128M
		php_value post_max_size 16M
		php_value upload_max_filesize 2M
		php_value max_input_time 300
		php_value date.timezone Europe/Moscow
	</Directory>
	<Directory "/usr/share/zabbix/conf">
		Require all denied
	</Directory>
	<Directory "/usr/share/zabbix/include">
		Require all denied
	</Directory>
</VirtualHost>

Надеюсь что ничего не забыл и не перепутал. Как всегда жду ваших умных вопросов и светлых комментариев. Да, напоследок повторюсь, использовать FreeIPA в качестве DNS сервера можно, и вероятно, для небольшой инфраструктуры даже нужно, но для больших проектов это скверная практика, даже если есть 10500 реплик. Нет ничего лучше чем классическая диверсификация рисков, путём логического распределения ролей сервисов и разграничения зон ответственности. О том как построена инфраструктура DNS серверов у нас я расскажу в следующей статье.

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.