On Russian

Доступ к PostgreSQL извне через PGBouncer

PostgreSQL

  1. Подключаемся к PostgreSQL: bash su postgres psql
  2. Создаем пользователя для бэкапов: sql CREATE USER backup SUPERUSER PASSWORD 'PLACE YOUR PASSWORD HERE';
  3. Делаем его readonly: sql ALTER USER backup set default_transaction_read_only = on;
  4. Запоминаем MD5 хэш пароля нового пользователя (шучу, выписываем): sql use postgres SELECT usename, passwd FROM pg_shadow
  5. Выходим из psql и идём добавлять доступ к юзеру со внешнего сервера через HBA: bash nano /etc/postgresql/9.6/main/pg_hba.conf
  6. Добавляем след. строку: host all backup 1.1.1.1/32 md5 Вместо 1.1.1.1 указываем IP внешнего сервера.

На этом всё. Если у вас нет pgbouncer, то в настройках PostgreSQL открываем доступ из внешней сети и обновляем настройки.

PGBouncer

  1. Корректируем настройки pgbouncer: bash nano /etc/pgbouncer/pgbouncer.ini
    1. Открываем доступ из внешней сети: listen_addr = *
    2. Включаем использование файла HBA: auth_type = hba
    3. Указываем путь к файлу HBA: auth_hba_file = /etc/postgresql/9.6/main/pg_hba.conf
  2. Добавляем в список паролей, используемых в pgbouncer, данные нового пользователя: bash nano /etc/pgbouncer/userlist.txt Добавляем: bash "backup" "MD5 хэш пароля"
  3. Перезапускаем pgbouncer: bash service pgbouncer restart

Проверка доступов

С внешнего сервера:

pgcli --host АДРЕС_СЕРВЕРА_БД --port 6432 --dbname ЛЮБАЯ_БД --username ЛОКАЛЬНЫЙ_ПОЛЬЗОВАТЕЛЬ

Вводим пароль, и должно быть отказано в коннекте. Значит, лишнего не расшарили.

С сервера БД:

pgcli --host localhost --port 6432 --dbname ЛЮБАЯ_БД --username ЛОКАЛЬНЫЙ_ПОЛЬЗОВАТЕЛЬ

Вводим пароль, и должен быть успешный коннект. Значит, текущие доступы не сломали.

С сервера бэкапов:

pgcli --host localhost --port 6432 --dbname ЛЮБАЯ_БД --username backup

Вводим пароль, и должен быть успешный коннект. Значит, новый доступ добавили.

created: 2018-05-16 (Wed) updated: 2018-05-16 (Wed) views: 197

Contributors

orsinium