Вопрос или проблема
Это меня озадачило.
Я перезагрузил свой сервер 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.