このセクションでは、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=>