Вопрос или проблема
С ufw disable
на удаленной системе postgres я могу подключаться с моего локального компьютера
Однако соединение не работает, когда я ufw enable
, как показано ниже:
C:\Users\HOME>telnet 80.240.24.195 5432
Connecting To 80.240.24.195...Could not open connection to the host, on port 5432: Connect failed
Ниже приведена моя конфигурация postgres на момент перезапуска.
cat /etc/postgresql/12/main/postgresql.conf
# - Connection Settings -
listen_addresses="*" # на каких IP-адресах слушать;
# список адресов, разделённый запятыми;
# по умолчанию 'localhost'; используйте '*' для всех
# (изменения требуют перезапуска)
port = 5432 # (изменения требуют перезапуска)
max_connections = 100 # (изменения требуют перезапуска)
#superuser_reserved_connections = 3 # (изменения требуют перезапуска)
unix_socket_directories="/var/run/postgresql" # список директорий, разделённый запятыми
cat /etc/postgresql/12/main/pg_hba.conf
# Административный вход в базу данных через Unix-доменный сокет
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" только для подключений через Unix-доменный сокет
local all all peer
# IPv4 локальные подключения:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
# IPv6 локальные подключения:
host all all ::1/128 md5
telnet работает, когда пробую с самого хоста postgres, но когда я пытаюсь подключиться с моего локального ноутбука, это не удается.
root@DKERP:/# ufw status numbered
Статус: активно
Кому Действие Откуда
-- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 8069 ALLOW IN Anywhere
[ 3] 443/tcp DENY IN Anywhere
[ 4] 443 DENY IN Anywhere
[ 5] 80/tcp DENY IN Anywhere
[ 6] 80,443,5432/tcp DENY IN Anywhere
[ 7] 80 DENY IN Anywhere
[ 8] 4433/tcp DENY IN Anywhere
[ 9] 5432/tcp ALLOW IN Anywhere
[10] 22 (v6) ALLOW IN Anywhere (v6)
[11] 8069 (v6) ALLOW IN Anywhere (v6)
[12] 443/tcp (v6) DENY IN Anywhere (v6)
[13] 443 (v6) DENY IN Anywhere (v6)
[14] 80/tcp (v6) DENY IN Anywhere (v6)
[15] 80,443,5432/tcp (v6) DENY IN Anywhere (v6)
[16] 80 (v6) DENY IN Anywhere (v6)
[17] 4433/tcp (v6) DENY IN Anywhere (v6)
[18] 5432/tcp (v6) ALLOW IN Anywhere (v6)
Можете ли вы, пожалуйста, подсказать, что еще нужно сделать, чтобы подключение postgres заработало с моего локального ноутбука?
Была запись в ufw
, которая блокировала порт 5432, как видно из вывода. Я удалил эту запись и перезапустил сервис, чтобы это заработало.
[ 6] 80,443,5432/tcp DENY IN Anywhere
ufw delete 6
ufw disable
ufw enable
Ответ или решение
Чтобы обеспечить надежное соединение с сервером PostgreSQL через порт 5432 в условиях активированной ufw, важно правильно настроить ваше окружение. Ниже приведены шаги по устранению неполадок, которые помогут решить возникшую проблему.
Анализ проблемы
-
Конфигурация PostgreSQL:
- Файл
postgresql.conf
настроен на прием соединений со всех IP-адресов благодаря строкеlisten_addresses="*"
. Это правильно, поскольку позволяет доступ к базе данных из внешних источников.
- Файл
-
Настройка
pg_hba.conf
:- Ваша конфигурация
pg_hba.conf
также соответствует требованиям, поддерживая подключение для всех адресов через метод идентификацииmd5
.
- Ваша конфигурация
Проблемы с ufw
Вы отметили, что при отключенной ufw соединение успешно устанавливается, а при включении — нет. Это указывает на то, что ошибки связаны с правилами ufw.
- Анализ текущих правил ufw:
- Ваша текущая конфигурация показывает, что порт 5432 включен для входящих соединений благодаря записи
[9] 5432/tcp ALLOW IN Anywhere
. - Однако правило
[6] 80,443,5432/tcp DENY IN Anywhere
означает, что порт 5432 одновременно блокируется. Это правило имеет более высокий приоритет, чем разрешающее правило, поэтому соединения блокируются.
- Ваша текущая конфигурация показывает, что порт 5432 включен для входящих соединений благодаря записи
Решение проблемы
Для решения проблемы выполните следующие шаги:
-
Удаление конфликтующего правила:
- Удалите запись
[6] 80,443,5432/tcp
с помощью команды:ufw delete 6
- Удалите запись
-
Перезагрузка ufw:
- После изменения правил, перезапустите ufw, чтобы применить новые настройки:
ufw disable ufw enable
- После изменения правил, перезапустите ufw, чтобы применить новые настройки:
Эти шаги должны разрешить конфликтующие правила и позволить подключаться к базе данных через порт 5432, когда ufw включен.
Дополнительные рекомендации
- Проверка логов: Регулярно проверяйте журналы ufw (
/var/log/ufw.log
) на предмет записей, которые могут указывать на блокировку трафика. - Мониторинг безопасности: Убедитесь, что разрешенные подключения приходят только от надежных источников, чтобы минимизировать угрозу несанкционированного доступа.
Следуя этим рекомендациям, вы сможете обеспечить стабильное и безопасное подключение к PostgreSQL.