Настройка 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
укажите расположение закрытого ключа настраиваемого хоста.Ы
-