Настройка SSL соединений
Для повышения безопасности сервера базы данных возможно использование надежного шифрования соединений с базой данных.
Для настройки SSL соединений:
-
Создайте сертификаты для сервера PostgreSQL и его клиентов (postgres-клиентов) (см. Раздел 1).
-
Выполните настройку конфигурационных файлов на сервере PostgreSQL (см. Раздел 2).
-
После установки пакетов компонентов СРК скопируйте полученные сертификаты и выполните настройку SSL соединений для postgres-клиентов на узлах (см. Раздел 3):
-
развёрнутой серверной части СРК;
-
использующих приложение «Менеджер администратора RuBackup» или «Веб-интерфейс Tucana».
-
1. Выпуск сертификатов
Аутентификация клиента по сертификату позволяет серверу проверить личность подключающегося, подтверждая, что сертификат X.509, представленный postgres-клиентом, подписан доверенным центром сертификации (CA).
Сертификаты SSL проверяются и выдаются Центром сертификации.
Если вы не имеете PKI инфраструктуры открытых ключей, то на отдельном хосте, который может выполнять роль Центра сертификации:
-
Создайте директории, в которые будут сгенерированы сертификаты Центра сертификации, сервера PostgreSQL и для всех postgres-клиентов (в зависимости от архитектуры вашей СРК):
mkdir certs && cd certs && mkdir ca pg-server rb-server rb-media rb-rbmгде:
-
ca- директория для сертификатов Центра сертификации; -
pg-server- директория для сертификатов сервера PostgreSQL; -
rb-server- директория для сертификатов основного сервера RuBackup; -
rb-media- директория для сертификатов медиасервера; -
rb-rbm- директория для сертификатов АРМ администратора, если Менеджер администратора RuBackup (RBM) развёрнут на отдельном хосте.
-
-
Создайте закрытый ключ Центра сертификации, для этого:
-
Перейдите в ранее созданную папку:
cd ./ca -
Сгенерируйте закрытый ключ для СА (
ca.key), выполнив команду, например:openssl genrsa -out ca.key 2048 -
Создайте самоподписанный сертификат Центра сертификации (
са.сrt) сроком действия 1 год:openssl req -new -x509 -days 365 -key ca.key -out ca.crtгде
CN— это полное имя хоста (FQDN), на котором развёрнут СА.
-
-
Выпустите сертификат и закрытый ключ для сервера PostgreSQL, для этого:
-
Перейдите в ранее созданную папку:
cd ./pg-server -
Сгенерируйте закрытый ключ для сервера PostgreSQL
/pg-server/server.key:openssl genrsa -out server.key 2048 -
Сгенерируйте запрос на сертификат сервера PostgreSQL
/pg-server/server.csr:openssl req -new -key server.key -out server.csrгде
CN— это полное имя хоста (FQDN), на котором развёрнут сервер PostgreSQL. -
Подпишите запрос на сертификат сервера PostgreSQL закрытым ключом Центра сертификации:
openssl x509 -req -in server.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAcreateserial -out server.crt -days 365
-
-
Повторите шаг 3 для каждого postgres-клиента, сгенерировав закрытый ключ (
postgresql.key) и выпустив сертификат (postgresql.crt) для всех postgres-клиентов, указав в сертификате соответствующее FQDN хоста, на котором развёрнут компонент СРК.
2. Настройка SSL соединения на сервере PostgreSQL
Выполните приведённые ниже настройки, чтобы сервер PostgreSQL прослушивал как обычные, так и SSL соединения через один и тот же TCP-порт и согласовывал использование SSL с любым подключающимся postgres-клиентом.
-
Скопируйте в папку
/etc/postgresql/16/mainна сервер PostgreSQL из папки/pg-serverЦентра сертификации подготовленные:-
сертификат Центра сертификации (
ca.crt); -
подписанный сертификат сервера PostgreSQL (
server.crt); -
сгенерированный закрытый ключ сервера PostgreSQL (
server.key).
-
-
Для файлов сертификата и закрытого ключа установите полный доступ на чтение и запись только для владельцев:
chmod 600 server.crt server.key ca.crtСделайте владельцем файлов пользователя и группу пользователя
postgres:chown postgres:postgres server.crt server.key ca.crt -
Отредактируйте конфигурационный файл
postgresql.conf:-
включите поддержку зашифрованных соединений:
ssl = on -
укажите путь к файлу сертификата Центра сертификации (или цепочке сертификатов):
ssl_ca_file = '/etc/postgresql/16/main/ca.crt'Сертификат СА проверяет, что сертификат postgres-клиента подписан доверенным центром сертификации.
-
укажите путь к файлу сертификата сервера PostgreSQL:
ssl_cert_file = '/etc/postgresql/16/main/server.crt'Сертификат будет отправлен postgres-клиенту для указания подлинности сервера PostgreSQL.
-
укажите путь к файлу закрытого ключа сервера PostgreSQL:
ssl_key_file = '/etc/postgresql/16/main/server.key'Закрытый ключ доказывает, что сертификат сервера PostgreSQL был отправлен владельцем; не указывает, что владелец сертификата заслуживает доверия.
-
-
Чтобы потребовать от postgres-клиента предоставления доверенного сертификата, отредактируйте конфигурационный файл
pg_hba.conf:-
добавьте опцию аутентификации
clientcert=verify-caилиclientcert=verify-fullв соответствующиеhostsslстроки, где:-
clientcert=verify-fullсервер PostgreSQL не только проверяет цепочку сертификатов, но также проверяет, совпадает ли имя пользователя или его сопоставление сCNпредоставленного сертификата; -
clientcert=verify-caсервер проверяет, что сертификат postgres-клиента подписан одним из доверенных центров сертификации.Также желательно закомментировать все строчки
host, например:#host all all 0.0.0.0/0 md5 hostssl all all 0.0.0.0/0 [md5,cert] clientcert=[verify-ca,verify-full] (1)1 В старых версиях [0,1] где:
md5— запросить пароль пользователя,cert— аутентификация по сертификату.Если параметр
clientcertне указан, сервер проверяет сертификат postgres-клиента по своему файлу CA, только если сертификат postgres-клиента представлен и CA настроен.
-
-
-
Произведите настройку карты имён пользователей.
При использовании внешней системы аутентификации, такой как
Ident, имя пользователя операционной системы, инициировавшего подключение, может не совпадать с именем пользователя базы данных (роли), который должен использоваться. В этом случае карта имен пользователей может быть применена для сопоставления имени пользователя операционной системы с именем пользователя базы данныхЧтобы использовать сопоставление имен пользователей, отредактируйте:
-
конфигурационный файл
pg_hba.conf— укажите в значении параметраmap=map-name:hostssl all all 0.0.0.0/0 md5 clientcert=verify-full map=sslmap -
конфигурационный файл
pg_ident.conf, хранящийся в каталоге данных кластера — настройте карты имен пользователей, добавьте, например:# MAPNAME SYSTEM-USERNAME PG-USERNAME sslmap postgres postgres sslmap postgres rubackupгде:
-
в столбце
SYSTEM-USERNAMEукажитеCNсертификата postgres-клиента; -
в столбце
PG-USERNAMEукажите имя пользователя, с которым нужно сопоставить.
-
-
-
Для применения изменений перезапустите сервер:
sudo systemctl restart postgresql
3. Настройка SSL соединения на узлах компонентов RuBackup
Для подключения серверных компонентов RuBackup и АРМ администратора СРК (используещего приложение «Менеджер администратора RuBackup») к служебной базе данных PostgreSQL с использованием защищённого соединения выполните приведённые ниже настройки на соответствующих узлах (postgres-клиентах):
-
развёрнутой серверной части СРК;
-
использующих приложение «Менеджер администратора RuBackup».
3.1. Настройка SSL соединения на узлах компонентов RuBackup
-
Перенесите из соответствующей postgres-клиенту папки на узле Центра сертификации подготовленные:
-
сертификат Центра сертификации (ca.crt), чтобы postgres-клиент мог проверить, что конечный сертификат сервера PostgreSQL был подписан его доверенным корневым сертификатом;
-
сертификат postgres-клиента (узла компонента СРК) (postgresql.crt);
-
сгенерированный закрытый ключ сервера/клиента СРК (postgresql.key).
-
-
Для файлов сертификата и закрытого ключа установите полный доступ на чтение и запись только для владельцев:
chmod 600 server.crt server.key ca.crt -
Сделайте владельцем файлов пользователя, от имени которого будет запущен компонент СРК (postgres-клиент):
chown suser:suser server.crt server.key ca.crt -
Настройка SSL соединения на узле компонента RuBackup выполняется после установки пакетов СРК одним из способов:
-
при настройке компонента СРК серверной или клиентской части;
-
при внесении правки в файл настроек сервера (полученный после конфигурирования компонента СРК).
-
-
Для настройки SSL-соединения с БД предварительно необходимо выполнить настройку служебной базы данных в соответствии с разделом Настройка СУБД и подготовить сертификаты.
-
Enter sslmode ( allow, disable, prefer, require, verify-ca, verify-full ) [ require ]Enter path for sslrootcert file:Enter path for sslcert file:Enter path for sslkey file:-
выберите и введите название выбранного режима SSL в соответствии с таблицей.
По умолчанию выбран режим
require.
-
-
| sslmode | Защита от прослушивания | Защита от MITM | Утверждение |
|---|---|---|---|
disable |
Нет |
Нет |
Мне не важна безопасность и я не приемлю издержки, связанные с шифрованием. |
allow |
Возможно |
Нет |
Мне не важна безопасность, но я приемлю издержки, связанные с шифрованием, если на этом настаивает сервер. |
prefer |
Возможно |
Нет |
Мне не важна безопасность, но я предпочитаю шифрование (и приемлю связанные издержки), если это поддерживает сервер. |
require |
Да |
Нет |
Я хочу, чтобы мои данные шифровались, и я приемлю сопутствующие издержки. Я доверяю сети в том, что она обеспечивает подключение к нужному серверу |
verify-ca |
Да |
Зависит от политики ЦС |
Я хочу, чтобы мои данные шифровались, и я приемлю сопутствующие издержки. Мне нужна уверенность в том, что я подключаюсь к доверенному серверу |
verify-full |
Да |
Да |
Я хочу, чтобы мои данные шифровались, и я приемлю сопутствующие издержки. Мне нужна уверенность в том, что я подключаюсь к доверенному серверу и это именно указанный мной сервер |
-
укажите расположение подготовленных сертификатов:
-
в поле
sslrootcertукажите расположение сертификата центра сертификации; -
в поле
sslcertукажите расположение сертификата настраиваемого хоста; -
в поле
sslkeyукажите расположение закрытого ключа настраиваемого хоста.
-