Чтобы разрешить внешние подключения к PostgreSQL на Ubuntu, вам нужно выполнить несколько шагов:
1. Настройка прослушивания адресов в postgresql.conf:
Откройте файл конфигурации PostgreSQL postgresql.conf. Расположение файла может отличаться в зависимости от версии PostgreSQL, но обычно он находится в /etc/postgresql/<версия>/main/postgresql.conf. Например:
sudo nano /etc/postgresql/14/main/postgresql.conf
Найдите строку, начинающуюся с listen_addresses. По умолчанию она может быть закомментирована (#listen_addresses = ‘localhost’) или установлена в ‘localhost’.
Измените значение listen_addresses на ‘*’. Это позволит PostgreSQL прослушивать все доступные IP-адреса. Если вы хотите разрешить подключения только с определенных IP-адресов, укажите их через запятую (например, ‘192.168.1.0/24, 10.0.0.0/16’).
listen_addresses = '*'
Сохраните изменения и закройте файл.
2. Настройка правил доступа в pg_hba.conf:
Откройте файл pg_hba.conf. Он находится в том же каталоге, что и postgresql.conf (например, /etc/postgresql/<версия>/main/pg_hba.conf).
sudo nano /etc/postgresql/14/main/pg_hba.conf
Добавьте строку, разрешающую подключения с внешних IP-адресов. Рекомендуется использовать аутентификацию md5 или scram-sha-256 для безопасности.
host all all 0.0.0.0/0 scram-sha-256
- host: Указывает, что правило применяется к подключениям через TCP/IP.
- all: Указывает, что правило применяется ко всем базам данных.
- all: Указывает, что правило применяется ко всем пользователям PostgreSQL.
- 0.0.0.0/0: Указывает, что правило применяется ко всем IP-адресам (любой IP-адрес и маска подсети).
Внимание
: Это разрешает подключения с любого IP-адреса в интернете. Для большей безопасности рекомендуется указать конкретные IP-адреса или диапазоны IP-адресов, с которых разрешены подключения. Например, 192.168.1.0/24 разрешит подключения только из сети 192.168.1.0/24. - scram-sha-256: Указывает метод аутентификации. scram-sha-256 — более современный и безопасный метод, чем md5. Вы также можете использовать md5, но scram-sha-256 предпочтительнее.
Сохраните изменения и закройте файл.
3. Перезапуск PostgreSQL:
Перезапустите службу PostgreSQL, чтобы применить изменения:
sudo systemctl restart postgresql
4. Настройка брандмауэра (UFW):
Если у вас включен брандмауэр UFW, вам нужно разрешить входящие подключения к порту PostgreSQL (по умолчанию 5432).
sudo ufw allow 5432/tcp
Если UFW не включен, рекомендуется его всё-таки включить:
sudo ufw enable
Проверьте статус UFW:
sudo ufw status
Убедитесь, что порт 5432 разрешен.
5. Проверка подключения:
С удаленного компьютера попробуйте подключиться к PostgreSQL, используя клиент PostgreSQL (например, psql) или другое приложение, которое использует PostgreSQL.
psql -h <IP-адрес_сервера> -U <имя_пользователя> -d <имя_базы_данных>
Замените <IP-адрес_сервера>, <имя_пользователя> и <имя_базы_данных> на соответствующие значения.
Важные замечания по безопасности:
- Ограничьте доступ по IP-адресам: Вместо 0.0.0.0/0 в pg_hba.conf укажите конкретные IP-адреса или диапазоны IP-адресов, с которых разрешены подключения. Это значительно повысит безопасность вашей базы данных.
- Используйте надежные пароли: Убедитесь, что у всех пользователей PostgreSQL установлены надежные пароли.
- Рассмотрите возможность использования SSL: Для шифрования трафика между клиентом и сервером PostgreSQL рассмотрите возможность использования SSL.
- Регулярно обновляйте PostgreSQL: Устанавливайте последние обновления безопасности для PostgreSQL.
- Мониторинг: Настройте мониторинг PostgreSQL для обнаружения подозрительной активности.
- Пример более безопасной конфигурации pg_hba.conf:
Предположим, вы хотите разрешить подключения только с IP-адреса 192.168.1.100 и из сети 10.0.0.0/24. В pg_hba.conf вы должны добавить следующие строки:
host all all 192.168.1.100/32 scram-sha-256 host all all 10.0.0.0/24 scram-sha-256
В этом примере /32 означает, что правило применяется только к IP-адресу 192.168.1.100, а /24 означает, что правило применяется ко всем IP-адресам в сети 10.0.0.0/24.
Следуя этим шагам, вы сможете разрешить внешние подключения к PostgreSQL на Ubuntu, обеспечив при этом необходимый уровень безопасности. Помните, что безопасность базы данных — это непрерывный процесс, и важно регулярно пересматривать и обновлять ваши настройки безопасности.