このセクションでは、PostgreSQL データベースに外部ホストから接続するための方法について紹介します。

初期の設定では、PostgreSQL データベースへの接続はできない状態になっています。

[root@db-2 ~]# telnet 172.16.2.220 5432
Trying 172.16.2.220...
telnet: connect to address 172.16.2.220: Connection refused
[root@db-2 ~]# 

ファイアウォールでの通信許可

PostgreSQL で使用する TCP 5432 通信をファイアウォールで許可する設定をします。

[root@db-1 ~]# firewall-cmd --add-port=5432/tcp --zone=public --permanent
success
[root@db-1 ~]# 

ファイアウォールで TCP 5432 通信を許可する設定がされていることを確認します。

[root@db-1 ~]# firewall-cmd --list-port --zone=public --permanent
5432/tcp
[root@db-1 ~]# 

ファイアウォールをリロードし、設定を反映します。

[root@db-1 ~]# firewall-cmd --reload
success
[root@db-1 ~]# 

クライアント認証の設定

pg_hba 設定ファイル( /var/lib/pgsql/11/data/pg_hba.conf )を編集し、以下設定します。

[root@db-1 ~]# vi /var/lib/pgsql/11/data/pg_hba.conf

リモートホストからのクライアント認証の受付を許可します。ここでは、postgres ユーザーでのリモート接続は拒否し、それ以外からのリモート接続は許可しています。

host    all             postgres        0.0.0.0/0               reject
host    all             all             0.0.0.0/0               md5

リモート接続の有効化設定

postgresql 設定ファイル( /var/lib/pgsql/11/data/postgresql.conf )を編集し、以下設定します。

[root@db-1 ~]# vi /var/lib/pgsql/11/data/postgresql.conf

listen_address パラメーターに ‘ * ‘ 指定します。

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
listen_addresses = '*'

PostgreSQL の設定反映

PostgreSQL サービスを再起動します。

■ 再起動
[root@db-1 ~]# systemctl restart postgresql-11
[root@db-1 ~]# 

■ 起動状態の確認
[root@db-1 ~]# systemctl status postgresql-11
● postgresql-11.service - PostgreSQL 11 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-01-01 21:46:15 JST; 7s ago
     Docs: https://www.postgresql.org/docs/11/static/
  Process: 3842 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 3847 (postmaster)
   CGroup: /system.slice/postgresql-11.service
           ├─3847 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
           ├─3849 postgres: logger   
           ├─3851 postgres: checkpointer   
           ├─3852 postgres: background writer   
           ├─3853 postgres: walwriter   
           ├─3854 postgres: autovacuum launcher   
           ├─3855 postgres: stats collector   
           └─3856 postgres: logical replication launcher   

Jan 01 21:46:14 db-1.novalocal systemd[1]: Starting PostgreSQL 11 database server...
Jan 01 21:46:15 db-1.novalocal postmaster[3847]: 2019-01-01 21:46:15.272 JST [3847] LO...32
Jan 01 21:46:15 db-1.novalocal postmaster[3847]: 2019-01-01 21:46:15.273 JST [3847] LO...32
Jan 01 21:46:15 db-1.novalocal postmaster[3847]: 2019-01-01 21:46:15.299 JST [3847] LO...2"
Jan 01 21:46:15 db-1.novalocal postmaster[3847]: 2019-01-01 21:46:15.318 JST [3847] LO...2"
Jan 01 21:46:15 db-1.novalocal postmaster[3847]: 2019-01-01 21:46:15.459 JST [3847] LO...ss
Jan 01 21:46:15 db-1.novalocal postmaster[3847]: 2019-01-01 21:46:15.459 JST [3847] HI...".
Jan 01 21:46:15 db-1.novalocal systemd[1]: Started PostgreSQL 11 database server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@db-1 ~]# 

動作確認

外部ホストから TCP 5432 に接続できることを確認します。

[root@db-2 ~]# telnet 172.16.2.220 5432
Trying 172.16.2.220...
Connected to 172.16.2.220.
Escape character is '^]'.


Connection closed by foreign host.
[root@db-2 ~]#

postgres ユーザーで PostgreSQL データベースへ接続します。接続できないことが確認できます。

[root@db-2 ~]# psql -U postgres -h 172.16.2.220
psql: FATAL:  pg_hba.conf rejects connection for host "172.16.2.221", user "postgres", database "postgres", SSL off
[root@db-2 ~]# 

postgres 以外のユーザーで PostgreSQL データベースへ接続します。接続できることが確認できます。

[root@db-2 ~]# psql -U knowledge -h 172.16.2.220
Password for user knowledge: 
psql (11.1)
Type "help" for help.

knowledge=>