PostgreSQLがリモート接続を許可しているか確認する方法|listen_addressesとpg_hba.confの確認手順

PostgreSQL

PostgreSQLを運用していると、自分のパソコン内だけで利用できる状態なのか、それとも別のPCやサーバーからのリモート接続を受け付けている状態なのか確認したい場面があります。接続設定を正しく確認することで、不必要な外部アクセスを防ぎ、安全なデータベース運用につながります。この記事では、PostgreSQLがローカル接続のみなのか、リモート接続可能なのかを確認する具体的な方法を解説します。

PostgreSQLの接続範囲を決める主な設定

PostgreSQLがどこからの接続を受け付けるかは、主に「listen_addresses」と「pg_hba.conf」という2つの設定ファイルによって決まります。

listen_addressesは、PostgreSQLサーバーがどのネットワークインターフェースで接続を待ち受けるかを設定する項目です。一方、pg_hba.confは、どのホストからどのユーザーが接続できるかを制御するアクセス制御ファイルです。

そのため、リモート接続が可能か確認する場合は、この2つの設定を確認する必要があります。

listen_addressesの設定を確認する方法

まず、PostgreSQLが外部からの接続を待ち受けているか確認します。psqlでPostgreSQLへ接続し、以下のSQLを実行します。

SHOW listen_addresses;

結果が以下のような場合、それぞれ意味が異なります。

設定値 意味
localhost 同じPC内からのみ接続可能
127.0.0.1 ローカル接続のみ許可
* すべてのネットワークから接続待受
特定のIPアドレス 指定したネットワークのみ待受

例えば、localhostと表示される場合は基本的にリモートホストから接続できません。一方で*の場合は、pg_hba.confの設定次第で外部PCから接続できる状態になります。

pg_hba.confで許可されている接続元を確認する

listen_addressesで接続を待ち受けていても、pg_hba.confで許可されていなければリモート接続はできません。

pg_hba.confの場所は、以下のSQLで確認できます。

SHOW hba_file;

表示されたファイルを開くと、接続許可ルールを確認できます。

例えば、以下のような設定がある場合は、192.168.1.xのネットワークから接続を許可しています。

host all all 192.168.1.0/24 md5

一方で以下のような設定の場合は、すべてのIPアドレスから接続対象になる可能性があります。

host all all 0.0.0.0/0 md5

このような広い範囲の許可設定は便利ですが、インターネット公開環境ではセキュリティリスクになるため注意が必要です。

現在の接続状況から確認する方法

現在、どの端末からPostgreSQLへ接続されているか確認する方法もあります。

PostgreSQLへログインして以下のSQLを実行します。

SELECT client_addr, usename, application_name FROM pg_stat_activity;

client_addrの値を見ることで、接続元IPアドレスを確認できます。

例えば、以下のような結果の場合、外部PCから接続されています。

192.168.1.50 | user1 | pgAdmin

逆にclient_addrが127.0.0.1やNULLの場合は、ローカル環境からの接続である可能性が高くなります。

OS側から待受ポートを確認する方法

PostgreSQLは通常5432番ポートを使用します。OS側から、このポートが外部向けに開いているか確認することもできます。

Linuxの場合は以下のコマンドを利用できます。

ss -lntp | grep 5432

Windowsの場合はPowerShellで以下を実行できます。

netstat -ano | findstr 5432

表示された待受アドレスが127.0.0.1の場合はローカルのみ、0.0.0.0の場合はすべてのネットワークインターフェースで待受している状態です。

リモート接続を許可するときの注意点

PostgreSQLをリモート接続可能にする場合は、単純にlisten_addressesを変更するだけではなく、セキュリティ対策も必要です。

特にインターネット上へ直接公開する場合は、以下のような対策を行うことが重要です。

  • 強力なパスワードを設定する
  • 接続元IPを限定する
  • 不要なユーザー権限を与えない
  • ファイアウォールでアクセス制御する
  • 可能ならVPN経由で接続する

例えば社内ネットワーク内の別PCから利用するだけなら、192.168.x.xなどの社内LANだけ許可する設定にすると安全性を高められます。

まとめ

PostgreSQLがローカル接続のみなのか、リモート接続を受け付けているのか確認するには、listen_addresses、pg_hba.conf、現在の接続情報を確認することが重要です。

SHOW listen_addresses;で待受設定を確認し、SHOW hba_file;でアクセス許可設定を確認することで、どこから接続可能なのか判断できます。

リモート接続は便利な機能ですが、設定次第では不正アクセスの原因にもなります。必要な範囲だけ接続を許可し、安全なPostgreSQL環境を構築することが大切です。

コメント

タイトルとURLをコピーしました