ぱそくま ろご
サーバー > PostgreSQL > PostgreSQLサーバーへの接続設定

PostgreSQLサーバーへの接続設定

PostgreSQLサーバーへの接続設定

デフォルトのままだと、PostgreSQLサーバーがインストールされているマシンからでしか、接続できません。 よって、別端末から、接続するには設定ファイルの修正と、OSのファイアウォールの設定が必要です。具体的な作業は以下のとおりです。

  • postgresql.confとpg_hba.confを編集。
  • 各OSのファイアウォールでポート(もしくはアプリケーション)を許可する。


postgresql.confの編集

postgresql.confはpostgresql全体を設定するファイルです。ファイルはinitdbで指定したディレクトリにあります。 (場所がわからない場合は「find / -name postgresql.conf」探してください。) 接続に重要なの「listen_addresses」で、ここにはpostgresqlが接続を監視するアドレスを指定します。 なぜ、「監視する」という言い回しになっているかというと、実際に接続の制御はpg_hba.confで行うためです。 設定方法は以下を参考にしてください。

例:postgresql.confのlisten_addresses


# *を指定すると全てのネットワークからの接続が監視対象
listen_addresses = '*'

# 自ホストのみ対象
#listen_addresses = 'localhost'

# 自ホストと2台のみ対象
#listen_addresses = 'localhost,192.168.11.10,192.168.11.11'

# ネットワーク経由は不可にし、ソケット通信のみ対象
#listen_addresses = ''

pg_hba.confの編集

pg_hba.confは接続認証を行う設定ファイルです。接続認証を1行づつエントリーしていきます。 エントリーの書式は[local|host|hostssl|hostnossl] [認証対象DB] [接続postgreユーザ] [アドレス[/サブネット]] [trust|regect|md5...]になります。

例:pg_hba.confのエントリー


# 「local」はTCP/IPではなく、Unixドメインソケットからの接続を許可
local   all             all                                     trust

# 192.168.11.0/255.255.255.0からの接続は全てのDBに許可。ただし、パスワード入力が必要。
# (postgresql.confのlisten_addressesの設定が優先されます。)
host    all             all             192.168.11.0/32            md5

ポイントは1,2行目のエントリーの最後にある、trustとmd5です。trustにすると、いくらALTER ROLLを使ってパスワードをつけても、パスワード無しで接続可能となるので、注意してください。md5はALTER ROLLで設定したパスワードで認証します。認証方法はldapやcertなどがありますが、ここでは詳しく扱いません。

ファイアウォールの設定

これでPostgreSQLの接続設定はOKですが、その前段で接続監視している各OSのファイアウォールにPostgreSQLを許可しないとOSで弾かれてしまいます。 ここではfirewalldの設定を紹介します。

例:firewalldにPostgreSQLを許可

# NICに適応されているゾーンを確認。
[paso ~] sudo firewall-cmd --get-active-zones 
dmz
  interfaces: enp0s3
# 適応可能なサービス名を確認。
[paso ~] sudo firewall-cmd --get-service 
RH-Satellite-6 .. pop3s postgresql ...

# postgresqlを許可。
[paso ~] sudo firewall-cmd --permanent --zone=dmz --add-service=postgresql 

# もしくは、厳密(IPアドレスの範囲指定)に設定したい場合はこちら。
[paso ~] sudo firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="192.168.11.0/24" service name="postgresql" accept' 

firewall-cmdは「--permanent」をつけてないパターンも流してください。これで接続が可能になるはずです。 許可したはずの別のマシンから、「psql -h 192.168.11.x postgres postgres」で接続してみてください。