ルートアクセス権を持つUbuntuサーバーのPostgreSQLデータベースに接続しようとしていますが、どういうわけか、ローカルアクセスのためにポート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"で実行されており、ポート5432でTCP/IP接続を受け入れていますか?
「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ポートを公開することはセキュリティ上の懸念事項である可能性があります。最初のiptablesコマンドの-s 0/0
パラメーターを-s X.X.X.X/X
に変更して、着信トラフィックを特定のIPアドレス/範囲に制限することを検討する必要があります。