Я пытаюсь подключиться к базе данных PostgreSQL на сервере Ubuntu, к которому у меня есть root-доступ, но каким-то образом я не могу открыть порт 5432 для удаленного доступа, только локального. Вот что происходит, когда я использую команду "nmap" на сервере (XXX.XXX.X.XX представляет IP-адрес сервера):
nmap -p 5432 localhost
PORT STATE SERVICE
5432/tcp open postgresql
nmap -p 5432 XXX.XXX.X.XX
PORT STATE SERVICE
5432/tcp closed postgresql
Я уже редактировал файлы «pg_hba.conf» и «postgresql.conf», но это не сработало.
Перемены:
файл pg_hba.conf:
# IPv4 local connections:
host all all all md5
# IPv6 local connections:
host all all all md5
файл postgresql.conf:
listen_addresses = '*'
И когда я пытаюсь подключиться к pgAdmin III, он показывает мне вот что:
Сервер не слушает
не удалось подключиться к серверу: соединение отклонено (0x0000274D / 10061) Сервер работает на хосте «XXX.XXX.X.XX» и принимает соединения TCP / IP на порту 5432?
Я пытался открыть порт с помощью команды «ufw», но это тоже не сработало.
Может кто-нибудь помочь мне?
Убедитесь, что ваш брандмауэр не блокирует трафик.
Добавьте следующие правила в свой iptables (измените X.X.X.X
на IP-адрес вашего сервера):
# iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d X.X.X.X --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp -s X.X.X.X --sport 5432 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
Если он работает, сохраните iptables и перезапустите его:
# apt-get install iptables-persistent
# /etc/init.d/iptables restart
Если у вас есть внешний брандмауэр в вашей сети, вы должны разрешить соединение и там.
Примечание по безопасности: Открытие вашего порта PostgreSQL для публики может быть проблемой безопасности. Вам следует рассмотреть возможность ограничения входящего трафика определенным IP-адресом / диапазоном, изменив -s 0/0
параметр в первой команде iptables для -s X.X.X.X/X