Postgresql отказывается от TCP/IP соединения после перезагрузки Ubuntu

Вопрос или проблема

Это меня озадачило.

Я перезагрузил свой сервер Ubuntu, и теперь, когда я пытаюсь подключиться с помощью pgAdmin, я получаю следующее:

не удалось подключиться к серверу: время подключения истекло (0x0000274C/10060)
Сервер запущен на хосте "<ip.address>" и принимает
TCP/IP соединения на порту 5432?

В моем файле postgresql.conf

listen_addresses="*"

В моем pg_hba.conf

# НЕ ОТКЛЮЧАТЬ!
# Если вы измените эту первую запись, вам нужно будет убедиться, что
# суперпользователь базы данных может получить доступ к базе данных другим способом.
# Непрерывный доступ ко всем базам данных необходим во время автоматической
# технической обслуживания (пользовательские ежедневные задания cron, репликация и подобные задачи).
#
# Вход в базу данных для администратора через сокет Unix
local   all             postgres                                peer

# ТИП  БАЗА ДАННЫХ      ПОЛЬЗОВАТЕЛЬ      AДРЕС                 МЕТОД

# "local" предназначен только для соединений по сокету Unix
local   all             all                                     peer
# IPv4 локальные соединения:
host    all             all             127.0.0.1/32            md5
# IPv6 локальные соединения:
host    all             all             ::1/128                 md5
# Разрешить соединения репликации с локального хоста, пользователю с правом
# репликации.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

host    all     all     129.125.179.201/32      trust
host    all     all     86.81.139.21/24         trust

Я добавил следующую строку в конец

host    all     all     0.0.0.0/0       md5

Все еще не могу подключиться

Я перезагрузил PostgreSQL после каждого изменения.

Я могу войти в PostgreSQL через командную строку по ssh.

У меня закончились идеи!

Правка

iptables

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -j DROP
-A OUTPUT -j ACCEPT
-A DOCKER-ISOLATION -j RETURN

Результаты netstat

netstat -lt4
Активные интернет-соединения (только серверы)
Протокол Recv-Q Отправить-Q Локальный адрес           Удаленный адрес         Состояние
tcp        0      0 localhost:mysql         *:*                     LISTEN
tcp        0      0 *:8787                  *:*                     LISTEN
tcp        0      0 *:ssh                   *:*                     LISTEN
tcp        0      0 *:postgresql            *:*                     LISTEN

iptables-save

sudo iptables-save
# Сгенерировано iptables-save v1.6.0 в сб. 23 сен 2017 18:23:36
*nat
:PREROUTING ACCEPT [48958:12725477]
:INPUT ACCEPT [2847:159736]
:OUTPUT ACCEPT [70:6309]
:POSTROUTING ACCEPT [70:6309]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
COMMIT
# Завершено в сб. 23 сен 2017 18:23:36
# Сгенерировано iptables-save v1.6.0 в сб. 23 сен 2017 18:23:36
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -j DROP
-A OUTPUT -j ACCEPT
-A DOCKER-ISOLATION -j RETURN
COMMIT
# Завершено в сб. 23 сен 2017 18:23:36

Я думаю, что проблема не связана с авторизацией (например, pg_hba.conf), так как ваша ошибка говорит о недоступном порте. Попробуйте указать как можно больше параметров подключения. Также попробуйте подключиться с помощью какого-нибудь простого инструмента, например, psql (с указанием всех параметров подключения, например, -h localhost -U user -W -p 5432 и т.д.). Это должно дать вам подсказку о том, что происходит и где искать дальше.

Особенно укажите -h localhost, так как в противном случае будет использоваться локальный сокет Unix вместо TCP.

ПРАВКА: Вы уверены, что это правило iptables правильное:
-A INPUT -d 127.0.0.0/8 -j REJECT –reject-with icmp-port-unreachable
Я не эксперт в этом, но попробуйте временно удалить эту запись и подключиться снова. То же самое касается: -A INPUT -j DROP.

ПРАВКА2: Если ничего не работает, пожалуйста, сохраните все iptables с помощью “iptables-save” вместо “iptables -S”. “iptables-save” сохраняет все доступные таблицы (например, filter, nat и т.д.). Более подробная информация в руководстве.

Вы, возможно, удалили это из /etc/services

У вас должна быть строка, которая выглядит следующим образом

    postgresql      5432/tcp        postgres        # PostgreSQL Database

Ответ или решение

После перезагрузки Ubuntu-сервера вы столкнулись с проблемой подключения к PostgreSQL через TCP/IP. Ошибка указывает, что сервер не доступен по указанному IP-адресу на порту 5432. Давайте разберемся с потенциальными причинами и возможными решениями.

1. Конфигурация PostgreSQL

Вы указали, что в файле postgresql.conf настройка listen_addresses установлена на "*". Это означает, что сервер PostgreSQL будет слушать на всех доступных адресах. Убедитесь, что после изменения конфигурации вы перезагрузили PostgreSQL:

sudo systemctl restart postgresql

2. Проверка файла pg_hba.conf

Ваш файл pg_hba.conf выглядит корректно, поскольку вы добавили правило для разрешения доступа из любого адреса (0.0.0.0/0). Однако, учитывая что вы можете подключаться через командную строку, проблем с авторизацией быть не должно.

3. Настройки iptables

Ваша конфигурация iptables выглядит проблемной. Правило:

-A INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable

может блокировать соединения на локальном интерфейсе. Вместо этого правильнее будет настроить правила так, чтобы разрешить доступ к порту 5432. Попробуйте временно удалить или изменить это правило, чтобы оно не блокировало соединение:

sudo iptables -D INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable

Также убедитесь, что есть правило, разрешающее входящие соединения на порт 5432:

sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

4. Проверка работы службы

Используйте команду netstat для проверки, слушает ли PostgreSQL на порту 5432:

netstat -tuln | grep 5432

Вы должны увидеть строку, которая подтверждает, что PostgreSQL активно слушает на порту 5432, как в вашем выводе:

tcp        0      0 *:postgresql            *:*                     LISTEN

5. Динамическое разрешение

Убедитесь, что IP-адрес, который вы используете для подключения, действительно доступен. Проверьте, действительно ли вы подключаетесь к нужному IP-адресу и используете правильный порт. Также выполните подключение через psql, указывая параметры явно:

psql -h <ip.address> -U your_username -d your_database -p 5432

6. Проверка службы PostgreSQL

Убедитесь в том, что служба PostgreSQL работает корректно. Выполните:

sudo systemctl status postgresql

Это поможет проверить, правильно ли запущена служба и отсутствуют ли ошибки в журнале.

Заключение

Если после выполнения предложенных шагов проблема не решена, рассмотрите дополнительную информацию из логов PostgreSQL, которые обычно находятся в /var/log/postgresql/. Это может дать больше деталей о том, что именно идет не так. Сделайте также резервное копирование конфигурационных файлов перед внесением изменений, чтобы избежать нежелательных нарушений работы системы.

Соблюдая вышеизложенные рекомендации и пошагово отслеживая каждую часть конфигурации, вы сможете устранить проблему подключения к вашему серверу PostgreSQL после перезагрузки Ubuntu.

Оцените материал
Добавить комментарий

Капча загружается...