Как настроить удалённый доступ к PostgreSQL с удалённых серверов
Есть два метода настройки удалённого доступ к PostgreSQL с внешних серверов: 1) открыть доступ к вашему PostgreSQL вообще со всех серверов в интернете и 2) Вручную настроить те сервера с которых можно будет подключится к вашей базе.
Первый метод хорош только в случае тестового или учебного проекта, так как небольшой баг в коде может раскрыть данные доступа к вашей базе и скомпрометировать всё её содержимое. Если вы думаете, что ваш проект слишком маленький и вас это не касается, то вы ошибаетесь. Недавно я запустил совершенно чистый сервер с новым ip и оставил открытый доступ к базе, уже через час какой-то бот стёр всю БД и предлагал выкуп, за возвтар данных.
Настройка доступа избранным ip
Для того, что бы настроить доступ к PostgreSQL с разрешённых вами серверов нужно для начала открыть доступ к PostgreSQL серверу с внешних серверов. Открываем файл /etc/postgresql/14/main/postgresql.conf
Обратите внимание, что у вас может отличатся путь к файлу, например с выходом версии 15 PostgreSQL
В разделе Connection Settings нужно раскомментировать строку listen_addresses
и привести её к виду:
listen_addresses = '*'
Далее в этой же директории открываем файл pg_hba.conf
и в самом низу добавляем ip адреса тех серверов которым вы хотите дать доступ к вашему PostgreSQL.
Пример строки для каждого сервера:
# TYPE DATABASE USER ADDRESS METHOD
host all all 80.121.11.21/32 scram-sha-256
# TYPE DATABASE USER ADDRESS METHOD
host all all 120.121.11.11/32 scram-sha-256
В примере я открыл удалённый доступ для сервера 80.121.11.21 и 120.121.11.11
В моей конфигурации открыт доступ для всех пользователей, во всем базам данных: host all all
для большей безопасности вы можете ограничить этот набор. Например открыть доступ только пользователю remote: host all remote
ко всем базам, или ограничить до одного пользователя и одной базе: host orders remote
Как видно из примера, только пользователь remote сможет подключится с удачного сервера и получить доступ, только к базе данных orders
Не забывайте перезагружать PostgreSQL после каждого изменения конфиг файлов
sudo service postgresql restart
Доступ со всех ip
Если предостережение выше на вас не подействовало, вы в праве на свой страх и риск открыть доступ к вашей базе со всех серверов в интернете.
Для этого вам необходимо добавить следующую конфигурацию в файл pg_hba.conf
host all all 0.0.0.0/0 md5
На этом у меня всё!